aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/Input/flac/decoderflacfactory.cpp
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2019-04-27 19:58:19 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2019-04-27 19:58:19 +0000
commit66ae0bd66aabf25c13171836a3a2cbb6e8d83b23 (patch)
treefa4ae6a884cb708866d9ecd4cdb8248ce524acca /src/plugins/Input/flac/decoderflacfactory.cpp
parentd33ea6f849241f163c430d49e2920bf0e66dc35e (diff)
downloadqmmp-66ae0bd66aabf25c13171836a3a2cbb6e8d83b23.tar.gz
qmmp-66ae0bd66aabf25c13171836a3a2cbb6e8d83b23.tar.bz2
qmmp-66ae0bd66aabf25c13171836a3a2cbb6e8d83b23.zip
flac: using shared cue parser
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@8799 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/plugins/Input/flac/decoderflacfactory.cpp')
-rw-r--r--src/plugins/Input/flac/decoderflacfactory.cpp93
1 files changed, 45 insertions, 48 deletions
diff --git a/src/plugins/Input/flac/decoderflacfactory.cpp b/src/plugins/Input/flac/decoderflacfactory.cpp
index 74066316b..05d9c7881 100644
--- a/src/plugins/Input/flac/decoderflacfactory.cpp
+++ b/src/plugins/Input/flac/decoderflacfactory.cpp
@@ -27,7 +27,7 @@
#include <taglib/tmap.h>
#include <taglib/tfilestream.h>
#include <taglib/id3v2framefactory.h>
-#include "cueparser.h"
+#include <qmmp/cueparser.h>
#include "decoder_flac.h"
#include "flacmetadatamodel.h"
#include "decoderflacfactory.h"
@@ -67,23 +67,17 @@ Decoder *DecoderFLACFactory::create(const QString &path, QIODevice *i)
QList<TrackInfo*> DecoderFLACFactory::createPlayList(const QString &path, TrackInfo::Parts parts, QStringList *ignoredFiles)
{
- //extract metadata of the one cue track
- if(path.contains("://"))
+ Q_UNUSED(ignoredFiles);
+
+ int track = -1; //cue track
+ QString filePath = path;
+
+ if(path.contains("://")) //is it cue track?
{
- QString filePath = path;
filePath.remove("flac://");
filePath.remove(QRegExp("#\\d+$"));
- int track = filePath.section("#", -1).toInt();
- QList<TrackInfo *> list = createPlayList(filePath, TrackInfo::Properties, ignoredFiles);
- if (list.isEmpty() || track <= 0 || track > list.count())
- {
- qDeleteAll(list);
- list.clear();
- return list;
- }
- TrackInfo *info = list.takeAt(track - 1);
- qDeleteAll(list);
- return QList<TrackInfo *>() << info;
+ track = filePath.section("#", -1).toInt();
+ parts = TrackInfo::AllParts; //extract all metadata for single cue track
}
TrackInfo *info = new TrackInfo(path);
@@ -117,12 +111,33 @@ QList<TrackInfo*> DecoderFLACFactory::createPlayList(const QString &path, TrackI
return QList<TrackInfo *>();
}
+ if((parts & TrackInfo::Properties) && ap)
+ {
+ info->setValue(Qmmp::BITRATE, ap->bitrate());
+ info->setValue(Qmmp::SAMPLERATE, ap->sampleRate());
+ info->setValue(Qmmp::CHANNELS, ap->channels());
+ info->setValue(Qmmp::BITS_PER_SAMPLE, ap->bitsPerSample());
+ info->setValue(Qmmp::FORMAT_NAME, flacFile ? "FLAC" : "Ogg FLAC");
+ info->setDuration(ap->lengthInMilliseconds());
+ }
+
+ if((parts & TrackInfo::ReplayGainInfo) && tag && !tag->isEmpty())
+ {
+ TagLib::Ogg::FieldListMap items = tag->fieldListMap();
+ if (items.contains("REPLAYGAIN_TRACK_GAIN"))
+ info->setValue(Qmmp::REPLAYGAIN_TRACK_GAIN,TStringToQString(items["REPLAYGAIN_TRACK_GAIN"].front()));
+ if (items.contains("REPLAYGAIN_TRACK_PEAK"))
+ info->setValue(Qmmp::REPLAYGAIN_TRACK_PEAK,TStringToQString(items["REPLAYGAIN_TRACK_PEAK"].front()));
+ if (items.contains("REPLAYGAIN_ALBUM_GAIN"))
+ info->setValue(Qmmp::REPLAYGAIN_ALBUM_GAIN,TStringToQString(items["REPLAYGAIN_ALBUM_GAIN"].front()));
+ if (items.contains("REPLAYGAIN_ALBUM_PEAK"))
+ info->setValue(Qmmp::REPLAYGAIN_ALBUM_PEAK,TStringToQString(items["REPLAYGAIN_ALBUM_PEAK"].front()));
+ }
+
if((parts & TrackInfo::MetaData) && tag && !tag->isEmpty())
{
- if (tag->fieldListMap().contains("CUESHEET"))
+ if (tag->fieldListMap().contains("CUESHEET") && ap)
{
- delete info;
-
QByteArray data(tag->fieldListMap()["CUESHEET"].toString().toCString(true));
QString diskNumber;
@@ -132,19 +147,24 @@ QList<TrackInfo*> DecoderFLACFactory::createPlayList(const QString &path, TrackI
diskNumber = TStringToQString(fld.toString()).trimmed();
}
- if(flacFile)
- delete flacFile;
- if(oggFlacFile)
- delete oggFlacFile;
+ CueParser parser(data);
- CUEParser parser(data, path);
if(!diskNumber.isEmpty())
{
for(int i = 1; i <= parser.count(); ++i)
- parser.info(i)->setValue(Qmmp::DISCNUMBER, diskNumber);
+ parser.setMetaData(i, Qmmp::DISCNUMBER, diskNumber);
}
+ parser.setDuration(ap->lengthInMilliseconds());
+ parser.setProperties(info->properties());
+ parser.setUrl("flac", path);
+
+ if(flacFile)
+ delete flacFile;
+ if(oggFlacFile)
+ delete oggFlacFile;
- return parser.createPlayList();
+ delete info;
+ return (track > 0) ? parser.createPlayList(track) : parser.createPlayList();
}
info->setValue(Qmmp::ALBUM, TStringToQString(tag->album()));
@@ -165,29 +185,6 @@ QList<TrackInfo*> DecoderFLACFactory::createPlayList(const QString &path, TrackI
}
- if((parts & TrackInfo::Properties) && ap)
- {
- info->setValue(Qmmp::BITRATE, ap->bitrate());
- info->setValue(Qmmp::SAMPLERATE, ap->sampleRate());
- info->setValue(Qmmp::CHANNELS, ap->channels());
- info->setValue(Qmmp::BITS_PER_SAMPLE, ap->bitsPerSample());
- info->setValue(Qmmp::FORMAT_NAME, flacFile ? "FLAC" : "Ogg FLAC");
- info->setDuration(ap->lengthInMilliseconds());
- }
-
- if((parts & TrackInfo::ReplayGainInfo) && tag && !tag->isEmpty())
- {
- TagLib::Ogg::FieldListMap items = tag->fieldListMap();
- if (items.contains("REPLAYGAIN_TRACK_GAIN"))
- info->setValue(Qmmp::REPLAYGAIN_TRACK_GAIN,TStringToQString(items["REPLAYGAIN_TRACK_GAIN"].front()));
- if (items.contains("REPLAYGAIN_TRACK_PEAK"))
- info->setValue(Qmmp::REPLAYGAIN_TRACK_PEAK,TStringToQString(items["REPLAYGAIN_TRACK_PEAK"].front()));
- if (items.contains("REPLAYGAIN_ALBUM_GAIN"))
- info->setValue(Qmmp::REPLAYGAIN_ALBUM_GAIN,TStringToQString(items["REPLAYGAIN_ALBUM_GAIN"].front()));
- if (items.contains("REPLAYGAIN_ALBUM_PEAK"))
- info->setValue(Qmmp::REPLAYGAIN_ALBUM_PEAK,TStringToQString(items["REPLAYGAIN_ALBUM_PEAK"].front()));
- }
-
if(flacFile)
delete flacFile;
if(oggFlacFile)