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

* Cleaned up database syncing a bit.

This commit is contained in:
Christian Muehlhaeuser
2011-08-28 04:50:20 +02:00
parent 71339862b6
commit 89aff8bcbb
5 changed files with 40 additions and 51 deletions

View File

@@ -57,11 +57,7 @@ DatabaseCommand_CollectionStats::exec( DatabaseImpl* dbi )
{ {
m.insert( "numfiles", query.value( 0 ).toInt() ); m.insert( "numfiles", query.value( 0 ).toInt() );
m.insert( "lastmodified", query.value( 1 ).toInt() ); m.insert( "lastmodified", query.value( 1 ).toInt() );
m.insert( "lastop", query.value( 2 ).toString() );
if ( !source()->isLocal() && !source()->lastOpGuid().isEmpty() )
m.insert( "lastop", source()->lastOpGuid() );
else
m.insert( "lastop", query.value( 2 ).toString() );
} }
emit done( m ); emit done( m );

View File

@@ -134,27 +134,23 @@ DBSyncConnection::check()
} }
m_uscache.clear(); m_uscache.clear();
m_themcache.clear();
m_us.clear(); m_us.clear();
changeState( CHECKING ); changeState( CHECKING );
// load last-modified etc data for our collection and theirs from our DB: // load last-modified etc data for our collection and theirs from our DB:
DatabaseCommand_CollectionStats* cmd_us = DatabaseCommand_CollectionStats* cmd_us = new DatabaseCommand_CollectionStats( SourceList::instance()->getLocal() );
new DatabaseCommand_CollectionStats( SourceList::instance()->getLocal() ); connect( cmd_us, SIGNAL( done( QVariantMap ) ), SLOT( gotUs( QVariantMap ) ) );
DatabaseCommand_CollectionStats* cmd_them =
new DatabaseCommand_CollectionStats( m_source );
connect( cmd_us, SIGNAL( done( QVariantMap ) ),
SLOT( gotUs( QVariantMap ) ) );
connect( cmd_them, SIGNAL( done( QVariantMap ) ),
SLOT( gotThemCache( QVariantMap ) ) );
Database::instance()->enqueue( QSharedPointer<DatabaseCommand>(cmd_us) ); Database::instance()->enqueue( QSharedPointer<DatabaseCommand>(cmd_us) );
Database::instance()->enqueue( QSharedPointer<DatabaseCommand>(cmd_them) );
if ( m_lastop.isEmpty() )
{
DatabaseCommand_CollectionStats* cmd_them = new DatabaseCommand_CollectionStats( m_source );
connect( cmd_them, SIGNAL( done( QVariantMap ) ), SLOT( gotThem( QVariantMap ) ) );
Database::instance()->enqueue( QSharedPointer<DatabaseCommand>(cmd_them) );
}
else
fetchOpsData( m_lastop );
// restarts idle countdown // restarts idle countdown
m_timer.start(); m_timer.start();
@@ -174,16 +170,24 @@ DBSyncConnection::gotUs( const QVariantMap& m )
/// Called once we've loaded our cached data about their collection /// Called once we've loaded our cached data about their collection
void void
DBSyncConnection::gotThemCache( const QVariantMap& m ) DBSyncConnection::gotThem( const QVariantMap& m )
{
m_lastop = m.value( "lastop" ).toString();
fetchOpsData( m_lastop );
}
void
DBSyncConnection::fetchOpsData( const QString& sinceguid )
{ {
m_themcache = m;
changeState( FETCHING ); changeState( FETCHING );
tLog() << "Sending a FETCHOPS cmd since:" << m_themcache.value( "lastop" ).toString(); tLog() << "Sending a FETCHOPS cmd since:" << sinceguid;
QVariantMap msg; QVariantMap msg;
msg.insert( "method", "fetchops" ); msg.insert( "method", "fetchops" );
msg.insert( "lastop", m_themcache.value( "lastop" ).toString() ); msg.insert( "lastop", sinceguid );
sendMsg( msg ); sendMsg( msg );
} }
@@ -235,8 +239,6 @@ DBSyncConnection::handleMsg( msg_ptr msg )
return; return;
} }
// qDebug() << "APPLYING CMD" << cmd->commandname() << cmd->guid();
if ( !msg->is( Msg::FRAGMENT ) ) // last msg in this batch if ( !msg->is( Msg::FRAGMENT ) ) // last msg in this batch
{ {
changeState( SAVING ); // just DB work left to complete changeState( SAVING ); // just DB work left to complete
@@ -244,7 +246,7 @@ DBSyncConnection::handleMsg( msg_ptr msg )
} }
if ( !cmd->singletonCmd() ) if ( !cmd->singletonCmd() )
m_source->setLastOpGuid( cmd->guid() ); m_lastop = cmd->guid();
Database::instance()->enqueue( QSharedPointer<DatabaseCommand>( cmd ) ); Database::instance()->enqueue( QSharedPointer<DatabaseCommand>( cmd ) );
return; return;

