aboutsummaryrefslogtreecommitdiff
path: root/src/plugins
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2009-04-30 15:15:29 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2009-04-30 15:15:29 +0000
commitf904c854aba7f97bd45b50beb75179fb54c326af (patch)
tree00bddbb57daf467aae5cbd358182241fa0cf80a7 /src/plugins
parent0bdc0470cca2afb520201e55848891c854dfa871 (diff)
downloadqmmp-f904c854aba7f97bd45b50beb75179fb54c326af.tar.gz
qmmp-f904c854aba7f97bd45b50beb75179fb54c326af.tar.bz2
qmmp-f904c854aba7f97bd45b50beb75179fb54c326af.zip
fixed playing cue files with symbol '#' in the path
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@921 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/Input/cue/cueparser.cpp8
-rw-r--r--src/plugins/Input/cue/cueparser.h1
-rw-r--r--src/plugins/Input/cue/decoder_cue.cpp6
-rw-r--r--src/plugins/Input/flac/cueparser.cpp5
-rw-r--r--src/plugins/Input/flac/decoder_flac.cpp2
-rw-r--r--src/plugins/Input/wavpack/cueparser.cpp5
-rw-r--r--src/plugins/Input/wavpack/decoder_wavpack.cpp2
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;