From db23b5ca84741c44ef37c6a5ae5aa8421b3f5a78 Mon Sep 17 00:00:00 2001 From: trialuser02 Date: Thu, 30 Apr 2015 20:53:13 +0000 Subject: 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 --- src/plugins/Input/mad/decodermadfactory.cpp | 10 +++++++ src/plugins/Input/mad/mpegmetadatamodel.cpp | 44 ++++++++++++++++++++++++++--- 2 files changed, 50 insertions(+), 4 deletions(-) (limited to 'src/plugins/Input/mad') 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 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 MpegFileTagModel::keys() QList 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: -- cgit v1.2.3-13-gbd6f