diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2012-02-13 20:02:54 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2012-02-13 20:02:54 +0000 |
| commit | 526e04b8b4d8ba43f39c0bb653200b054bf5dbd9 (patch) | |
| tree | 243ac42cd058530735f62807599a36e760f377c4 /src | |
| parent | 336f191f80cbb5cfba9b4910ee1ada7a8133796e (diff) | |
| download | qmmp-526e04b8b4d8ba43f39c0bb653200b054bf5dbd9.tar.gz qmmp-526e04b8b4d8ba43f39c0bb653200b054bf5dbd9.tar.bz2 qmmp-526e04b8b4d8ba43f39c0bb653200b054bf5dbd9.zip | |
added 'disc number' tag support for flac files with embedded cuesheet, added sorting by disc number (Brice Videau)
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@2601 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src')
| -rw-r--r-- | src/plugins/Input/flac/decoder_flac.cpp | 5 | ||||
| -rw-r--r-- | src/plugins/Input/flac/decoderflacfactory.cpp | 11 | ||||
| -rw-r--r-- | src/plugins/Ui/skinned/playlist.cpp | 8 | ||||
| -rw-r--r-- | src/qmmpui/playlistmodel.cpp | 15 | ||||
| -rw-r--r-- | src/qmmpui/playlistmodel.h | 1 |
5 files changed, 40 insertions, 0 deletions
diff --git a/src/plugins/Input/flac/decoder_flac.cpp b/src/plugins/Input/flac/decoder_flac.cpp index a8a1c3c1f..3651f407a 100644 --- a/src/plugins/Input/flac/decoder_flac.cpp +++ b/src/plugins/Input/flac/decoder_flac.cpp @@ -292,6 +292,11 @@ bool DecoderFLAC::initialize() } data()->input = new QFile(p); data()->input->open(QIODevice::ReadOnly); + if(xiph_comment->contains("DISCNUMBER") && !xiph_comment->fieldListMap()["DISCNUMBER"].isEmpty()) + { + m_parser->info(m_track)->setMetaData(Qmmp::DISCNUMBER, + QString::fromUtf8(xiph_comment->fieldListMap()["DISCNUMBER"].toString().toCString(true)).trimmed()); + } QMap<Qmmp::MetaData, QString> metaData = m_parser->info(m_track)->metaData(); addMetaData(metaData); //send metadata } diff --git a/src/plugins/Input/flac/decoderflacfactory.cpp b/src/plugins/Input/flac/decoderflacfactory.cpp index fc9779d82..521318336 100644 --- a/src/plugins/Input/flac/decoderflacfactory.cpp +++ b/src/plugins/Input/flac/decoderflacfactory.cpp @@ -132,6 +132,17 @@ QList<FileInfo *> DecoderFLACFactory::createPlayList(const QString &fileName, bo if (tag->fieldListMap().contains("CUESHEET")) { CUEParser parser(tag->fieldListMap()["CUESHEET"].toString().toCString(true), fileName); + if(tag->contains("DISCNUMBER") && !tag->fieldListMap()["DISCNUMBER"].isEmpty()) + { + TagLib::StringList fld; + fld = tag->fieldListMap()["DISCNUMBER"]; + int i; + for(i=1; i<=parser.count(); i++) + { + parser.info(i)->setMetaData(Qmmp::DISCNUMBER, + QString::fromUtf8(fld.toString().toCString(true)).trimmed()); + } + } list = parser.createPlayList(); delete info; if(flacFile) diff --git a/src/plugins/Ui/skinned/playlist.cpp b/src/plugins/Ui/skinned/playlist.cpp index dca16c90d..04cf7a153 100644 --- a/src/plugins/Ui/skinned/playlist.cpp +++ b/src/plugins/Ui/skinned/playlist.cpp @@ -212,6 +212,10 @@ void PlayList::createActions() connect (albumAct, SIGNAL (triggered (bool)), signalMapper, SLOT (map())); signalMapper->setMapping (albumAct, PlayListModel::ALBUM); + QAction* discnumberAct = sort_mode_menu->addAction (tr ("By Disc Number")); + connect (discnumberAct, SIGNAL (triggered (bool)), signalMapper, SLOT (map())); + signalMapper->setMapping (discnumberAct, PlayListModel::DISCNUMBER); + QAction* artistAct = sort_mode_menu->addAction (tr ("By Artist")); connect (artistAct, SIGNAL (triggered (bool)), signalMapper, SLOT (map())); signalMapper->setMapping (artistAct, PlayListModel::ARTIST); @@ -247,6 +251,10 @@ void PlayList::createActions() connect (albumAct, SIGNAL (triggered (bool)), signalMapper, SLOT (map())); signalMapper->setMapping (albumAct, PlayListModel::ALBUM); + discnumberAct = sort_mode_menu->addAction (tr ("By Disc Number")); + connect (discnumberAct, SIGNAL (triggered (bool)), signalMapper, SLOT (map())); + signalMapper->setMapping (discnumberAct, PlayListModel::DISCNUMBER); + artistAct = sort_mode_menu->addAction (tr ("By Artist")); connect (artistAct, SIGNAL (triggered (bool)), signalMapper, SLOT (map())); signalMapper->setMapping (artistAct, PlayListModel::ARTIST); diff --git a/src/qmmpui/playlistmodel.cpp b/src/qmmpui/playlistmodel.cpp index 50ffe35b1..bbdb64a14 100644 --- a/src/qmmpui/playlistmodel.cpp +++ b/src/qmmpui/playlistmodel.cpp @@ -639,6 +639,17 @@ static bool _titleGreaterComparator(PlayListItem* s1,PlayListItem* s2) { return QString::localeAwareCompare (s1->value(Qmmp::TITLE), s2->value(Qmmp::TITLE)) > 0; } + +//by album+disc +static bool _discnumberLessComparator(PlayListItem* s1,PlayListItem* s2) +{ + return QString::localeAwareCompare (s1->value(Qmmp::DISCNUMBER), s2->value(Qmmp::DISCNUMBER)) < 0; +} + +static bool _discnumberGreaterComparator(PlayListItem* s1,PlayListItem* s2) +{ + return QString::localeAwareCompare (s1->value(Qmmp::DISCNUMBER), s2->value(Qmmp::DISCNUMBER)) > 0; +} //by album static bool _albumLessComparator(PlayListItem* s1,PlayListItem* s2) { @@ -722,6 +733,10 @@ void PlayListModel::doSort(int sort_mode,QList<PlayListItem*>& list_to_sort) compareLessFunc = _titleLessComparator; compareGreaterFunc = _titleGreaterComparator; break; + case DISCNUMBER: + compareLessFunc = _discnumberLessComparator; + compareGreaterFunc = _discnumberGreaterComparator; + break; case ALBUM: compareLessFunc = _albumLessComparator; compareGreaterFunc = _albumGreaterComparator; diff --git a/src/qmmpui/playlistmodel.h b/src/qmmpui/playlistmodel.h index 170425b3e..9663ea478 100644 --- a/src/qmmpui/playlistmodel.h +++ b/src/qmmpui/playlistmodel.h @@ -282,6 +282,7 @@ public: { TITLE, /*!< by title */ ALBUM, /*!< by album */ + DISCNUMBER, /*!< by discnumber */ ARTIST, /*!< by artist */ FILENAME, /*!< by file name */ PATH_AND_FILENAME, /*!< by path and file name */ |
