aboutsummaryrefslogtreecommitdiff
path: root/src/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/Input/mad/decodermadfactory.cpp10
-rw-r--r--src/plugins/Input/mad/mpegmetadatamodel.cpp44
2 files changed, 50 insertions, 4 deletions
diff --git a/src/plugins/Input/mad/decodermadfactory.cpp b/src/plugins/Input/mad/decodermadfactory.cpp
index a55627b60..91214f6fb 100644
--- a/src/plugins/Input/mad/decodermadfactory.cpp
+++ b/src/plugins/Input/mad/decodermadfactory.cpp
@@ -228,6 +228,16 @@ QList<FileInfo *> DecoderMADFactory::createPlayList(const QString &fileName, boo
info->setMetaData(Qmmp::DISCNUMBER, QString(disc.toCString()).trimmed());
}
}
+ else if(tag == fileRef.APETag())
+ {
+ TagLib::APE::Item fld;
+ if(!(fld = fileRef.APETag()->itemListMap()["ALBUM ARTIST"]).isEmpty())
+ info->setMetaData(Qmmp::ALBUMARTIST,
+ QString::fromUtf8(fld.toString().toCString(true)).trimmed());
+ if(!(fld = fileRef.APETag()->itemListMap()["COMPOSER"]).isEmpty())
+ info->setMetaData(Qmmp::COMPOSER,
+ QString::fromUtf8(fld.toString().toCString(true)).trimmed());
+ }
}
}
if (fileRef.audioProperties())
diff --git a/src/plugins/Input/mad/mpegmetadatamodel.cpp b/src/plugins/Input/mad/mpegmetadatamodel.cpp
index 5d040f013..c51edce34 100644
--- a/src/plugins/Input/mad/mpegmetadatamodel.cpp
+++ b/src/plugins/Input/mad/mpegmetadatamodel.cpp
@@ -182,7 +182,13 @@ QList<Qmmp::MetaData> MpegFileTagModel::keys()
QList<Qmmp::MetaData> list = TagModel::keys();
if (m_tagType == TagLib::MPEG::File::ID3v2)
return list;
+ else if(m_tagType == TagLib::MPEG::File::APE)
+ {
+ list.removeAll(Qmmp::DISCNUMBER);
+ return list;
+ }
list.removeAll(Qmmp::COMPOSER);
+ list.removeAll(Qmmp::ALBUMARTIST);
list.removeAll(Qmmp::DISCNUMBER);
return list;
}
@@ -207,9 +213,16 @@ const QString MpegFileTagModel::value(Qmmp::MetaData key)
str = m_tag->artist();
break;
case Qmmp::ALBUMARTIST:
- if(m_tagType == TagLib::MPEG::File::ID3v2
- && !m_file->ID3v2Tag()->frameListMap()["TPE2"].isEmpty())
+ if(m_tagType == TagLib::MPEG::File::ID3v2 &&
+ !m_file->ID3v2Tag()->frameListMap()["TPE2"].isEmpty())
+ {
str = m_file->ID3v2Tag()->frameListMap()["TPE2"].front()->toString();
+ }
+ else if(m_tagType == TagLib::MPEG::File::APE &&
+ !m_file->APETag()->itemListMap()["ALBUM ARTIST"].isEmpty())
+ {
+ str = m_file->APETag()->itemListMap()["ALBUM ARTIST"].toString();
+ }
break;
case Qmmp::ALBUM:
str = m_tag->album();
@@ -221,9 +234,16 @@ const QString MpegFileTagModel::value(Qmmp::MetaData key)
str = m_tag->genre();
break;
case Qmmp::COMPOSER:
- if(m_tagType == TagLib::MPEG::File::ID3v2
- && !m_file->ID3v2Tag()->frameListMap()["TCOM"].isEmpty())
+ if(m_tagType == TagLib::MPEG::File::ID3v2 &&
+ !m_file->ID3v2Tag()->frameListMap()["TCOM"].isEmpty())
+ {
str = m_file->ID3v2Tag()->frameListMap()["TCOM"].front()->toString();
+ }
+ else if(m_tagType == TagLib::MPEG::File::APE &&
+ !m_file->APETag()->itemListMap()["COMPOSER"].isEmpty())
+ {
+ str = m_file->APETag()->itemListMap()["COMPOSER"].toString();
+ }
break;
case Qmmp::YEAR:
return QString::number(m_tag->year());
@@ -296,10 +316,26 @@ void MpegFileTagModel::setValue(Qmmp::MetaData key, const QString &value)
}
}
else if(m_tagType == TagLib::MPEG::File::APE)
+ {
type = TagLib::String::UTF8;
+ }
TagLib::String str = TagLib::String(m_codec->fromUnicode(value).constData(), type);
+ if(m_tagType == TagLib::MPEG::File::APE)
+ {
+ if(key == Qmmp::COMPOSER)
+ {
+ m_file->APETag()->addValue("COMPOSER", str, true);
+ return;
+ }
+ else if(key == Qmmp::ALBUMARTIST)
+ {
+ m_file->APETag()->addValue("ALBUM ARTIST", str, true);
+ return;
+ }
+ }
+
switch((int) key)
{
case Qmmp::TITLE: