aboutsummaryrefslogtreecommitdiff
path: root/src/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/Input/flac/decoderflacfactory.cpp27
-rw-r--r--src/plugins/Input/flac/detailsdialog.cpp16
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();
}