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:
@@ -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 );
|
||||||
|
@@ -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;
|
||||||
|
@@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -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
|
||||||
{
|
{
|
||||||
|
@@ -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;
|
||||||
|
Reference in New Issue
Block a user