aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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 */