diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2011-02-01 16:41:00 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2011-02-01 16:41:00 +0000 |
| commit | 1c8ce3f30f8c48b161ae7baa3ad98080ebe954ad (patch) | |
| tree | 2abd61f84412e825548c251371f47871a5a9b1c4 /src/plugins | |
| parent | 622d86de977922a6714cb771c735f2f2a25c0d78 (diff) | |
| download | qmmp-1c8ce3f30f8c48b161ae7baa3ad98080ebe954ad.tar.gz qmmp-1c8ce3f30f8c48b161ae7baa3ad98080ebe954ad.tar.bz2 qmmp-1c8ce3f30f8c48b161ae7baa3ad98080ebe954ad.zip | |
cue parser: fixed problem with paths which contains colon
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@2032 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/plugins')
| -rw-r--r-- | src/plugins/Input/cue/cuemetadatamodel.cpp | 6 | ||||
| -rw-r--r-- | src/plugins/Input/cue/cueparser.cpp | 66 | ||||
| -rw-r--r-- | src/plugins/Input/cue/cueparser.h | 7 | ||||
| -rw-r--r-- | src/plugins/Input/cue/decoder_cue.cpp | 6 | ||||
| -rw-r--r-- | src/plugins/Input/cue/decodercuefactory.cpp | 2 | ||||
| -rw-r--r-- | src/plugins/Input/flac/cueparser.cpp | 1 | ||||
| -rw-r--r-- | src/plugins/Input/flac/decoder_flac.cpp | 1 | ||||
| -rw-r--r-- | src/plugins/Input/flac/flacmetadatamodel.cpp | 1 | ||||
| -rw-r--r-- | src/plugins/Input/gme/gmehelper.cpp | 2 | ||||
| -rw-r--r-- | src/plugins/Input/wavpack/cueparser.cpp | 1 | ||||
| -rw-r--r-- | src/plugins/Input/wavpack/decoder_wavpack.cpp | 1 | ||||
| -rw-r--r-- | src/plugins/Input/wavpack/wavpackmetadatamodel.cpp | 1 |
12 files changed, 28 insertions, 67 deletions
diff --git a/src/plugins/Input/cue/cuemetadatamodel.cpp b/src/plugins/Input/cue/cuemetadatamodel.cpp index 6df402eae..5e9c7a71a 100644 --- a/src/plugins/Input/cue/cuemetadatamodel.cpp +++ b/src/plugins/Input/cue/cuemetadatamodel.cpp @@ -24,11 +24,7 @@ CUEMetaDataModel::CUEMetaDataModel(const QString &url, QObject *parent) : MetaDataModel(parent) { - QString p = QUrl(url).path(); - p.replace(QString(QUrl::toPercentEncoding("#")), "#"); - p.replace(QString(QUrl::toPercentEncoding("?")), "?"); - p.replace(QString(QUrl::toPercentEncoding("%")), "%"); - m_parser = new CUEParser(p); + m_parser = new CUEParser(url); if (m_parser->count() == 0) { qWarning("CUEMetaDataModel: invalid cue file"); diff --git a/src/plugins/Input/cue/cueparser.cpp b/src/plugins/Input/cue/cueparser.cpp index 3cb308ef5..bdf1e68dd 100644 --- a/src/plugins/Input/cue/cueparser.cpp +++ b/src/plugins/Input/cue/cueparser.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2008-2011 by Ilya Kotov * + * Copyright (C) 2008-2010 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -20,7 +20,6 @@ #include <QFile> #include <QDir> -#include <QDirIterator> #include <QSettings> #include <QTextStream> #include <QTextCodec> @@ -31,8 +30,18 @@ #endif #include "cueparser.h" -CUEParser::CUEParser(const QString &fileName) +CUEParser::CUEParser(const QString &url) { + QString fileName = url; + if(url.contains("://")) + { + QString p = QUrl(url).path(); + p.replace(QString(QUrl::toPercentEncoding("#")), "#"); + p.replace(QString(QUrl::toPercentEncoding("?")), "?"); + p.replace(QString(QUrl::toPercentEncoding("%")), "%"); + p.replace(QString(QUrl::toPercentEncoding(":")), ":"); + fileName = p; + } QFile file(fileName); if (!file.open(QIODevice::ReadOnly)) { @@ -45,7 +54,6 @@ CUEParser::CUEParser(const QString &fileName) QTextCodec *codec = QTextCodec::codecForName(settings.value("encoding","ISO-8859-1").toByteArray ()); if(!codec) codec = QTextCodec::codecForName("UTF-8"); - m_dirty = settings.value("dirty_cue", false).toBool(); #ifdef WITH_ENCA EncaAnalyser analyser = 0; if(settings.value("use_enca", false).toBool()) @@ -90,7 +98,7 @@ CUEParser::CUEParser(const QString &fileName) else m_infoList.last().setLength(0); } - file_path = getDirtyPath(fileName, QFileInfo(fileName).dir().filePath(words[1])); + file_path = QFileInfo(fileName).dir().filePath(words[1]); new_file = true; } @@ -114,6 +122,7 @@ CUEParser::CUEParser(const QString &fileName) path.replace("%", QString(QUrl::toPercentEncoding("%"))); //replace special symbols path.replace("#", QString(QUrl::toPercentEncoding("#"))); path.replace("?", QString(QUrl::toPercentEncoding("?"))); + path.replace(":", QString(QUrl::toPercentEncoding(":"))); FileInfo info("cue://" + path + QString("#%1").arg(words[1].toInt())); info.setMetaData(Qmmp::TRACK, words[1].toInt()); info.setMetaData(Qmmp::ALBUM, album); @@ -249,50 +258,3 @@ qint64 CUEParser::getLength(const QString &str) return (qint64)list.at(0).toInt()*60000 + list.at(1).toInt()*1000 + list.at(2).toInt()*1000/75; return 0; } - -QString CUEParser::getDirtyPath(const QString &cue, const QString &path) -{ - - if (Decoder::findByPath(path) || ! m_dirty) - return path; - - QStringList candidates; - QDirIterator it(QFileInfo(path).dir().path(), QDir::Files); - while (it.hasNext()) - { - it.next(); - QString f = it.filePath(); - if ((f != cue) && Decoder::findByPath(f)) - candidates.push_back(f); - } - - if (candidates.empty()) - return path; - else if (candidates.count() == 1) - return candidates.first(); - - int dot = cue.lastIndexOf('.'); - if (dot != -1) - { - QRegExp r(QRegExp::escape(cue.left(dot)) + "\\.[^\\.]+$"); - - int index = candidates.indexOf(r); - int rindex = candidates.lastIndexOf(r); - - if ((index != -1) && (index == rindex)) - return candidates[index]; - } - dot = path.lastIndexOf('.'); - if (dot != -1) - { - QRegExp r(QRegExp::escape(path.left(dot)) + "\\.[^\\.]+$"); - - int index = candidates.indexOf(r); - int rindex = candidates.lastIndexOf(r); - - if ((index != -1) && (index == rindex)) - return candidates[index]; - } - - return path; -} diff --git a/src/plugins/Input/cue/cueparser.h b/src/plugins/Input/cue/cueparser.h index 61beef48c..31b9e4e01 100644 --- a/src/plugins/Input/cue/cueparser.h +++ b/src/plugins/Input/cue/cueparser.h @@ -30,12 +30,12 @@ /** - @author Ilya Kotov <forkotov02@hotmail.ru> + @author Ilya Kotov <forkotov02@hotmail.ru> */ class CUEParser { public: - CUEParser(const QString &fileName); + CUEParser(const QString &url); ~CUEParser(); @@ -51,10 +51,9 @@ private: QList <FileInfo> m_infoList; QList <qint64> m_offsets; QStringList m_files; - bool m_dirty; QStringList splitLine(const QString &line); qint64 getLength(const QString &str); - QString getDirtyPath(const QString &cue, const QString &path); + }; #endif diff --git a/src/plugins/Input/cue/decoder_cue.cpp b/src/plugins/Input/cue/decoder_cue.cpp index d996329a6..0f61bf732 100644 --- a/src/plugins/Input/cue/decoder_cue.cpp +++ b/src/plugins/Input/cue/decoder_cue.cpp @@ -61,11 +61,7 @@ DecoderCUE::~DecoderCUE() bool DecoderCUE::initialize() { - QString p = QUrl(m_path).path(); - p.replace(QString(QUrl::toPercentEncoding("#")), "#"); - p.replace(QString(QUrl::toPercentEncoding("?")), "?"); - p.replace(QString(QUrl::toPercentEncoding("%")), "%"); - m_parser = new CUEParser(p); + m_parser = new CUEParser(m_path); if (m_parser->count() == 0) { qWarning("DecoderCUE: invalid cue file"); diff --git a/src/plugins/Input/cue/decodercuefactory.cpp b/src/plugins/Input/cue/decodercuefactory.cpp index a9924fd7e..6befcca66 100644 --- a/src/plugins/Input/cue/decodercuefactory.cpp +++ b/src/plugins/Input/cue/decodercuefactory.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2008-2010 by Ilya Kotov * + * Copyright (C) 2008-2011 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * diff --git a/src/plugins/Input/flac/cueparser.cpp b/src/plugins/Input/flac/cueparser.cpp index 16f10017d..13623867a 100644 --- a/src/plugins/Input/flac/cueparser.cpp +++ b/src/plugins/Input/flac/cueparser.cpp @@ -57,6 +57,7 @@ CUEParser::CUEParser(const QByteArray &array, const QString &fileName) path.replace("%", QString(QUrl::toPercentEncoding("%"))); //replace special symbols path.replace("#", QString(QUrl::toPercentEncoding("#"))); path.replace("?", QString(QUrl::toPercentEncoding("?"))); + path.replace(":", QString(QUrl::toPercentEncoding(":"))); FileInfo info("flac://" + path + QString("#%1").arg(words[1].toInt())); info.setMetaData(Qmmp::TRACK, words[1].toInt()); info.setMetaData(Qmmp::ALBUM, album); diff --git a/src/plugins/Input/flac/decoder_flac.cpp b/src/plugins/Input/flac/decoder_flac.cpp index a7335b782..29087e1ae 100644 --- a/src/plugins/Input/flac/decoder_flac.cpp +++ b/src/plugins/Input/flac/decoder_flac.cpp @@ -282,6 +282,7 @@ bool DecoderFLAC::initialize() p.replace(QString(QUrl::toPercentEncoding("#")), "#"); p.replace(QString(QUrl::toPercentEncoding("?")), "?"); p.replace(QString(QUrl::toPercentEncoding("%")), "%"); + p.replace(QString(QUrl::toPercentEncoding(":")), ":"); TagLib::FLAC::File fileRef(p.toLocal8Bit ()); //looking for cuesheet comment TagLib::Ogg::XiphComment *xiph_comment = fileRef.xiphComment(); diff --git a/src/plugins/Input/flac/flacmetadatamodel.cpp b/src/plugins/Input/flac/flacmetadatamodel.cpp index d6617357c..48cd4bc9e 100644 --- a/src/plugins/Input/flac/flacmetadatamodel.cpp +++ b/src/plugins/Input/flac/flacmetadatamodel.cpp @@ -37,6 +37,7 @@ FLACMetaDataModel::FLACMetaDataModel(const QString &path, QObject *parent) : Met p.replace(QString(QUrl::toPercentEncoding("#")), "#"); p.replace(QString(QUrl::toPercentEncoding("?")), "?"); p.replace(QString(QUrl::toPercentEncoding("%")), "%"); + p.replace(QString(QUrl::toPercentEncoding(":")), ":"); m_path = p; } else diff --git a/src/plugins/Input/gme/gmehelper.cpp b/src/plugins/Input/gme/gmehelper.cpp index 120dcdd1f..30a2191cd 100644 --- a/src/plugins/Input/gme/gmehelper.cpp +++ b/src/plugins/Input/gme/gmehelper.cpp @@ -46,6 +46,7 @@ Music_Emu *GmeHelper::load(const QString &url, int sample_rate) path.replace(QString(QUrl::toPercentEncoding("#")), "#"); path.replace(QString(QUrl::toPercentEncoding("?")), "?"); path.replace(QString(QUrl::toPercentEncoding("%")), "%"); + path.replace(QString(QUrl::toPercentEncoding(":")), ":"); } const char *err = 0; gme_type_t file_type; @@ -112,6 +113,7 @@ QList <FileInfo*> GmeHelper::createPlayList(bool meta) path.replace("%", QString(QUrl::toPercentEncoding("%"))); //replace special symbols path.replace("#", QString(QUrl::toPercentEncoding("#"))); path.replace("?", QString(QUrl::toPercentEncoding("?"))); + path.replace(":", QString(QUrl::toPercentEncoding(":"))); info->setPath("gme://"+path+QString("#%1").arg(i+1)); info->setLength(track_info.length/1000); list << info; diff --git a/src/plugins/Input/wavpack/cueparser.cpp b/src/plugins/Input/wavpack/cueparser.cpp index fcf415e82..39693ba8a 100644 --- a/src/plugins/Input/wavpack/cueparser.cpp +++ b/src/plugins/Input/wavpack/cueparser.cpp @@ -57,6 +57,7 @@ CUEParser::CUEParser(const QByteArray &array, const QString &fileName) path.replace("%", QString(QUrl::toPercentEncoding("%"))); //replace special symbols path.replace("#", QString(QUrl::toPercentEncoding("#"))); path.replace("?", QString(QUrl::toPercentEncoding("?"))); + path.replace(":", QString(QUrl::toPercentEncoding(":"))); FileInfo info("wvpack://" + path + QString("#%1").arg(words[1].toInt())); info.setMetaData(Qmmp::TRACK, words[1].toInt()); info.setMetaData(Qmmp::ALBUM, album); diff --git a/src/plugins/Input/wavpack/decoder_wavpack.cpp b/src/plugins/Input/wavpack/decoder_wavpack.cpp index 071b18004..0c1b2a396 100644 --- a/src/plugins/Input/wavpack/decoder_wavpack.cpp +++ b/src/plugins/Input/wavpack/decoder_wavpack.cpp @@ -71,6 +71,7 @@ bool DecoderWavPack::initialize() p.replace(QString(QUrl::toPercentEncoding("#")), "#"); p.replace(QString(QUrl::toPercentEncoding("?")), "?"); p.replace(QString(QUrl::toPercentEncoding("%")), "%"); + p.replace(QString(QUrl::toPercentEncoding(":")), ":"); m_context = WavpackOpenFileInput (p.toLocal8Bit(), err, OPEN_WVC | OPEN_TAGS, 0); int cue_len = WavpackGetTagItem (m_context, "cuesheet", NULL, 0); char *value; diff --git a/src/plugins/Input/wavpack/wavpackmetadatamodel.cpp b/src/plugins/Input/wavpack/wavpackmetadatamodel.cpp index ce8a02d84..d5bb27eee 100644 --- a/src/plugins/Input/wavpack/wavpackmetadatamodel.cpp +++ b/src/plugins/Input/wavpack/wavpackmetadatamodel.cpp @@ -30,6 +30,7 @@ WavPackMetaDataModel::WavPackMetaDataModel(const QString &path, QObject *parent) p.replace(QString(QUrl::toPercentEncoding("#")), "#"); p.replace(QString(QUrl::toPercentEncoding("?")), "?"); p.replace(QString(QUrl::toPercentEncoding("%")), "%"); + p.replace(QString(QUrl::toPercentEncoding(":")), ":"); m_path = p; } else |