View File

@@ -64,9 +64,13 @@ public slots:
private slots: private slots:
void gotUs( const QVariantMap& m ); void gotUs( const QVariantMap& m );
void gotThemCache( const QVariantMap& m ); void gotThem( const QVariantMap& m );
void lastOpApplied();
void fetchOpsData( const QString& sinceguid );
void sendOpsData( QString sinceguid, QString lastguid, QList< dbop_ptr > ops ); void sendOpsData( QString sinceguid, QString lastguid, QList< dbop_ptr > ops );
void lastOpApplied();
void check(); void check();
void idleTimeout(); void idleTimeout();
@@ -76,11 +80,12 @@ private:
void changeState( State newstate ); void changeState( State newstate );
Tomahawk::source_ptr m_source; Tomahawk::source_ptr m_source;
QVariantMap m_us, m_uscache, m_themcache; QVariantMap m_us, m_uscache;
State m_state;
QString m_lastop;
QString m_lastSentOp; QString m_lastSentOp;
State m_state;
QTimer m_timer; QTimer m_timer;
}; };

View File

@@ -74,7 +74,7 @@ Source::setControlConnection( ControlConnection* cc )
{ {
m_cc = cc; m_cc = cc;
if ( cc ) if ( cc )
connect( cc, SIGNAL( finished() ), SLOT( remove() ), Qt::QueuedConnection ); connect( cc, SIGNAL( finished() ), SLOT( setOffline() ), Qt::QueuedConnection );
} }
@@ -97,15 +97,6 @@ Source::setStats( const QVariantMap& m )
} }
void
Source::remove()
{
qDebug() << Q_FUNC_INFO;
setOffline();
}
QString QString
Source::friendlyName() const Source::friendlyName() const
{ {

View File

@@ -40,8 +40,9 @@ class DLLEXPORT Source : public QObject
{ {
Q_OBJECT Q_OBJECT
friend class ::DatabaseCommand_LogPlayback;
friend class ::DBSyncConnection; friend class ::DBSyncConnection;
friend class ::ControlConnection;
friend class ::DatabaseCommand_LogPlayback;
friend class ::DatabaseCommand_SocialAction; friend class ::DatabaseCommand_SocialAction;
public: public:
@@ -53,8 +54,6 @@ public:
bool isLocal() const { return m_isLocal; } bool isLocal() const { return m_isLocal; }
bool isOnline() const { return m_online; } bool isOnline() const { return m_online; }
QString lastOpGuid() const { return m_lastOpGuid; }
QString userName() const { return m_username; } QString userName() const { return m_username; }
QString friendlyName() const; QString friendlyName() const;
void setFriendlyName( const QString& fname ); void setFriendlyName( const QString& fname );
@@ -73,9 +72,6 @@ public:
void scanningProgress( unsigned int files ); void scanningProgress( unsigned int files );
void scanningFinished( unsigned int files ); void scanningFinished( unsigned int files );
void setOffline();
void setOnline();
unsigned int trackCount() const; unsigned int trackCount() const;
Tomahawk::query_ptr currentTrack() const { return m_currentTrack; } Tomahawk::query_ptr currentTrack() const { return m_currentTrack; }
@@ -105,10 +101,10 @@ public slots:
void setStats( const QVariantMap& m ); void setStats( const QVariantMap& m );
private slots: private slots:
void setLastOpGuid( const QString& guid ) { m_lastOpGuid = guid; }
void dbLoaded( unsigned int id, const QString& fname ); void dbLoaded( unsigned int id, const QString& fname );
void remove();
void setOffline();
void setOnline();
void onStateChanged( DBSyncConnection::State newstate, DBSyncConnection::State oldstate, const QString& info ); void onStateChanged( DBSyncConnection::State newstate, DBSyncConnection::State oldstate, const QString& info );
void onPlaybackStarted( const Tomahawk::query_ptr& query ); void onPlaybackStarted( const Tomahawk::query_ptr& query );
@@ -124,7 +120,6 @@ private:
int m_id; int m_id;
QList< QSharedPointer<Collection> > m_collections; QList< QSharedPointer<Collection> > m_collections;
QVariantMap m_stats; QVariantMap m_stats;
QString m_lastOpGuid;
bool m_scrubFriendlyName; bool m_scrubFriendlyName;
Tomahawk::query_ptr m_currentTrack; Tomahawk::query_ptr m_currentTrack;