aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/plugins/Input/cue/cueparser.cpp22
-rw-r--r--src/plugins/Input/cue/cueparser.h3
-rw-r--r--src/plugins/Input/cue/decoder_cue.cpp5
3 files changed, 23 insertions, 7 deletions
diff --git a/src/plugins/Input/cue/cueparser.cpp b/src/plugins/Input/cue/cueparser.cpp
index 1c4df54e5..2a85d96a1 100644
--- a/src/plugins/Input/cue/cueparser.cpp
+++ b/src/plugins/Input/cue/cueparser.cpp
@@ -74,12 +74,13 @@ CUEParser::CUEParser(const QString &fileName)
else if (words[0] == "TRACK")
{
QString path = fileName;
- path.replace("%", QString(QUrl::toPercentEncoding("%")));
+ path.replace("%", QString(QUrl::toPercentEncoding("%"))); //replace special symbols
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;
+ m_files << m_filePath;
}
else if (words[0] == "INDEX")
{
@@ -102,7 +103,20 @@ CUEParser::CUEParser(const QString &fileName)
}
//calculate length
for (int i = 0; i < m_infoList.size() - 1; ++i)
- m_infoList[i].setLength(m_infoList[i+1].length() - m_infoList[i].length());
+ {
+ if (m_files[i+1] == m_files[i])
+ m_infoList[i].setLength(m_infoList[i+1].length() - m_infoList[i].length());
+ else
+ {
+ QList <FileInfo *> f_list = Decoder::createPlayList(m_filePath, FALSE);
+ qint64 l = f_list.isEmpty() ? 0 : f_list.at(0)->length() * 1000;
+ if (l > m_infoList[i].length())
+ m_infoList[i].setLength(l - m_infoList[i].length());
+ else
+ m_infoList[i].setLength(0);
+ }
+ }
+
//calculate last item length
QList <FileInfo *> f_list = Decoder::createPlayList(m_filePath, FALSE);
qint64 l = f_list.isEmpty() ? 0 : f_list.at(0)->length() * 1000;
@@ -139,9 +153,9 @@ QList<FileInfo*> CUEParser::createPlayList()
return list;
}
-const QString CUEParser::filePath()
+const QString CUEParser::filePath(int track)
{
- return m_filePath;
+ return (track <= m_files.size()) ? m_files[track] : QString();
}
qint64 CUEParser::offset(int track)
diff --git a/src/plugins/Input/cue/cueparser.h b/src/plugins/Input/cue/cueparser.h
index 28810c786..84be19115 100644
--- a/src/plugins/Input/cue/cueparser.h
+++ b/src/plugins/Input/cue/cueparser.h
@@ -39,7 +39,7 @@ public:
~CUEParser();
QList<FileInfo*> createPlayList();
- const QString filePath();
+ const QString filePath(int track);
qint64 offset(int track);
qint64 length(int track);
int count();
@@ -49,6 +49,7 @@ private:
QString m_filePath;
QList <FileInfo> m_infoList;
QList <qint64> m_offsets;
+ QStringList m_files;
QStringList splitLine(const QString &line);
qint64 getLength(const QString &str);
diff --git a/src/plugins/Input/cue/decoder_cue.cpp b/src/plugins/Input/cue/decoder_cue.cpp
index 1a13d9049..3e758d459 100644
--- a/src/plugins/Input/cue/decoder_cue.cpp
+++ b/src/plugins/Input/cue/decoder_cue.cpp
@@ -1,5 +1,5 @@
/***************************************************************************
- * Copyright (C) 2008 by Ilya Kotov *
+ * Copyright (C) 2008-2009 by Ilya Kotov *
* forkotov02@hotmail.ru *
* *
* This program is free software; you can redistribute it and/or modify *
@@ -62,7 +62,8 @@ bool DecoderCUE::initialize()
return FALSE;
}
int track = path.section("#", -1).toInt();
- path = parser.filePath();
+ path = parser.filePath(track);
+ qDebug(qPrintable(path));
if (!QFile::exists(path))
{
qWarning("DecoderCUE: file \"%s\" doesn't exist", qPrintable(path));