diff --git a/src/libtomahawk/database/databasecommand_collectionstats.cpp b/src/libtomahawk/database/databasecommand_collectionstats.cpp index dec833e8f..4138bc58c 100644 --- a/src/libtomahawk/database/databasecommand_collectionstats.cpp +++ b/src/libtomahawk/database/databasecommand_collectionstats.cpp @@ -57,11 +57,7 @@ DatabaseCommand_CollectionStats::exec( DatabaseImpl* dbi ) { m.insert( "numfiles", query.value( 0 ).toInt() ); m.insert( "lastmodified", query.value( 1 ).toInt() ); - - if ( !source()->isLocal() && !source()->lastOpGuid().isEmpty() ) - m.insert( "lastop", source()->lastOpGuid() ); - else - m.insert( "lastop", query.value( 2 ).toString() ); + m.insert( "lastop", query.value( 2 ).toString() ); } emit done( m ); diff --git a/src/libtomahawk/network/dbsyncconnection.cpp b/src/libtomahawk/network/dbsyncconnection.cpp index 6c193e257..d69518412 100644 --- a/src/libtomahawk/network/dbsyncconnection.cpp +++ b/src/libtomahawk/network/dbsyncconnection.cpp @@ -134,27 +134,23 @@ DBSyncConnection::check() } m_uscache.clear(); - m_themcache.clear(); m_us.clear(); changeState( CHECKING ); // load last-modified etc data for our collection and theirs from our DB: - DatabaseCommand_CollectionStats* cmd_us = - new DatabaseCommand_CollectionStats( SourceList::instance()->getLocal() ); - - 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 ) ) ); - - + DatabaseCommand_CollectionStats* cmd_us = new DatabaseCommand_CollectionStats( SourceList::instance()->getLocal() ); + connect( cmd_us, SIGNAL( done( QVariantMap ) ), SLOT( gotUs( QVariantMap ) ) ); Database::instance()->enqueue( QSharedPointer(cmd_us) ); - Database::instance()->enqueue( QSharedPointer(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(cmd_them) ); + } + else + fetchOpsData( m_lastop ); // restarts idle countdown m_timer.start(); @@ -174,16 +170,24 @@ DBSyncConnection::gotUs( const QVariantMap& m ) /// Called once we've loaded our cached data about their collection 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 ); - tLog() << "Sending a FETCHOPS cmd since:" << m_themcache.value( "lastop" ).toString(); + tLog() << "Sending a FETCHOPS cmd since:" << sinceguid; QVariantMap msg; msg.insert( "method", "fetchops" ); - msg.insert( "lastop", m_themcache.value( "lastop" ).toString() ); + msg.insert( "lastop", sinceguid ); sendMsg( msg ); } @@ -235,8 +239,6 @@ DBSyncConnection::handleMsg( msg_ptr msg ) return; } -// qDebug() << "APPLYING CMD" << cmd->commandname() << cmd->guid(); - if ( !msg->is( Msg::FRAGMENT ) ) // last msg in this batch { changeState( SAVING ); // just DB work left to complete @@ -244,7 +246,7 @@ DBSyncConnection::handleMsg( msg_ptr msg ) } if ( !cmd->singletonCmd() ) - m_source->setLastOpGuid( cmd->guid() ); + m_lastop = cmd->guid(); Database::instance()->enqueue( QSharedPointer( cmd ) ); return; diff --git a/src/libtomahawk/network/dbsyncconnection.h b/src/libtomahawk/network/dbsyncconnection.h index 4fbccdcc5..84080f8e4 100644 --- a/src/libtomahawk/network/dbsyncconnection.h +++ b/src/libtomahawk/network/dbsyncconnection.h @@ -64,9 +64,13 @@ public slots: private slots: void gotUs( const QVariantMap& m ); - void gotThemCache( const QVariantMap& m ); - void lastOpApplied(); + void gotThem( const QVariantMap& m ); + + void fetchOpsData( const QString& sinceguid ); void sendOpsData( QString sinceguid, QString lastguid, QList< dbop_ptr > ops ); + + void lastOpApplied(); + void check(); void idleTimeout(); @@ -76,11 +80,12 @@ private: void changeState( State newstate ); Tomahawk::source_ptr m_source; - QVariantMap m_us, m_uscache, m_themcache; - State m_state; + QVariantMap m_us, m_uscache; + QString m_lastop; QString m_lastSentOp; + State m_state; QTimer m_timer; }; diff --git a/src/libtomahawk/source.cpp b/src/libtomahawk/source.cpp index 148e53510..d809389b4 100644 --- a/src/libtomahawk/source.cpp +++ b/src/libtomahawk/source.cpp @@ -74,7 +74,7 @@ Source::setControlConnection( ControlConnection* cc ) { m_cc = 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 Source::friendlyName() const { diff --git a/src/libtomahawk/source.h b/src/libtomahawk/source.h index 655ea44d8..36eeaee03 100644 --- a/src/libtomahawk/source.h +++ b/src/libtomahawk/source.h @@ -40,8 +40,9 @@ class DLLEXPORT Source : public QObject { Q_OBJECT -friend class ::DatabaseCommand_LogPlayback; friend class ::DBSyncConnection; +friend class ::ControlConnection; +friend class ::DatabaseCommand_LogPlayback; friend class ::DatabaseCommand_SocialAction; public: @@ -53,8 +54,6 @@ public: bool isLocal() const { return m_isLocal; } bool isOnline() const { return m_online; } - QString lastOpGuid() const { return m_lastOpGuid; } - QString userName() const { return m_username; } QString friendlyName() const; void setFriendlyName( const QString& fname ); @@ -73,9 +72,6 @@ public: void scanningProgress( unsigned int files ); void scanningFinished( unsigned int files ); - void setOffline(); - void setOnline(); - unsigned int trackCount() const; Tomahawk::query_ptr currentTrack() const { return m_currentTrack; } @@ -105,10 +101,10 @@ public slots: void setStats( const QVariantMap& m ); private slots: - void setLastOpGuid( const QString& guid ) { m_lastOpGuid = guid; } - 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 onPlaybackStarted( const Tomahawk::query_ptr& query ); @@ -124,7 +120,6 @@ private: int m_id; QList< QSharedPointer > m_collections; QVariantMap m_stats; - QString m_lastOpGuid; bool m_scrubFriendlyName; Tomahawk::query_ptr m_currentTrack;