diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/plugins/Input/cue/cueparser.cpp | 22 | ||||
| -rw-r--r-- | src/plugins/Input/cue/cueparser.h | 3 | ||||
| -rw-r--r-- | src/plugins/Input/cue/decoder_cue.cpp | 5 |
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)); |
