diff options
| -rw-r--r-- | src/plugins/Input/cue/cueparser.cpp | 8 | ||||
| -rw-r--r-- | src/plugins/Input/cue/cueparser.h | 1 | ||||
| -rw-r--r-- | src/plugins/Input/cue/decoder_cue.cpp | 6 | ||||
| -rw-r--r-- | src/plugins/Input/flac/cueparser.cpp | 5 | ||||
| -rw-r--r-- | src/plugins/Input/flac/decoder_flac.cpp | 2 | ||||
| -rw-r--r-- | src/plugins/Input/wavpack/cueparser.cpp | 5 | ||||
| -rw-r--r-- | src/plugins/Input/wavpack/decoder_wavpack.cpp | 2 |
7 files changed, 23 insertions, 6 deletions
diff --git a/src/plugins/Input/cue/cueparser.cpp b/src/plugins/Input/cue/cueparser.cpp index 68d3cb9e2..1c4df54e5 100644 --- a/src/plugins/Input/cue/cueparser.cpp +++ b/src/plugins/Input/cue/cueparser.cpp @@ -51,8 +51,7 @@ CUEParser::CUEParser(const QString &fileName) if (words[0] == "FILE") { - m_filePath = QUrl(fileName).path (); - m_filePath = QFileInfo(m_filePath).dir().filePath(words[1]); + m_filePath = QFileInfo(fileName).dir().filePath(words[1]); } else if (words[0] == "PERFORMER") { @@ -74,7 +73,10 @@ CUEParser::CUEParser(const QString &fileName) } else if (words[0] == "TRACK") { - FileInfo info("cue://" + fileName + QString("#%1").arg(words[1].toInt())); + QString path = fileName; + 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()); m_infoList << info; m_offsets << 0; diff --git a/src/plugins/Input/cue/cueparser.h b/src/plugins/Input/cue/cueparser.h index 654b9212d..28810c786 100644 --- a/src/plugins/Input/cue/cueparser.h +++ b/src/plugins/Input/cue/cueparser.h @@ -24,6 +24,7 @@ #include <QMap> #include <QString> #include <QStringList> +#include <QUrl> #include <qmmp/fileinfo.h> diff --git a/src/plugins/Input/cue/decoder_cue.cpp b/src/plugins/Input/cue/decoder_cue.cpp index 0eff91e54..1a13d9049 100644 --- a/src/plugins/Input/cue/decoder_cue.cpp +++ b/src/plugins/Input/cue/decoder_cue.cpp @@ -51,7 +51,11 @@ DecoderCUE::~DecoderCUE() bool DecoderCUE::initialize() { m_input2 = 0; - CUEParser parser(QUrl(path).path()); + + QString p = QUrl(path).path(); + p.replace(QString(QUrl::toPercentEncoding("#")), "#"); + p.replace(QString(QUrl::toPercentEncoding("%")), "%"); + CUEParser parser(p); if (parser.count() == 0) { qWarning("DecoderCUE: invalid cue file"); diff --git a/src/plugins/Input/flac/cueparser.cpp b/src/plugins/Input/flac/cueparser.cpp index 173b31e54..bedaadd52 100644 --- a/src/plugins/Input/flac/cueparser.cpp +++ b/src/plugins/Input/flac/cueparser.cpp @@ -59,7 +59,10 @@ CUEParser::CUEParser(const QByteArray &array, const QString &fileName) } else if (words[0] == "TRACK") { - FileInfo info("flac://" + fileName + QString("#%1").arg(words[1].toInt())); + QString path = fileName; + path.replace("%", QString(QUrl::toPercentEncoding("%"))); //replace special symbols + path.replace("#", QString(QUrl::toPercentEncoding("#"))); + FileInfo info("flac://" + path + QString("#%1").arg(words[1].toInt())); info.setMetaData(Qmmp::TRACK, words[1].toInt()); m_infoList << info; m_offsets << 0; diff --git a/src/plugins/Input/flac/decoder_flac.cpp b/src/plugins/Input/flac/decoder_flac.cpp index d80916d69..372635511 100644 --- a/src/plugins/Input/flac/decoder_flac.cpp +++ b/src/plugins/Input/flac/decoder_flac.cpp @@ -372,6 +372,8 @@ bool DecoderFLAC::initialize() qWarning("DecoderFLAC: invalid url."); return FALSE; } + 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/wavpack/cueparser.cpp b/src/plugins/Input/wavpack/cueparser.cpp index 081912dba..db837c427 100644 --- a/src/plugins/Input/wavpack/cueparser.cpp +++ b/src/plugins/Input/wavpack/cueparser.cpp @@ -59,7 +59,10 @@ CUEParser::CUEParser(const QByteArray &array, const QString &fileName) } else if (words[0] == "TRACK") { - FileInfo info("wvpack://" + fileName + QString("#%1").arg(words[1].toInt())); + QString path = fileName; + path.replace("%", QString(QUrl::toPercentEncoding("%"))); //replace special symbols + path.replace("#", QString(QUrl::toPercentEncoding("#"))); + FileInfo info("wvpack://" + path + QString("#%1").arg(words[1].toInt())); info.setMetaData(Qmmp::TRACK, words[1].toInt()); m_infoList << info; m_offsets << 0; diff --git a/src/plugins/Input/wavpack/decoder_wavpack.cpp b/src/plugins/Input/wavpack/decoder_wavpack.cpp index 3260ef5e1..5c13dd075 100644 --- a/src/plugins/Input/wavpack/decoder_wavpack.cpp +++ b/src/plugins/Input/wavpack/decoder_wavpack.cpp @@ -130,6 +130,8 @@ bool DecoderWavPack::initialize() if (m_path.startsWith("wvpack://")) //embeded cue track { QString p = QUrl(m_path).path(); + 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; |
