1
0
mirror of https://github.com/tomahawk-player/tomahawk.git synced 2025-07-31 03:10:12 +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;
DatabaseCommand_LoadAllDynamicPlaylists* cmd = new DatabaseCommand_LoadAllDynamicPlaylists( source() );
connect( cmd, SIGNAL( done( const QList<Tomahawk::dynplaylist_ptr>& ) ),
SLOT( setDynamicPlaylists( const QList<Tomahawk::dynplaylist_ptr>& ) ) );
connect( cmd, SIGNAL( playlistLoaded( Tomahawk::source_ptr, QVariantList ) ),
this, SLOT( dynamicPlaylistCreated( const Tomahawk::source_ptr&, const QVariantList& ) ) );
Database::instance()->enqueue( QSharedPointer<DatabaseCommand>( cmd ) );
}
@@ -116,3 +116,19 @@ DatabaseCollection::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
#include "collection.h"
#include "source.h"
#include "typedefs.h"
#include "dllmacro.h"
@@ -28,6 +29,9 @@ public:
public slots:
virtual void addTracks( const QList<QVariant> &newitems );
virtual void removeTracks( const QList<QVariant> &olditems );
private slots:
void dynamicPlaylistCreated( const Tomahawk::source_ptr& source, const QVariantList& data );
};
#endif // DATABASECOLLECTION_H

View File

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

View File

@@ -36,7 +36,8 @@ public:
virtual QString commandname() const { return "loadalldynamicplaylists"; }
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

View File

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