From cb06d11b617c42b421906a79dcf7c1f7a276bb33 Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Mon, 28 Feb 2011 08:43:46 +0100 Subject: [PATCH 1/3] * Added a few safety checks. --- src/libtomahawk/database/databasecollection.cpp | 5 ++++- src/libtomahawk/database/databasecollection.h | 3 +++ src/libtomahawk/network/controlconnection.cpp | 11 ++++++++--- src/libtomahawk/network/servent.cpp | 2 +- 4 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/libtomahawk/database/databasecollection.cpp b/src/libtomahawk/database/databasecollection.cpp index 918fe5c87..55858c383 100644 --- a/src/libtomahawk/database/databasecollection.cpp +++ b/src/libtomahawk/database/databasecollection.cpp @@ -11,6 +11,7 @@ using namespace Tomahawk; DatabaseCollection::DatabaseCollection( const source_ptr& src, QObject* parent ) : Collection( src, QString( "dbcollection:%1" ).arg( src->userName() ), parent ) + , m_loadedTracks( false ) { } @@ -45,6 +46,8 @@ void DatabaseCollection::loadTracks() { qDebug() << Q_FUNC_INFO << source()->userName(); + + m_loadedTracks = true; DatabaseCommand_AllTracks* cmd = new DatabaseCommand_AllTracks( source()->collection() ); connect( cmd, SIGNAL( tracks( QList, Tomahawk::collection_ptr ) ), @@ -107,7 +110,7 @@ DatabaseCollection::tracks() { qDebug() << Q_FUNC_INFO; - if ( Collection::tracks().isEmpty() ) + if ( !m_loadedTracks ) { loadTracks(); } diff --git a/src/libtomahawk/database/databasecollection.h b/src/libtomahawk/database/databasecollection.h index 441ce937e..62b82eac6 100644 --- a/src/libtomahawk/database/databasecollection.h +++ b/src/libtomahawk/database/databasecollection.h @@ -32,6 +32,9 @@ public slots: private slots: void dynamicPlaylistCreated( const Tomahawk::source_ptr& source, const QVariantList& data ); + +private: + bool m_loadedTracks; }; #endif // DATABASECOLLECTION_H diff --git a/src/libtomahawk/network/controlconnection.cpp b/src/libtomahawk/network/controlconnection.cpp index bb5d46489..d1b8c8ee0 100644 --- a/src/libtomahawk/network/controlconnection.cpp +++ b/src/libtomahawk/network/controlconnection.cpp @@ -134,10 +134,10 @@ ControlConnection::setupDbSyncConnection( bool ondemand ) if ( m_dbsyncconn ) { connect( m_dbsyncconn, SIGNAL( finished() ), - m_dbsyncconn, SLOT( deleteLater() ) ); + m_dbsyncconn, SLOT( deleteLater() ) ); connect( m_dbsyncconn, SIGNAL( destroyed( QObject* ) ), - SLOT( dbSyncConnFinished( QObject* ) ), Qt::DirectConnection ); + SLOT( dbSyncConnFinished( QObject* ) ), Qt::DirectConnection ); } } @@ -151,6 +151,8 @@ ControlConnection::dbSyncConnFinished( QObject* c ) //qDebug() << "Setting m_dbsyncconn to NULL"; m_dbsyncconn = NULL; } + else + qDebug() << "Old DbSyncConn destroyed?!"; } @@ -158,8 +160,11 @@ DBSyncConnection* ControlConnection::dbSyncConnection() { qDebug() << Q_FUNC_INFO; - if( m_dbsyncconn == NULL ) + if ( !m_dbsyncconn ) + { setupDbSyncConnection( true ); + Q_ASSERT( m_dbsyncconn ); + } return m_dbsyncconn; } diff --git a/src/libtomahawk/network/servent.cpp b/src/libtomahawk/network/servent.cpp index 1c3fae85f..44525742b 100644 --- a/src/libtomahawk/network/servent.cpp +++ b/src/libtomahawk/network/servent.cpp @@ -711,7 +711,7 @@ Servent::triggerDBSync() if ( src.isNull() || src->isLocal() ) continue; - if ( src->controlConnection() && src->controlConnection()->dbSyncConnection() ) // source online? + if ( src->controlConnection() ) // source online? src->controlConnection()->dbSyncConnection()->trigger(); } } From 2ce7e76d955b612414852843b84e07b6809eb361 Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Mon, 28 Feb 2011 09:05:12 +0100 Subject: [PATCH 2/3] * Few more debug output / checks to catch the last remaining showstoppers. --- src/libtomahawk/network/controlconnection.cpp | 9 +++++---- src/libtomahawk/network/servent.cpp | 2 +- src/tomahawkapp.cpp | 1 + 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/libtomahawk/network/controlconnection.cpp b/src/libtomahawk/network/controlconnection.cpp index d1b8c8ee0..bfbff6550 100644 --- a/src/libtomahawk/network/controlconnection.cpp +++ b/src/libtomahawk/network/controlconnection.cpp @@ -37,7 +37,8 @@ ControlConnection::~ControlConnection() delete m_pingtimer; m_servent->unregisterControlConnection(this); - if( m_dbsyncconn ) m_dbsyncconn->deleteLater(); + if( m_dbsyncconn ) + m_dbsyncconn->deleteLater(); } @@ -96,15 +97,15 @@ ControlConnection::registerSource() // .. but we'll use the shared pointer we've already made: m_registered = true; - setupDbSyncConnection(); m_servent->registerControlConnection( this ); + setupDbSyncConnection(); } void ControlConnection::setupDbSyncConnection( bool ondemand ) { - if( m_dbsyncconn != NULL || !m_registered ) + if ( m_dbsyncconn || !m_registered ) return; qDebug() << Q_FUNC_INFO << ondemand << m_source->id(); @@ -159,7 +160,7 @@ ControlConnection::dbSyncConnFinished( QObject* c ) DBSyncConnection* ControlConnection::dbSyncConnection() { - qDebug() << Q_FUNC_INFO; + qDebug() << Q_FUNC_INFO << m_source->id(); if ( !m_dbsyncconn ) { setupDbSyncConnection( true ); diff --git a/src/libtomahawk/network/servent.cpp b/src/libtomahawk/network/servent.cpp index 44525742b..1c3fae85f 100644 --- a/src/libtomahawk/network/servent.cpp +++ b/src/libtomahawk/network/servent.cpp @@ -711,7 +711,7 @@ Servent::triggerDBSync() if ( src.isNull() || src->isLocal() ) continue; - if ( src->controlConnection() ) // source online? + if ( src->controlConnection() && src->controlConnection()->dbSyncConnection() ) // source online? src->controlConnection()->dbSyncConnection()->trigger(); } } diff --git a/src/tomahawkapp.cpp b/src/tomahawkapp.cpp index 4d68b8aa7..62fb28086 100644 --- a/src/tomahawkapp.cpp +++ b/src/tomahawkapp.cpp @@ -422,6 +422,7 @@ TomahawkApp::initLocalCollection() src->addCollection( coll ); SourceList::instance()->setLocal( src ); + src->collection()->tracks(); // to make the stats signal be emitted by our local source // this will update the sidebar, etc. From b795b0cf021407c030655d992daf4fd337422591 Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Mon, 28 Feb 2011 09:20:21 +0100 Subject: [PATCH 3/3] * Ignore result-hint if source is currently offline & try to resolve again. * Fixed crash related to result hints. --- src/libtomahawk/database/databasecommand_resolve.cpp | 3 ++- src/libtomahawk/database/databaseimpl.cpp | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/libtomahawk/database/databasecommand_resolve.cpp b/src/libtomahawk/database/databasecommand_resolve.cpp index 8dcb3937c..85c6cabaf 100644 --- a/src/libtomahawk/database/databasecommand_resolve.cpp +++ b/src/libtomahawk/database/databasecommand_resolve.cpp @@ -24,8 +24,9 @@ DatabaseCommand_Resolve::exec( DatabaseImpl* lib ) qDebug() << "Using result-hint to speed up resolving:" << m_query->resultHint(); Tomahawk::result_ptr result = lib->result( m_query->resultHint() ); - if ( !result.isNull() ) + if ( !result.isNull() && result->collection()->source()->isOnline() ) { + res << result; emit results( m_query->id(), res ); return; } diff --git a/src/libtomahawk/database/databaseimpl.cpp b/src/libtomahawk/database/databaseimpl.cpp index 6199b2b1a..ade68f205 100644 --- a/src/libtomahawk/database/databaseimpl.cpp +++ b/src/libtomahawk/database/databaseimpl.cpp @@ -459,7 +459,7 @@ DatabaseImpl::result( const QString& url ) { TomahawkSqlQuery query = newquery(); Tomahawk::source_ptr s; - Tomahawk::result_ptr res; + Tomahawk::result_ptr res = Tomahawk::result_ptr( new Tomahawk::Result() ); QString fileUrl; if ( url.contains( "servent://" ) ) @@ -539,6 +539,7 @@ DatabaseImpl::result( const QString& url ) res->setAlbumPos( query.value( 14 ).toUInt() ); res->setRID( uuid() ); res->setId( query.value( 9 ).toUInt() ); + res->setCollection( s->collection() ); } return res;