aboutsummaryrefslogtreecommitdiff
path: root/src/ui/playlistmodel.cpp
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2008-06-04 09:51:40 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2008-06-04 09:51:40 +0000
commita4da0eb5e46e178d34a848b5fdb76dd8453510cd (patch)
tree57edc1f26bfd1f58dcad71933aa5383b08e1d262 /src/ui/playlistmodel.cpp
parent5a1055301b485554ade9ce0555105cef4a58f50d (diff)
downloadqmmp-a4da0eb5e46e178d34a848b5fdb76dd8453510cd.tar.gz
qmmp-a4da0eb5e46e178d34a848b5fdb76dd8453510cd.tar.bz2
qmmp-a4da0eb5e46e178d34a848b5fdb76dd8453510cd.zip
moved playlist formats support to plugins
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@397 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/ui/playlistmodel.cpp')
-rw-r--r--src/ui/playlistmodel.cpp104
1 files changed, 31 insertions, 73 deletions
diff --git a/src/ui/playlistmodel.cpp b/src/ui/playlistmodel.cpp
index 22371d283..f26f843d1 100644
--- a/src/ui/playlistmodel.cpp
+++ b/src/ui/playlistmodel.cpp
@@ -32,11 +32,12 @@
#include <qmmp/decoder.h>
#include <qmmp/decoderfactory.h>
+#include <qmmpui/playlistparser.h>
+#include <qmmpui/playlistformat.h>
#include "fileloader.h"
#include "playlistmodel.h"
#include "playlistitem.h"
-#include "playlistformat.h"
#include "playstate.h"
#include <QMetaType>
@@ -52,7 +53,7 @@ TagUpdater::TagUpdater(QObject* o,PlayListItem* item):m_observable(o),m_item(ite
void TagUpdater::updateTag()
{
- if(m_item->flag() == PlayListItem::SCHEDULED_FOR_DELETION)
+ if (m_item->flag() == PlayListItem::SCHEDULED_FOR_DELETION)
{
delete m_item;
m_item = NULL;
@@ -75,13 +76,6 @@ PlayListModel::PlayListModel ( QObject *parent )
is_repeatable_list = false;
m_play_state = new NormalPlayState(this);
//readSettings();
-
- registerPlaylistFormat( new PLSPlaylistFormat);
- registerPlaylistFormat( new M3UPlaylistFormat);
-#ifndef XSPF_PLUGIN
- registerPlaylistFormat( new XSPFPlaylistFormat);
-#endif
- loadExternalPlaylistFormats();
}
PlayListModel::~PlayListModel()
@@ -89,7 +83,7 @@ PlayListModel::~PlayListModel()
writeSettings();
clear();
delete m_play_state;
- qDeleteAll(m_registered_pl_formats);
+ //qDeleteAll(m_registered_pl_formats);
foreach(GuardedFileLoader l,m_running_loaders)
{
@@ -180,11 +174,11 @@ void PlayListModel::clear()
{
PlayListItem* mf = m_items.takeFirst();
- if(mf->flag() == PlayListItem::FREE)
+ if (mf->flag() == PlayListItem::FREE)
{
delete mf;
}
- else if(mf->flag() == PlayListItem::EDITING)
+ else if (mf->flag() == PlayListItem::EDITING)
{
mf->setFlag(PlayListItem::SCHEDULED_FOR_DELETION);
}
@@ -259,12 +253,12 @@ void PlayListModel::removeSelection(bool inverted)
if (m_total_length < 0)
m_total_length = 0;
- if(f->flag() == PlayListItem::FREE)
+ if (f->flag() == PlayListItem::FREE)
{
delete f;
f = NULL;
}
- else if(f->flag() == PlayListItem::EDITING)
+ else if (f->flag() == PlayListItem::EDITING)
f->setFlag(PlayListItem::SCHEDULED_FOR_DELETION);
select_after_delete = i;
@@ -313,7 +307,7 @@ void PlayListModel::showDetails()
if ( fact )
{
QObject* o = fact->showDetails ( 0, m_items.at ( i )->path() );
- if(o)
+ if (o)
{
TagUpdater *updater = new TagUpdater(o,m_items.at(i));
m_editing_items.append(m_items.at(i));
@@ -347,7 +341,7 @@ void PlayListModel::readSettings()
file.close ();
- if(m_current > files.count() - 1)
+ if (m_current > files.count() - 1)
m_current = 0;
int preload = (files.count() < 100) ? files.count() : 100;
@@ -814,76 +808,40 @@ void PlayListModel::setUpdatesEnabled(bool yes)
void PlayListModel::loadPlaylist(const QString & f_name)
{
-
- foreach(PlaylistFormat* prs,m_registered_pl_formats.values())
+ PlaylistFormat* prs = PlaylistParser::instance()->findByPath(f_name);
+ if (prs)
{
- if (prs->hasFormat(QFileInfo(f_name).suffix().toLower()))
+ QFile file(f_name);
+ if (file.open(QIODevice::ReadOnly))
{
- QFile file(f_name);
- if (file.open(QIODevice::ReadOnly))
- {
- clear();
- addFiles(prs->decode(QTextStream(&file).readAll()));
- file.close();
- }
- else
- qWarning("Error opening %s",f_name.toLocal8Bit().data());
+ clear();
+ addFiles(prs->decode(QTextStream(&file).readAll()));
+ file.close();
}
+ else
+ qWarning("Error opening %s",f_name.toLocal8Bit().data());
}
}
void PlayListModel::savePlaylist(const QString & f_name)
{
- foreach(PlaylistFormat* prs,m_registered_pl_formats.values())
+ PlaylistFormat* prs = PlaylistParser::instance()->findByPath(f_name);
+ if (prs)
{
- if (prs->hasFormat(QFileInfo(f_name).suffix().toLower()))
+ QFile file(f_name);
+ if (file.open(QIODevice::WriteOnly))
{
- QFile file(f_name);
- if (file.open(QIODevice::WriteOnly))
- {
- QTextStream ts(&file);
- ts << prs->encode(m_items);
- file.close();
- }
- else
- qWarning("Error opening %s",f_name.toLocal8Bit().data());
+ QTextStream ts(&file);
+ QList <SongInfo *> songs;
+ foreach(PlayListItem* item, m_items)
+ songs << item;
+ ts << prs->encode(songs);
+ file.close();
}
+ else
+ qWarning("Error opening %s",f_name.toLocal8Bit().data());
}
-}
-
-
-void PlayListModel::loadExternalPlaylistFormats()
-{
- QDir pluginsDir (QDir::homePath()+"/.qmmp/plugins/PlaylistFormats");
- //pluginsDir.cdUp();
- //pluginsDir.cd("plugins/PlaylistFormats");
- foreach (QString fileName, pluginsDir.entryList(QDir::Files))
- {
- QPluginLoader loader(pluginsDir.absoluteFilePath(fileName));
- QObject *plugin = loader.instance();
- if (loader.isLoaded())
- qDebug("PlaylistFormat: plugin loaded - %s", qPrintable(fileName));
-
- PlaylistFormat *fmt = 0;
- if (plugin)
- fmt = qobject_cast<PlaylistFormat *>(plugin);
-
- if (fmt)
- if (!registerPlaylistFormat(fmt))
- qDebug("Warning: Plugin with name %s is already registered...",
- qPrintable(fmt->name()));
- }
-}
-bool PlayListModel::registerPlaylistFormat(PlaylistFormat* p)
-{
- QString name = p->name();
- if (!m_registered_pl_formats.contains(name))
- {
- m_registered_pl_formats.insert(name,p);
- return true;
- }
- return false;
}
bool PlayListModel::isFileLoaderRunning() const