/*************************************************************************** copyright : (C) 2003 by Scott Wheeler email : wheeler@kde.org ***************************************************************************/ /*************************************************************************** * This library is free software; you can redistribute it and/or modify * * it under the terms of the GNU Lesser General Public License version * * 2.1 as published by the Free Software Foundation. * * * * This library is distributed in the hope that it will be useful, but * * WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * * USA * ***************************************************************************/ #include #include #include "fileref.h" #include "mpegfile.h" #include "vorbisfile.h" #include "flacfile.h" using namespace TagLib; class FileRef::FileRefPrivate : public RefCounter { public: FileRefPrivate(File *f) : RefCounter(), file(f) {} ~FileRefPrivate() { delete file; } File *file; }; //////////////////////////////////////////////////////////////////////////////// // public members //////////////////////////////////////////////////////////////////////////////// FileRef::FileRef(const char *fileName, bool readAudioProperties, AudioProperties::ReadStyle audioPropertiesStyle) { d = new FileRefPrivate(create(fileName, readAudioProperties, audioPropertiesStyle)); } FileRef::FileRef(File *file) { d = new FileRefPrivate(file); } FileRef::FileRef(const FileRef &ref) : d(ref.d) { d->ref(); } FileRef::~FileRef() { if(d->deref()) delete d; } Tag *FileRef::tag() const { return d->file->tag(); } AudioProperties *FileRef::audioProperties() const { return d->file->audioProperties(); } File *FileRef::file() const { return d->file; } void FileRef::save() { d->file->save(); } bool FileRef::isNull() const { return !d->file || !d->file->isValid(); } FileRef &FileRef::operator=(const FileRef &ref) { if(&ref == this) return *this; if(d->deref()) delete d; d = ref.d; d->ref(); return *this; } bool FileRef::operator==(const FileRef &ref) const { return ref.d->file == d->file; } bool FileRef::operator!=(const FileRef &ref) const { return ref.d->file != d->file; } File *FileRef::create(const char *fileName, bool readAudioProperties, AudioProperties::ReadStyle audioPropertiesStyle) // static { // Ok, this is really dumb for now, but it works for testing. String s = fileName; if(s.size() > 4) { if(s.substr(s.size() - 4, 4).upper() == ".OGG") return new Vorbis::File(fileName, readAudioProperties, audioPropertiesStyle); if(s.substr(s.size() - 4, 4).upper() == ".MP3") return new MPEG::File(fileName, readAudioProperties, audioPropertiesStyle); if(s.substr(s.size() - 5, 5).upper() == ".FLAC") return new FLAC::File(fileName, readAudioProperties, audioPropertiesStyle); } return 0; }