aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2012-02-13 20:02:54 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2012-02-13 20:02:54 +0000
commit526e04b8b4d8ba43f39c0bb653200b054bf5dbd9 (patch)
tree243ac42cd058530735f62807599a36e760f377c4 /src
parent336f191f80cbb5cfba9b4910ee1ada7a8133796e (diff)
downloadqmmp-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.cpp5
-rw-r--r--src/plugins/Input/flac/decoderflacfactory.cpp11
-rw-r--r--src/plugins/Ui/skinned/playlist.cpp8
-rw-r--r--src/qmmpui/playlistmodel.cpp15
-rw-r--r--src/qmmpui/playlistmodel.h1
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 */