diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2012-04-14 09:08:03 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2012-04-14 09:08:03 +0000 |
| commit | 9029e05734463adf0ec34c16b6b96080b672caa7 (patch) | |
| tree | 9ec124eb3ca96457cb5e1bd63466e7a91a4c90fd /src/plugins/Input/cue | |
| parent | 772db7b59d06dc45a83d6142948567c54a6939e6 (diff) | |
| download | qmmp-9029e05734463adf0ec34c16b6b96080b672caa7.tar.gz qmmp-9029e05734463adf0ec34c16b6b96080b672caa7.tar.bz2 qmmp-9029e05734463adf0ec34c16b6b96080b672caa7.zip | |
cue parser: fixed some cuesheet parsing
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@2714 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/plugins/Input/cue')
| -rw-r--r-- | src/plugins/Input/cue/cueparser.cpp | 42 |
1 files changed, 17 insertions, 25 deletions
diff --git a/src/plugins/Input/cue/cueparser.cpp b/src/plugins/Input/cue/cueparser.cpp index 5a95265d5..70b3ea887 100644 --- a/src/plugins/Input/cue/cueparser.cpp +++ b/src/plugins/Input/cue/cueparser.cpp @@ -78,7 +78,6 @@ CUEParser::CUEParser(const QString &url) //qDebug("CUEParser: using %s encoding", codec->name().constData()); textStream.setCodec(codec); QString album, genre, date, comment, artist, file_path; - bool new_file = false; double album_gain = 0.0, album_peak = 0.0; while (!textStream.atEnd()) @@ -90,19 +89,8 @@ CUEParser::CUEParser(const QString &url) if (words[0] == "FILE") { - if(!m_tracks.isEmpty()) - { - QList <FileInfo *> f_list = MetaDataManager::instance()->createPlayList(file_path, false); - qint64 l = f_list.isEmpty() ? 0 : f_list.at(0)->length() * 1000; - if (l > m_tracks.last()->offset) - m_tracks.last()->info.setLength(l - m_tracks.last()->offset); - else - m_tracks.last()->info.setLength(0); - } file_path = getDirtyPath(fileName, QFileInfo(fileName).dir().filePath(words[1])); - new_file = true; } - else if (words[0] == "PERFORMER") { if(m_tracks.isEmpty()) @@ -131,7 +119,6 @@ CUEParser::CUEParser(const QString &url) m_tracks << new CUETrack; m_tracks.last()->info = info; m_tracks.last()->offset = 0; - m_tracks.last()->file = file_path; m_tracks.last()->replayGain.insert(Qmmp::REPLAYGAIN_ALBUM_GAIN, album_gain); m_tracks.last()->replayGain.insert(Qmmp::REPLAYGAIN_ALBUM_PEAK, album_peak); } @@ -140,10 +127,7 @@ CUEParser::CUEParser(const QString &url) if (m_tracks.isEmpty()) continue; m_tracks.last()->offset = getLength(words[2]); - int c = m_tracks.count(); - if(c > 1 && !new_file) - m_tracks[c - 2]->info.setLength(m_tracks[c - 1]->offset - m_tracks[c - 2]->offset); - new_file = false; + m_tracks.last()->file = file_path; } else if (words[0] == "REM") { @@ -175,14 +159,6 @@ CUEParser::CUEParser(const QString &url) qWarning("CUEParser: invalid cue file"); return; } - //calculate last item length - QList <FileInfo *> f_list = MetaDataManager::instance()->createPlayList(file_path, false); - qint64 l = f_list.isEmpty() ? 0 : f_list.at(0)->length() * 1000; - if (l > m_tracks.last()->offset) - m_tracks.last()->info.setLength(l - m_tracks.last()->offset); - else - m_tracks.last()->info.setLength(0); - //skip invalid cue sheet foreach(CUETrack *track, m_tracks) { @@ -193,6 +169,22 @@ CUEParser::CUEParser(const QString &url) break; } } + //calculate lengths + for(int i = 0; i < m_tracks.count(); ++i) + { + QString file_path = m_tracks[i]->file; + if((i < m_tracks.count() - 1) && (file_path == m_tracks[i+1]->file)) + m_tracks[i]->info.setLength(m_tracks[i+1]->offset - m_tracks[i]->offset); + else + { + QList <FileInfo *> f_list = MetaDataManager::instance()->createPlayList(file_path, false); + qint64 l = f_list.isEmpty() ? 0 : f_list.at(0)->length() * 1000; + if (l > m_tracks[i]->offset) + m_tracks[i]->info.setLength(l - m_tracks[i]->offset); + else + m_tracks[i]->info.setLength(0); + } + } } CUEParser::~CUEParser() |
