diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2012-12-22 10:46:29 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2012-12-22 10:46:29 +0000 |
| commit | 954146ff9b69591f0cf3895e96922bb55ad88502 (patch) | |
| tree | b495690d6ed2a6b5251fd1e8a428b550354a0cba /src/qmmpui | |
| parent | 2b286b3f3713a224839b9444579046556b608c58 (diff) | |
| download | qmmp-954146ff9b69591f0cf3895e96922bb55ad88502.tar.gz qmmp-954146ff9b69591f0cf3895e96922bb55ad88502.tar.bz2 qmmp-954146ff9b69591f0cf3895e96922bb55ad88502.zip | |
playlist format api cleanup
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@3088 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/qmmpui')
| -rw-r--r-- | src/qmmpui/playlistformat.h | 33 | ||||
| -rw-r--r-- | src/qmmpui/playlistparser.cpp | 29 | ||||
| -rw-r--r-- | src/qmmpui/playlistparser.h | 4 | ||||
| -rw-r--r-- | src/qmmpui/uihelper.cpp | 59 |
4 files changed, 63 insertions, 62 deletions
diff --git a/src/qmmpui/playlistformat.h b/src/qmmpui/playlistformat.h index 4c152d786..a2dd2ee10 100644 --- a/src/qmmpui/playlistformat.h +++ b/src/qmmpui/playlistformat.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2006-2009 by Ilya Kotov * + * Copyright (C) 2006-2012 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -24,6 +24,16 @@ class PlayListItem; +/*! @brief Helper structure to store playlist format properies. + * @author Ilya Kotov <forkotov02@hotmail.ru> + */ +struct PlayListFormatProperties +{ + QString shortName; /*!< Unique name of the playlist format for internal usage */ + QStringList filters; /*!< File filters (example: "*.m3u") */ + QStringList contentTypes; /*!< Supported content types */ +}; + /*! @brief Abstract interface for playlist formats. * @author Vladimir Kuznetsov <vovanec@gmail.com> */ @@ -33,10 +43,11 @@ public: /*! * Object destructor */ - virtual ~PlayListFormat() - { - ; - } + virtual ~PlayListFormat() {} + /*! + * Returns playlist format properties. + */ + virtual const PlayListFormatProperties properties() const = 0; /*! * Takes raw contents of playlist file, should return string list of * ready file pathes to fill the playlist. @@ -47,18 +58,6 @@ public: * encoded playlist file */ virtual QString encode(const QList<PlayListItem*>& contents) = 0; - /*! - * Returns list of file extensions that current format supports - */ - virtual QStringList getExtensions()const = 0; - /*! - * Verifies is the \b ext file extension supported by current playlist format. - */ - virtual bool hasFormat(const QString& ext) = 0; - /*! - * Unique name of playlist format. - */ - virtual QString name() const = 0; }; Q_DECLARE_INTERFACE(PlayListFormat,"PlayListFormatInterface/1.0") diff --git a/src/qmmpui/playlistparser.cpp b/src/qmmpui/playlistparser.cpp index aa14ec214..7f14901a5 100644 --- a/src/qmmpui/playlistparser.cpp +++ b/src/qmmpui/playlistparser.cpp @@ -18,9 +18,10 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ -#include <QtGui> -#include <QObject> +#include <QPluginLoader> +#include <QRegExp> #include <QList> +#include <QDir> #include <QApplication> #include <qmmp/qmmp.h> #include "playlistformat.h" @@ -34,22 +35,28 @@ QList<PlayListFormat*> *PlayListParser::formats() return m_formats; } -PlayListFormat *PlayListParser::findByPath(const QString &filePath) +QStringList PlayListParser::nameFilters() { checkFormats(); - QString ext; - if(filePath.contains("://")) //is it url? + QStringList filters; + foreach(PlayListFormat* format, *m_formats) { - QString p = QUrl(filePath).encodedPath(); - ext = QFileInfo(p).suffix().toLower(); + filters << format->properties().filters; } - else - ext = QFileInfo(filePath).suffix().toLower(); + return filters; +} +PlayListFormat *PlayListParser::findByPath(const QString &filePath) +{ + checkFormats(); foreach(PlayListFormat* format, *m_formats) { - if (format->hasFormat(ext)) - return format; + foreach(QString filter, format->properties().filters) + { + QRegExp r(filter, Qt::CaseInsensitive, QRegExp::Wildcard); + if(r.exactMatch(filePath)) + return format; + } } return 0; } diff --git a/src/qmmpui/playlistparser.h b/src/qmmpui/playlistparser.h index c75b9412d..d78e3ad7d 100644 --- a/src/qmmpui/playlistparser.h +++ b/src/qmmpui/playlistparser.h @@ -33,6 +33,10 @@ public: */ static QList<PlayListFormat*> *formats(); /*! + * Returns a list of the supported files name filters, i.e. "*.m3u *.pls" + */ + static QStringList nameFilters(); + /*! * Finds playlist format by file path \b filePath * Returns \b 0 if file \b filePath is unsupported. */ diff --git a/src/qmmpui/uihelper.cpp b/src/qmmpui/uihelper.cpp index c9247640e..2dfb7b9e8 100644 --- a/src/qmmpui/uihelper.cpp +++ b/src/qmmpui/uihelper.cpp @@ -147,51 +147,42 @@ void UiHelper::addDirectory(QWidget *parent, PlayListModel *model) void UiHelper::loadPlayList(QWidget *parent, PlayListModel *model) { - QStringList l; - QList<PlayListFormat*> *p_list = PlayListParser::formats(); - if (!p_list->isEmpty()) + if(PlayListParser::nameFilters().isEmpty()) { - foreach(PlayListFormat* fmt, *p_list) - l << fmt->getExtensions(); - - QString mask = tr("Playlist Files")+" (" + l.join(" *.").prepend("*.") + ")"; - //TODO use nonmodal dialog and multiplier playlists - QString f_name = FileDialog::getOpenFileName(parent ,tr("Open Playlist"),m_lastDir,mask); - if (!f_name.isEmpty()) - { - model->clear(); - model->loadPlaylist(f_name); - model->setName(QFileInfo(f_name).baseName()); - m_lastDir = QFileInfo(f_name).absoluteDir().path(); - } + qWarning("UiHelper: There is no registered playlist parsers"); + return; } - else + + QString mask = tr("Playlist Files") + " (" + PlayListParser::nameFilters().join(" ") + ")"; + //TODO use nonmodal dialog and multiplier playlists + QString f_name = FileDialog::getOpenFileName(parent ,tr("Open Playlist"), m_lastDir, mask); + if (!f_name.isEmpty()) { - qWarning("Error: There is no registered playlist parsers"); + model->clear(); + model->loadPlaylist(f_name); + model->setName(QFileInfo(f_name).baseName()); + m_lastDir = QFileInfo(f_name).absoluteDir().path(); } } void UiHelper::savePlayList(QWidget *parent, PlayListModel *model) { - QStringList l; - QList<PlayListFormat*> *p_list = PlayListParser::formats(); - if (!p_list->isEmpty()) + if(PlayListParser::nameFilters().isEmpty()) { - foreach(PlayListFormat* fmt,*p_list) - l << fmt->getExtensions(); - - QString mask = tr("Playlist Files")+" (" + l.join(" *.").prepend("*.") + ")"; - QString f_name = FileDialog::getSaveFileName(parent, tr("Save Playlist"),m_lastDir + "/" + - model->name() + "." + l[0],mask); + qWarning("UiHelper: There is no registered playlist parsers"); + return; + } + QString ext = PlayListParser::nameFilters().at(0); + ext.replace("*.", "."); //extract extension from name filter + QString mask = tr("Playlist Files") + " (" + PlayListParser::nameFilters().join(" ") + ")"; + QString f_name = FileDialog::getSaveFileName(parent, tr("Save Playlist"),m_lastDir + "/" + + model->name() + ext,mask); - if (!f_name.isEmpty()) - { - model->savePlaylist(f_name); - m_lastDir = QFileInfo(f_name).absoluteDir().path(); - } + if (!f_name.isEmpty()) + { + model->savePlaylist(f_name); + m_lastDir = QFileInfo(f_name).absoluteDir().path(); } - else - qWarning("Error: There is no registered playlist parsers"); } void UiHelper::jumpToTrack(QWidget *parent, PlayListModel *model) |
