aboutsummaryrefslogtreecommitdiff
path: root/src/plugins
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2011-02-01 16:41:00 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2011-02-01 16:41:00 +0000
commit1c8ce3f30f8c48b161ae7baa3ad98080ebe954ad (patch)
tree2abd61f84412e825548c251371f47871a5a9b1c4 /src/plugins
parent622d86de977922a6714cb771c735f2f2a25c0d78 (diff)
downloadqmmp-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.cpp6
-rw-r--r--src/plugins/Input/cue/cueparser.cpp66
-rw-r--r--src/plugins/Input/cue/cueparser.h7
-rw-r--r--src/plugins/Input/cue/decoder_cue.cpp6
-rw-r--r--src/plugins/Input/cue/decodercuefactory.cpp2
-rw-r--r--src/plugins/Input/flac/cueparser.cpp1
-rw-r--r--src/plugins/Input/flac/decoder_flac.cpp1
-rw-r--r--src/plugins/Input/flac/flacmetadatamodel.cpp1
-rw-r--r--src/plugins/Input/gme/gmehelper.cpp2
-rw-r--r--src/plugins/Input/wavpack/cueparser.cpp1
-rw-r--r--src/plugins/Input/wavpack/decoder_wavpack.cpp1
-rw-r--r--src/plugins/Input/wavpack/wavpackmetadatamodel.cpp1
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