Clementine-audio-player-Mac.../src/playlistparsers/playlistparser.cpp

106 lines
2.8 KiB
C++
Raw Normal View History

/* This file is part of Clementine.
Clementine 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 3 of the License, or
(at your option) any later version.
Clementine 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 Clementine. If not, see <http://www.gnu.org/licenses/>.
*/
#include "playlistparser.h"
#include "xspfparser.h"
#include "m3uparser.h"
2010-05-22 23:11:22 +02:00
#include "plsparser.h"
#include <QtDebug>
PlaylistParser::PlaylistParser(QObject *parent)
: QObject(parent)
{
parsers_ << new M3UParser(this);
parsers_ << new XSPFParser(this);
2010-05-22 23:11:22 +02:00
parsers_ << new PLSParser(this);
}
QStringList PlaylistParser::file_extensions() const {
QStringList ret;
foreach (ParserBase* parser, parsers_) {
ret << parser->file_extensions();
}
qStableSort(ret);
return ret;
}
QString PlaylistParser::filters() const {
QStringList filters;
QStringList all_extensions;
foreach (ParserBase* parser, parsers_) {
QStringList extensions;
foreach (const QString& extension, parser->file_extensions())
extensions << "*." + extension;
all_extensions << extensions;
filters << tr("%1 playlists (%2)").arg(parser->name(), extensions.join(" "));
}
filters.prepend(tr("All playlists (%1)").arg(all_extensions.join(" ")));
qDebug() << filters.join(";;");
return filters.join(";;");
2010-05-22 22:28:11 +02:00
}
bool PlaylistParser::can_load(const QString &filename) const {
return file_extensions().contains(QFileInfo(filename).suffix());
}
ParserBase* PlaylistParser::ParserForExtension(const QString& suffix) const {
foreach (ParserBase* p, parsers_) {
if (p->file_extensions().contains(suffix))
return p;
}
return NULL;
}
SongList PlaylistParser::Load(const QString &filename) const {
QFileInfo info(filename);
// Find a parser that supports this file extension
ParserBase* parser = ParserForExtension(info.suffix());
if (!parser) {
qWarning() << "Unknown filetype:" << filename;
return SongList();
}
// Open the file
QFile file(filename);
file.open(QIODevice::ReadOnly);
return parser->Load(&file, info.absolutePath());
}
void PlaylistParser::Save(const SongList &songs, const QString &filename) const {
QFileInfo info(filename);
// Find a parser that supports this file extension
ParserBase* parser = ParserForExtension(info.suffix());
if (!parser) {
qWarning() << "Unknown filetype:" << filename;
return;
}
// Open the file
QFile file(filename);
file.open(QIODevice::WriteOnly);
return parser->Save(songs, &file, info.absolutePath());
}