1
0
mirror of https://github.com/tomahawk-player/tomahawk.git synced 2025-08-03 04:37:36 +02:00

create dynamic playlists in GUI thread

not fixed everywhere yet, dbcmd unserialized from json creates it in the worker thread still
This commit is contained in:
Leo Franchi
2011-01-10 00:04:12 -05:00
parent fbd9265d31
commit 09dc882bac
5 changed files with 39 additions and 19 deletions

View File

@@ -33,8 +33,8 @@ DatabaseCollection::loadDynamicPlaylists()
qDebug() << Q_FUNC_INFO; qDebug() << Q_FUNC_INFO;
DatabaseCommand_LoadAllDynamicPlaylists* cmd = new DatabaseCommand_LoadAllDynamicPlaylists( source() ); DatabaseCommand_LoadAllDynamicPlaylists* cmd = new DatabaseCommand_LoadAllDynamicPlaylists( source() );
connect( cmd, SIGNAL( done( const QList<Tomahawk::dynplaylist_ptr>& ) ), connect( cmd, SIGNAL( playlistLoaded( Tomahawk::source_ptr, QVariantList ) ),
SLOT( setDynamicPlaylists( const QList<Tomahawk::dynplaylist_ptr>& ) ) ); this, SLOT( dynamicPlaylistCreated( const Tomahawk::source_ptr&, const QVariantList& ) ) );
Database::instance()->enqueue( QSharedPointer<DatabaseCommand>( cmd ) ); Database::instance()->enqueue( QSharedPointer<DatabaseCommand>( cmd ) );
} }
@@ -116,3 +116,19 @@ DatabaseCollection::tracks()
return Collection::tracks(); return Collection::tracks();
} }
void DatabaseCollection::dynamicPlaylistCreated( const source_ptr& source, const QVariantList& data )
{
dynplaylist_ptr p( new DynamicPlaylist( source, //src
data[0].toString(), //current rev
data[1].toString(), //title
data[2].toString(), //info
data[3].toString(), //creator
data[4].toString(), // dynamic type
static_cast<GeneratorMode>(data[5].toInt()), // dynamic mode
data[6].toBool(), //shared
data[7].toInt(), //lastmod
data[8].toString() ) ); //GUID
addDynamicPlaylist( p );
}

View File

@@ -2,6 +2,7 @@
#define DATABASECOLLECTION_H #define DATABASECOLLECTION_H
#include "collection.h" #include "collection.h"
#include "source.h"
#include "typedefs.h" #include "typedefs.h"
#include "dllmacro.h" #include "dllmacro.h"
@@ -28,6 +29,9 @@ public:
public slots: public slots:
virtual void addTracks( const QList<QVariant> &newitems ); virtual void addTracks( const QList<QVariant> &newitems );
virtual void removeTracks( const QList<QVariant> &olditems ); virtual void removeTracks( const QList<QVariant> &olditems );
private slots:
void dynamicPlaylistCreated( const Tomahawk::source_ptr& source, const QVariantList& data );
}; };
#endif // DATABASECOLLECTION_H #endif // DATABASECOLLECTION_H

View File

@@ -36,21 +36,18 @@ void DatabaseCommand_LoadAllDynamicPlaylists::exec( DatabaseImpl* dbi )
QList<dynplaylist_ptr> plists; QList<dynplaylist_ptr> plists;
while ( query.next() ) while ( query.next() )
{ {
dynplaylist_ptr p( new DynamicPlaylist( source(), //src QVariantList data = QVariantList() << query.value(6).toString() //current rev
query.value(6).toString(), //current rev << query.value(1).toString() //title
query.value(1).toString(), //title << query.value(2).toString() //info
query.value(2).toString(), //info << query.value(3).toString() //creator
query.value(3).toString(), //creator << query.value(7).toString() // dynamic type
query.value(7).toString(), // dynamic type << static_cast<GeneratorMode>(query.value(8).toInt()) // dynamic mode
static_cast<GeneratorMode>(query.value(8).toInt()), // dynamic mode << query.value(5).toBool() //shared
query.value(5).toBool(), //shared << query.value(4).toInt() //lastmod
query.value(4).toInt(), //lastmod << query.value(0).toString(); //GUID
query.value(0).toString() //GUID emit playlistLoaded( source(), data );
) );
plists.append( p );
} }
emit done( plists ); emit done();
} }

View File

@@ -36,7 +36,8 @@ public:
virtual QString commandname() const { return "loadalldynamicplaylists"; } virtual QString commandname() const { return "loadalldynamicplaylists"; }
signals: signals:
void done( const QList<Tomahawk::dynplaylist_ptr>& playlists ); void playlistLoaded( const Tomahawk::source_ptr& source, const QVariantList& data );
void done();
}; };
#endif // DATABASECOMMAND_ADDFILES_H #endif // DATABASECOMMAND_ADDFILES_H

View File

@@ -28,6 +28,7 @@
class DatabaseCommand_LoadAllDynamicPlaylists; class DatabaseCommand_LoadAllDynamicPlaylists;
class DatabaseCommand_SetDynamicPlaylistRevision; class DatabaseCommand_SetDynamicPlaylistRevision;
class DatabaseCommand_CreateDynamicPlaylist; class DatabaseCommand_CreateDynamicPlaylist;
class DatabaseCollection;
namespace Tomahawk { namespace Tomahawk {
@@ -63,9 +64,9 @@ class DynamicPlaylist : public Playlist
Q_PROPERTY( int mode WRITE setMode READ mode ) Q_PROPERTY( int mode WRITE setMode READ mode )
Q_PROPERTY( QString type WRITE setType READ type ) Q_PROPERTY( QString type WRITE setType READ type )
friend class ::DatabaseCommand_LoadAllDynamicPlaylists;
friend class ::DatabaseCommand_SetDynamicPlaylistRevision; friend class ::DatabaseCommand_SetDynamicPlaylistRevision;
friend class ::DatabaseCommand_CreateDynamicPlaylist; friend class ::DatabaseCommand_CreateDynamicPlaylist;
friend class ::DatabaseCollection; /// :-(
public: public:
virtual ~DynamicPlaylist(); virtual ~DynamicPlaylist();
@@ -153,7 +154,7 @@ public slots:
const QList< dyncontrol_ptr>& controls, const QList< dyncontrol_ptr>& controls,
bool applied ); bool applied );
private: private:
// called from loadAllPlaylists DB cmd: // called from loadAllPlaylists DB cmd via databasecollection (in GUI thread)
explicit DynamicPlaylist( const source_ptr& src, explicit DynamicPlaylist( const source_ptr& src,
const QString& currentrevision, const QString& currentrevision,
const QString& title, const QString& title,
@@ -177,6 +178,7 @@ private:
private: private:
QList< dyncontrol_ptr > variantsToControl( const QList< QVariantMap >& controlsV ); QList< dyncontrol_ptr > variantsToControl( const QList< QVariantMap >& controlsV );
geninterface_ptr m_generator; geninterface_ptr m_generator;
}; };
}; // namespace }; // namespace