From 9d827819d8067cdce7dc50c32ea9c2f86ebe8928 Mon Sep 17 00:00:00 2001 From: Jeff Mitchell Date: Tue, 5 Mar 2013 01:24:48 -0500 Subject: [PATCH] Add necessary hooks for hatchet dbcmd syncing --- src/libtomahawk/Source.cpp | 10 ++++++++++ src/libtomahawk/Source.h | 11 +++++++---- .../database/DatabaseCommand_LoadAllSources.cpp | 13 +++++++++++-- src/libtomahawk/network/Servent.cpp | 3 ++- src/libtomahawk/network/Servent.h | 1 + 5 files changed, 31 insertions(+), 7 deletions(-) diff --git a/src/libtomahawk/Source.cpp b/src/libtomahawk/Source.cpp index c3336723b..008f4964a 100644 --- a/src/libtomahawk/Source.cpp +++ b/src/libtomahawk/Source.cpp @@ -27,6 +27,7 @@ #include "network/ControlConnection.h" #include "database/DatabaseCommand_AddSource.h" #include "database/DatabaseCommand_CollectionStats.h" +#include "database/DatabaseCommand_LoadAllSources.h" #include "database/DatabaseCommand_SourceOffline.h" #include "database/DatabaseCommand_UpdateSearchIndex.h" #include "database/Database.h" @@ -415,6 +416,15 @@ Source::lastCmdGuid() const } +void +Source::setLastCmdGuid( const QString& guid ) +{ + tLog() << Q_FUNC_INFO << "name is " << friendlyName() << " and guid is " << guid; + QMutexLocker lock( &m_cmdMutex ); + m_lastCmdGuid = guid; +} + + void Source::addCommand( const QSharedPointer& command ) { diff --git a/src/libtomahawk/Source.h b/src/libtomahawk/Source.h index 6a78b885b..77b2b0b8a 100644 --- a/src/libtomahawk/Source.h +++ b/src/libtomahawk/Source.h @@ -33,10 +33,11 @@ #include "DllMacro.h" class ControlConnection; +class DatabaseCommand_DeleteFiles; +class DatabaseCommand_LoadAllSources; class DatabaseCommand_LogPlayback; class DatabaseCommand_SocialAction; class DatabaseCommand_UpdateSearchIndex; -class DatabaseCommand_DeleteFiles; class MusicScanner; namespace Tomahawk @@ -48,10 +49,11 @@ Q_OBJECT friend class ::DBSyncConnection; friend class ::ControlConnection; -friend class ::DatabaseCommand_LogPlayback; -friend class ::DatabaseCommand_SocialAction; friend class ::DatabaseCommand_AddFiles; friend class ::DatabaseCommand_DeleteFiles; +friend class ::DatabaseCommand_LoadAllSources; +friend class ::DatabaseCommand_LogPlayback; +friend class ::DatabaseCommand_SocialAction; friend class ::MusicScanner; public: @@ -124,10 +126,11 @@ signals: public slots: void setStats( const QVariantMap& m ); + QString lastCmdGuid() const; private slots: + void setLastCmdGuid( const QString& guid ); void dbLoaded( unsigned int id, const QString& fname ); - QString lastCmdGuid() const; void updateIndexWhenSynced(); void setOffline(); diff --git a/src/libtomahawk/database/DatabaseCommand_LoadAllSources.cpp b/src/libtomahawk/database/DatabaseCommand_LoadAllSources.cpp index 5ecd70a0f..4592a10cd 100644 --- a/src/libtomahawk/database/DatabaseCommand_LoadAllSources.cpp +++ b/src/libtomahawk/database/DatabaseCommand_LoadAllSources.cpp @@ -21,7 +21,7 @@ #include #include "network/Servent.h" -#include "Source.h" +#include "SourceList.h" #include "DatabaseImpl.h" #include "utils/Logger.h" @@ -33,7 +33,15 @@ DatabaseCommand_LoadAllSources::exec( DatabaseImpl* dbi ) { TomahawkSqlQuery query = dbi->newquery(); - query.exec( QString( "SELECT id, name, friendlyname " + query.exec( QString( "SELECT guid " + "FROM oplog " + "WHERE source IS NULL " + "ORDER BY id DESC LIMIT 1" ) ); + if ( query.next() ) + if ( SourceList::instance() && !SourceList::instance()->getLocal().isNull() ) + SourceList::instance()->getLocal()->setLastCmdGuid( query.value( 0 ).toString() ); + + query.exec( QString( "SELECT id, name, friendlyname, lastop " "FROM source" ) ); QList sources; @@ -41,6 +49,7 @@ DatabaseCommand_LoadAllSources::exec( DatabaseImpl* dbi ) { source_ptr src( new Source( query.value( 0 ).toUInt(), query.value( 1 ).toString() ) ); src->setDbFriendlyName( query.value( 2 ).toString() ); + src->setLastCmdGuid( query.value( 3 ).toString() ); sources << src; } diff --git a/src/libtomahawk/network/Servent.cpp b/src/libtomahawk/network/Servent.cpp index 220def87e..761a75e73 100644 --- a/src/libtomahawk/network/Servent.cpp +++ b/src/libtomahawk/network/Servent.cpp @@ -1051,7 +1051,7 @@ void Servent::triggerDBSync() { // tell peers we have new stuff they should sync - QList sources = SourceList::instance()->sources(); + QList< source_ptr > sources = SourceList::instance()->sources(); foreach ( const source_ptr& src, sources ) { // skip local source @@ -1061,6 +1061,7 @@ Servent::triggerDBSync() if ( src->controlConnection() && src->controlConnection()->dbSyncConnection() ) // source online? src->controlConnection()->dbSyncConnection()->trigger(); } + emit dbSyncTriggered(); } diff --git a/src/libtomahawk/network/Servent.h b/src/libtomahawk/network/Servent.h index 3185f30ab..d4052a97b 100644 --- a/src/libtomahawk/network/Servent.h +++ b/src/libtomahawk/network/Servent.h @@ -137,6 +137,7 @@ public: bool isReady() const { return m_ready; }; signals: + void dbSyncTriggered(); void streamStarted( StreamConnection* ); void streamFinished( StreamConnection* ); void ready();