aboutsummaryrefslogtreecommitdiff
path: root/src/plugins
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2015-04-30 20:53:13 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2015-04-30 20:53:13 +0000
commitdb23b5ca84741c44ef37c6a5ae5aa8421b3f5a78 (patch)
treee076462468a2c9fad076a416913e831419ea8fdf /src/plugins
parent744da239bb6fa7a332da181ab0a65221c0de9978 (diff)
downloadqmmp-db23b5ca84741c44ef37c6a5ae5aa8421b3f5a78.tar.gz
qmmp-db23b5ca84741c44ef37c6a5ae5aa8421b3f5a78.tar.bz2
qmmp-db23b5ca84741c44ef37c6a5ae5aa8421b3f5a78.zip
mpeg plugin: improved ape support
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@4885 90c681e8-e032-0410-971d-27865f9a5e38
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: