From kde-commits Sun Dec 12 19:02:59 2010 From: Andras Mantia Date: Sun, 12 Dec 2010 19:02:59 +0000 To: kde-commits Subject: KDE/kdepimlibs Message-Id: <20101212190259.64D6FAC8A7 () svn ! kde ! org> X-MARC-Message: https://marc.info/?l=kde-commits&m=129218061105834 SVN commit 1205840 by amantia: Implement the recursive sync methods in the resource base and agentmanager. Requires the latest akonadi (1.4.81) from git. M +1 -1 CMakeLists.txt M +6 -1 akonadi/agentmanager.cpp M +10 -0 akonadi/agentmanager.h M +13 -1 akonadi/resourcebase.cpp M +7 -0 akonadi/resourcebase.h --- trunk/KDE/kdepimlibs/CMakeLists.txt #1205839:1205840 @@ -80,7 +80,7 @@ if (NOT KDEPIM_ONLY_KLEO) #FindAkonadi.cmake is only there for compatibility reasons, but we don't want to use that. - set(Akonadi_MIN_VERSION "1.4.52") + set(Akonadi_MIN_VERSION "1.4.81") find_package(Akonadi ${Akonadi_MIN_VERSION} QUIET NO_MODULE) macro_log_feature(Akonadi_FOUND "Akonadi server libraries" "Access to PIM storage and services" "http://pim.kde.org/akonadi" TRUE "${Akonadi_MIN_VERSION}" "") --- trunk/KDE/kdepimlibs/akonadi/agentmanager.cpp #1205839:1205840 @@ -393,9 +393,14 @@ void AgentManager::synchronizeCollection(const Collection & collection) { + synchronizeCollection( collection, false ); +} + +void AgentManager::synchronizeCollection( const Collection & collection, bool recursive ) +{ const QString resId = collection.resource(); Q_ASSERT( !resId.isEmpty() ); - d->mManager->agentInstanceSynchronizeCollection( resId, collection.id() ); + d->mManager->agentInstanceSynchronizeCollection( resId, collection.id(), recursive ); } #include "agentmanager.moc" --- trunk/KDE/kdepimlibs/akonadi/agentmanager.h #1205839:1205840 @@ -105,6 +105,16 @@ */ void synchronizeCollection( const Collection &collection ); + /** + * Trigger a synchronization of the given collection by its owning resource agent. + * + * @param collection The collection to synchronize. + * @param recursive If true, the sub-collections are also syncronized + * + * @since 4.6 + */ + void synchronizeCollection( const Collection &collection, bool recursive ); + Q_SIGNALS: /** * This signal is emitted whenever a new agent type was installed on the system. --- trunk/KDE/kdepimlibs/akonadi/resourcebase.cpp #1205839:1205840 @@ -688,9 +688,15 @@ void ResourceBase::synchronizeCollection( qint64 collectionId ) { - CollectionFetchJob* job = new CollectionFetchJob( Collection( collectionId ), CollectionFetchJob::Base ); + synchronizeCollection( collectionId, false ); +} + +void ResourceBase::synchronizeCollection( qint64 collectionId, bool recursive ) +{ + CollectionFetchJob* job = new CollectionFetchJob( Collection( collectionId ), recursive ? CollectionFetchJob::Recursive : CollectionFetchJob::Base ); job->setFetchScope( changeRecorder()->collectionFetchScope() ); job->fetchScope().setResource( identifier() ); + job->setProperty( "recursive", recursive ); connect( job, SIGNAL( result( KJob* ) ), SLOT( slotCollectionListDone( KJob* ) ) ); } @@ -699,10 +705,16 @@ if ( !job->error() ) { Collection::List list = static_cast( job )->collections(); if ( !list.isEmpty() ) { + if ( job->property( "recursive" ).toBool() ) { + Q_FOREACH( Collection collection, list ) { + scheduler->scheduleSync( collection ); + } + } else { Collection col = list.first(); scheduler->scheduleSync( col ); } } + } // TODO: error handling } --- trunk/KDE/kdepimlibs/akonadi/resourcebase.h #1205839:1205840 @@ -461,6 +461,13 @@ /** * This method is called whenever the collection with the given @p id + * shall be synchronized. + * @param recursive if true, a recursive syncronization is done + */ + void synchronizeCollection( qint64 id, bool recursive ); + + /** + * This method is called whenever the collection with the given @p id * shall have its attributes synchronized. * * @param id The id of the collection to synchronize