diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2019-04-27 16:50:58 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2019-04-27 16:50:58 +0000 |
| commit | 1a72354c0765d2ac473ce052ca507963ce0b007c (patch) | |
| tree | f98baf14b8b7ab02b078d0721a8861e7a1e925e4 /src | |
| parent | 6131c57fbb181c31cfd4dff25034dec7f70f340f (diff) | |
| download | qmmp-1a72354c0765d2ac473ce052ca507963ce0b007c.tar.gz qmmp-1a72354c0765d2ac473ce052ca507963ce0b007c.tar.bz2 qmmp-1a72354c0765d2ac473ce052ca507963ce0b007c.zip | |
ignore invalid cue files
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@8797 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src')
| -rw-r--r-- | src/plugins/Input/cue/cuefile.cpp | 22 | ||||
| -rw-r--r-- | src/plugins/Input/cue/decodercuefactory.cpp | 8 | ||||
| -rw-r--r-- | src/qmmp/cueparser.cpp | 52 | ||||
| -rw-r--r-- | src/qmmp/cueparser.h | 5 |
4 files changed, 52 insertions, 35 deletions
diff --git a/src/plugins/Input/cue/cuefile.cpp b/src/plugins/Input/cue/cuefile.cpp index 69a4622b9..897578860 100644 --- a/src/plugins/Input/cue/cuefile.cpp +++ b/src/plugins/Input/cue/cuefile.cpp @@ -79,7 +79,7 @@ CueFile::CueFile(const QString &path) : CueParser() codec = QTextCodec::codecForName("UTF-8"); settings.endGroup(); //qDebug("CUEParser: using %s encoding", codec->name().constData()); - loadData(data, codec->name()); + loadData(data, codec); setUrl("cue", path); for(const QString &dataFileName : files()) { @@ -94,6 +94,16 @@ CueFile::CueFile(const QString &path) : CueParser() pl.clear(); } } + + for(const QString &path : m_dataFiles.values()) + { + if(!QFile::exists(path)) + { + qDebug("CueFile: unable to find file: %s", qPrintable(path)); + clear(); + return; + } + } } CueFile::~CueFile() @@ -144,16 +154,6 @@ QStringList CueFile::splitLine(const QString &line) return list; } -/*qint64 CueFile::getLength(const QString &str) -{ - QStringList list = str.split(":"); - if (list.size() == 2) - return (qint64)list.at(0).toInt()*60000 + list.at(1).toInt()*1000; - else if (list.size() == 3) - return (qint64)list.at(0).toInt()*60000 + list.at(1).toInt()*1000 + list.at(2).toInt()*1000/75; - return 0; -}*/ - QString CueFile::getDirtyPath(const QString &cue_path, const QString &path) { if((QFile::exists(path) && Decoder::findByFilePath(path)) || !m_dirty) diff --git a/src/plugins/Input/cue/decodercuefactory.cpp b/src/plugins/Input/cue/decodercuefactory.cpp index 43bbb7354..386d3e94d 100644 --- a/src/plugins/Input/cue/decodercuefactory.cpp +++ b/src/plugins/Input/cue/decodercuefactory.cpp @@ -58,14 +58,8 @@ QList<TrackInfo *> DecoderCUEFactory::createPlayList(const QString &path, TrackI CueFile parser(path); if(path.contains("://")) { - QList<TrackInfo *> list; int track = path.section("#", -1).toInt(); - if (!parser.count() || track <= 0 || track > parser.count()) - return list; - list = parser.createPlayList(); - TrackInfo *info = list.takeAt(track - 1); - qDeleteAll(list); - return QList<TrackInfo *>() << info; + return parser.createPlayList(track); } else { diff --git a/src/qmmp/cueparser.cpp b/src/qmmp/cueparser.cpp index ad065c4a5..937485470 100644 --- a/src/qmmp/cueparser.cpp +++ b/src/qmmp/cueparser.cpp @@ -31,29 +31,23 @@ CueParser::CueParser(const QByteArray &data, const QByteArray &codecName) CueParser::~CueParser() { - qDeleteAll(m_tracks); - m_tracks.clear(); + clear(); } void CueParser::loadData(const QByteArray &data, const QByteArray &codecName) { - qDeleteAll(m_tracks); - m_tracks.clear(); - m_files.clear(); + loadData(data, QTextCodec::codecForName(codecName)); +} + +void CueParser::loadData(const QByteArray &data, QTextCodec *codec) +{ + clear(); QString artist, album, genre, date, comment, file; double album_peak = 0.0, album_gain = 0.0; QTextStream textStream(data); - if(codecName.isEmpty()) - { - textStream.setCodec("UTF-8"); - } - else - { - QTextCodec *codec = QTextCodec::codecForName(codecName); - textStream.setCodec(codec ? codec : QTextCodec::codecForName("UTF-8")); - } + textStream.setCodec(codec ? codec : QTextCodec::codecForName("UTF-8")); while (!textStream.atEnd()) { @@ -131,12 +125,24 @@ void CueParser::loadData(const QByteArray &data, const QByteArray &codecName) QList<TrackInfo *> CueParser::createPlayList() const { - QList<TrackInfo*> out; + QList<TrackInfo *> out; for(const CUETrack *track : m_tracks) out << new TrackInfo(track->info); return out; } +QList<TrackInfo *> CueParser::createPlayList(int track) const +{ + QList<TrackInfo *> out; + if(track < 1 || track > m_tracks.count()) + { + qWarning("CueParser: invalid track number: %d", track); + return out; + } + out << new TrackInfo(m_tracks.at(track - 1)->info); + return out; +} + const QStringList &CueParser::files() const { return m_files; @@ -144,12 +150,12 @@ const QStringList &CueParser::files() const qint64 CueParser::offset(int track) const { - if(track < 0 || track >= m_tracks.count()) + if(track < 1 || track > m_tracks.count()) { qWarning("CueParser: invalid track number: %d", track); return 0; } - return m_tracks.at(track)->offset; + return m_tracks.at(track - 1)->offset; } qint64 CueParser::duration(int track) const @@ -187,6 +193,11 @@ int CueParser::count() const return m_tracks.count(); } +bool CueParser::isEmpty() const +{ + return m_tracks.isEmpty(); +} + const TrackInfo *CueParser::info(int track) const { if(track < 1 || track > m_tracks.count()) @@ -252,6 +263,13 @@ void CueParser::setUrl(const QString &scheme, const QString &path) m_tracks.at(i)->info.setPath(QString("%1://%2#%3").arg(scheme).arg(path).arg(m_tracks.at(i)->info.value(Qmmp::TRACK))); } +void CueParser::clear() +{ + qDeleteAll(m_tracks); + m_tracks.clear(); + m_files.clear(); +} + QStringList CueParser::splitLine(const QString &line) { //qDebug("raw string = %s",qPrintable(line)); diff --git a/src/qmmp/cueparser.h b/src/qmmp/cueparser.h index 50faa5a87..2606a4468 100644 --- a/src/qmmp/cueparser.h +++ b/src/qmmp/cueparser.h @@ -24,6 +24,7 @@ #include <QString> #include <QList> #include <QStringList> +#include <QTextCodec> #include "trackinfo.h" #include "qmmp_export.h" @@ -34,19 +35,23 @@ public: CueParser(const QByteArray &data, const QByteArray &codecName = QByteArray()); ~CueParser(); void loadData(const QByteArray &data, const QByteArray &codecName = QByteArray()); + void loadData(const QByteArray &data, QTextCodec *codec); QList<TrackInfo *> createPlayList() const; + QList<TrackInfo *> createPlayList(int track) const; const QStringList &files() const; qint64 offset(int track) const; qint64 duration(int track) const; QString file(int track) const; QString url(int track) const; int count() const; + bool isEmpty() const; const TrackInfo *info(int track) const; void setDuration(const QString &file, qint64 duration); void setDuration(qint64 duration); void setProperties(const QString &file, const QMap<Qmmp::TrackProperty, QString> &properties); void setProperties(const QMap<Qmmp::TrackProperty, QString> &properties); void setUrl(const QString &scheme, const QString &path); + void clear(); private: struct CUETrack |
