From 66ae0bd66aabf25c13171836a3a2cbb6e8d83b23 Mon Sep 17 00:00:00 2001 From: trialuser02 Date: Sat, 27 Apr 2019 19:58:19 +0000 Subject: flac: using shared cue parser git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@8799 90c681e8-e032-0410-971d-27865f9a5e38 --- src/plugins/Input/flac/cueparser.cpp | 219 ----------------------------------- 1 file changed, 219 deletions(-) delete mode 100644 src/plugins/Input/flac/cueparser.cpp (limited to 'src/plugins/Input/flac/cueparser.cpp') diff --git a/src/plugins/Input/flac/cueparser.cpp b/src/plugins/Input/flac/cueparser.cpp deleted file mode 100644 index 3b02d1b7e..000000000 --- a/src/plugins/Input/flac/cueparser.cpp +++ /dev/null @@ -1,219 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2008-2019 by Ilya Kotov * - * forkotov02@ya.ru * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * - ***************************************************************************/ - -#include -#include -#include -#include -#include -#include -#include -#include -#include "cueparser.h" - -CUEParser::CUEParser(const QByteArray &array, const QString &path) -{ - QString album, genre, date, comment; - QTextStream textStream (array); - textStream.setCodec("UTF-8"); - m_filePath = path; - QString artist; - double album_peak = 0.0, album_gain = 0.0; - while (!textStream.atEnd()) - { - QString line = textStream.readLine().trimmed(); - QStringList words = splitLine(line); - if (words.size() < 2) - continue; - - if (words[0] == "PERFORMER") - { - if(m_tracks.isEmpty()) - artist = words[1]; - else - m_tracks.last()->info.setValue(Qmmp::ARTIST, words[1]); - } - else if (words[0] == "TITLE") - { - if(m_tracks.isEmpty()) - album = words[1]; - else - m_tracks.last()->info.setValue(Qmmp::TITLE, words[1]); - } - else if (words[0] == "TRACK") - { - TrackInfo info("flac://" + path + QString("#%1").arg(words[1].toInt())); - info.setValue(Qmmp::TRACK, words[1].toInt()); - info.setValue(Qmmp::ALBUM, album); - info.setValue(Qmmp::GENRE, genre); - info.setValue(Qmmp::YEAR, date); - info.setValue(Qmmp::COMMENT, comment); - info.setValue(Qmmp::ARTIST, artist); - info.setValue(Qmmp::ALBUMARTIST, artist); - info.setValue(Qmmp::REPLAYGAIN_ALBUM_GAIN, album_gain); - info.setValue(Qmmp::REPLAYGAIN_ALBUM_PEAK, album_peak); - - m_tracks << new CUETrack; - m_tracks.last()->info = info; - m_tracks.last()->offset = 0; - } - else if (words[0] == "INDEX" && words[1] == "01") - { - if (m_tracks.isEmpty()) - continue; - m_tracks.last()->offset = getLength(words[2]); - int c = m_tracks.count(); - if(c > 1) - m_tracks[c - 2]->info.setDuration(m_tracks[c - 1]->offset - m_tracks[c - 2]->offset); - } - else if (words[0] == "REM") - { - if (words.size() < 3) - continue; - if (words[1] == "GENRE") - genre = words[2]; - else if (words[1] == "DATE") - date = words[2]; - else if (words[1] == "COMMENT") - comment = words[2]; - else if (words[1] == "REPLAYGAIN_ALBUM_GAIN") - album_gain = words[2].toDouble(); - else if (words[1] == "REPLAYGAIN_ALBUM_PEAK") - album_peak = words[2].toDouble(); - else if (words[1] == "REPLAYGAIN_TRACK_GAIN" && !m_tracks.isEmpty()) - m_tracks.last()->info.setValue(Qmmp::REPLAYGAIN_TRACK_GAIN, words[2].toDouble()); - else if (words[1] == "REPLAYGAIN_TRACK_PEAK" && !m_tracks.isEmpty()) - m_tracks.last()->info.setValue(Qmmp::REPLAYGAIN_TRACK_PEAK, words[2].toDouble()); - } - } - if(m_tracks.isEmpty()) - { - qWarning("CUEParser: invalid cue file"); - return; - } - - QList f_list = MetaDataManager::instance()->createPlayList(m_filePath, TrackInfo::Properties); - if(!f_list.isEmpty()) - { - //calculate last item length - m_tracks.last()->info.setDuration(qMax(0LL, f_list.first()->duration() - m_tracks.last()->offset)); - //add properties - foreach(CUETrack *cueTrack, m_tracks) - cueTrack->info.setValues(f_list.first()->properties()); - qDeleteAll(f_list); - f_list.clear(); - } -} - -CUEParser::~CUEParser() -{ - qDeleteAll(m_tracks); - m_tracks.clear(); -} - -QList CUEParser::createPlayList() -{ - QList list; - foreach(CUETrack *track, m_tracks) - { - list << new TrackInfo(track->info); - } - return list; -} - -const QString CUEParser::filePath() const -{ - return m_filePath; -} - -qint64 CUEParser::offset(int track) const -{ - return m_tracks.at(track - 1)->offset; -} - -qint64 CUEParser::duration(int track) const -{ - return m_tracks.at(track - 1)->info.duration(); -} - -int CUEParser::count() const -{ - return m_tracks.count(); -} - -TrackInfo *CUEParser::info(int track) -{ - return &m_tracks.at(track - 1)->info; -} - -const QString CUEParser::trackURL(int track) const -{ - return m_tracks.at(track - 1)->info.path(); -} - -const QMap CUEParser::replayGain(int track) const -{ - return m_tracks.at(track - 1)->info.replayGainInfo(); -} - -QStringList CUEParser::splitLine(const QString &line) -{ - //qDebug("raw string = %s",qPrintable(line)); - QStringList list; - QString buf = line.trimmed(); - if (buf.isEmpty()) - return list; - while (!buf.isEmpty()) - { - //qDebug(qPrintable(buf)); - if (buf.startsWith('"')) - { - int end = buf.indexOf('"',1); - if(end == -1) //ignore invalid line - { - list.clear(); - qWarning("CUEParser: unable to parse line: %s",qPrintable(line)); - return list; - } - list << buf.mid (1, end - 1); - buf.remove (0, end+1); - } - else - { - int end = buf.indexOf(' ', 0); - if (end < 0) - end = buf.size(); - list << buf.mid (0, end); - buf.remove (0, end); - } - buf = buf.trimmed(); - } - return list; -} - -qint64 CUEParser::getLength(const QString &str) -{ - QStringList list = str.split(":"); - if (list.size() == 2) - return (qint64)list.at(0).toInt()*60000 + list.at(1).toInt()*1000; - else if (list.size() == 3) - return (qint64)list.at(0).toInt()*60000 + list.at(1).toInt()*1000 + list.at(2).toInt()*1000/75; - return 0; -} -- cgit v1.2.3-13-gbd6f