18 #include "resourcesynchronizationjob.h"
19 #include "dbusconnectionpool.h"
20 #include "kjobprivatebase_p.h"
21 #include "servermanager.h"
23 #include <akonadi/agentinstance.h>
24 #include <akonadi/agentmanager.h>
29 #include <QDBusConnection>
30 #include <QDBusInterface>
36 class ResourceSynchronizationJobPrivate :
public KJobPrivateBase
39 ResourceSynchronizationJobPrivate( ResourceSynchronizationJob* parent ) :
44 collectionTreeOnly( false )
49 ResourceSynchronizationJob *q;
50 AgentInstance instance;
51 QDBusInterface* interface;
54 bool collectionTreeOnly;
55 static int timeoutCountLimit;
57 void slotSynchronized();
61 int ResourceSynchronizationJobPrivate::timeoutCountLimit = 60;
65 d( new ResourceSynchronizationJobPrivate( this ) )
67 d->instance = instance;
68 d->safetyTimer =
new QTimer(
this );
69 connect( d->safetyTimer, SIGNAL(timeout()), SLOT(slotTimeout()) );
70 d->safetyTimer->setInterval( 10 * 1000 );
71 d->safetyTimer->setSingleShot(
false );
79 void ResourceSynchronizationJob::start()
86 return d->collectionTreeOnly;
91 d->collectionTreeOnly = b;
94 void ResourceSynchronizationJobPrivate::doStart()
96 if ( !instance.isValid() ) {
97 q->setError( KJob::UserDefinedError );
98 q->setErrorText( i18n(
"Invalid resource instance." ) );
103 interface = new QDBusInterface( ServerManager::agentServiceName( ServerManager::Resource, instance.identifier() ),
104 QString::fromLatin1( "/" ),
105 QString::fromLatin1( "org.freedesktop.Akonadi.Resource" ),
106 DBusConnectionPool::threadConnection(), this );
107 if ( collectionTreeOnly )
108 connect( interface, SIGNAL(collectionTreeSynchronized()), q, SLOT(slotSynchronized()) );
110 connect( interface, SIGNAL(synchronized()), q, SLOT(slotSynchronized()) );
112 if ( interface->isValid() ) {
113 if ( collectionTreeOnly )
114 instance.synchronizeCollectionTree();
116 instance.synchronize();
118 safetyTimer->start();
120 q->setError( KJob::UserDefinedError );
121 q->setErrorText( i18n(
"Unable to obtain D-Bus interface for resource '%1'", instance.identifier() ) );
127 void ResourceSynchronizationJobPrivate::slotSynchronized()
129 if ( collectionTreeOnly )
130 q->disconnect( interface, SIGNAL(collectionTreeSynchronized()), q, SLOT(slotSynchronized()) );
132 q->disconnect( interface, SIGNAL(
synchronized()), q, SLOT(slotSynchronized()) );
137 void ResourceSynchronizationJobPrivate::slotTimeout()
142 if ( timeoutCount > timeoutCountLimit ) {
144 q->setError( KJob::UserDefinedError );
145 q->setErrorText( i18n(
"Resource synchronization timed out." ) );
152 kDebug() <<
"trying again to sync resource" << instance.
identifier();
153 if ( collectionTreeOnly )
154 instance.synchronizeCollectionTree();
156 instance.synchronize();
167 #include "moc_resourcesynchronizationjob.cpp"