diff options
Diffstat (limited to 'src/plugins/Input/flac')
| -rw-r--r-- | src/plugins/Input/flac/decoderflacfactory.cpp | 27 | ||||
| -rw-r--r-- | src/plugins/Input/flac/detailsdialog.cpp | 16 |
2 files changed, 37 insertions, 6 deletions
diff --git a/src/plugins/Input/flac/decoderflacfactory.cpp b/src/plugins/Input/flac/decoderflacfactory.cpp index 5e953f851..d52eb830e 100644 --- a/src/plugins/Input/flac/decoderflacfactory.cpp +++ b/src/plugins/Input/flac/decoderflacfactory.cpp @@ -94,14 +94,29 @@ QList<FileInfo *> DecoderFLACFactory::createPlayList(const QString &fileName, bo //looking for cuesheet comment TagLib::Ogg::XiphComment *xiph_comment = useMetaData ? fileRef.xiphComment() : 0; QList <FileInfo*> list; - if (xiph_comment && xiph_comment->fieldListMap().contains("CUESHEET")) + if(xiph_comment) { - CUEParser parser(xiph_comment->fieldListMap()["CUESHEET"].toString().toCString(TRUE), fileName); - list = parser.createPlayList(); - delete info; + if (xiph_comment->fieldListMap().contains("CUESHEET")) + { + CUEParser parser(xiph_comment->fieldListMap()["CUESHEET"] + .toString().toCString(TRUE), fileName); + list = parser.createPlayList(); + delete info; + return list; + } + else + { + //additional metadata + TagLib::StringList fld; + if(!xiph_comment->fieldListMap()["COMPOSER"].isEmpty()) + info->setMetaData(Qmmp::COMPOSER, + QString::fromUtf8(fld.toString().toCString(TRUE)).trimmed()); + if(!xiph_comment->fieldListMap()["DISCNUMBER"].isEmpty()) + info->setMetaData(Qmmp::DISCNUMBER, + QString::fromUtf8(fld.toString().toCString(TRUE)).trimmed()); + } } - else - list << info; + list << info; return list; } diff --git a/src/plugins/Input/flac/detailsdialog.cpp b/src/plugins/Input/flac/detailsdialog.cpp index a06b0778e..a3740b3f9 100644 --- a/src/plugins/Input/flac/detailsdialog.cpp +++ b/src/plugins/Input/flac/detailsdialog.cpp @@ -20,6 +20,8 @@ #include <taglib/tag.h> #include <taglib/fileref.h> #include <taglib/flacfile.h> +#include <taglib/xiphcomment.h> +#include <taglib/tmap.h> #include <QFile> #include <QFileInfo> @@ -72,6 +74,12 @@ void DetailsDialog::loadTags() setMetaData(Qmmp::YEAR, f.tag()->year()); setMetaData(Qmmp::TRACK, f.tag()->track()); setMetaData(Qmmp::URL, m_path); + TagLib::FLAC::File *file = dynamic_cast< TagLib::FLAC::File *>(f.file()); + TagLib::StringList fld; + if(file->xiphComment() && !(fld = file->xiphComment()->fieldListMap()["COMPOSER"]).isEmpty()) + setMetaData(Qmmp::COMPOSER, TStringToQString_qt4(fld.toString())); + if(file->xiphComment() && !(fld = file->xiphComment()->fieldListMap()["DISCNUMBER"]).isEmpty()) + setMetaData(Qmmp::DISCNUMBER, TStringToQString_qt4(fld.toString())); } void DetailsDialog::writeTags() @@ -84,5 +92,13 @@ void DetailsDialog::writeTags() f.tag()->setGenre(QStringToTString_qt4(strMetaData(Qmmp::GENRE))); f.tag()->setYear(intMetaData(Qmmp::YEAR)); f.tag()->setTrack(intMetaData(Qmmp::TRACK)); + TagLib::FLAC::File *file = dynamic_cast< TagLib::FLAC::File *>(f.file()); + strMetaData(Qmmp::COMPOSER).isEmpty() ? + file->xiphComment()->removeField("COMPOSER"): + file->xiphComment()->addField("COMPOSER", QStringToTString_qt4(strMetaData(Qmmp::COMPOSER)), TRUE); + intMetaData(Qmmp::DISCNUMBER) == 0 ? + file->xiphComment()->removeField("DISCNUMBER"): + file->xiphComment()->addField("DISCNUMBER", + QStringToTString_qt4(strMetaData(Qmmp::DISCNUMBER)), TRUE); f.save(); } |
