aboutsummaryrefslogtreecommitdiff
path: root/src/qmmpui
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2012-12-22 10:46:29 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2012-12-22 10:46:29 +0000
commit954146ff9b69591f0cf3895e96922bb55ad88502 (patch)
treeb495690d6ed2a6b5251fd1e8a428b550354a0cba /src/qmmpui
parent2b286b3f3713a224839b9444579046556b608c58 (diff)
downloadqmmp-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.h33
-rw-r--r--src/qmmpui/playlistparser.cpp29
-rw-r--r--src/qmmpui/playlistparser.h4
-rw-r--r--src/qmmpui/uihelper.cpp59
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)