18 #include "collectionattributessynchronizationjob.h"
19 #include "dbusconnectionpool.h"
20 #include "kjobprivatebase_p.h"
22 #include <akonadi/agentinstance.h>
23 #include <akonadi/agentmanager.h>
24 #include <akonadi/collection.h>
29 #include <QDBusConnection>
30 #include <QDBusInterface>
36 class CollectionAttributesSynchronizationJobPrivate :
public KJobPrivateBase
39 CollectionAttributesSynchronizationJobPrivate( CollectionAttributesSynchronizationJob* parent )
49 CollectionAttributesSynchronizationJob *q;
50 AgentInstance instance;
51 Collection collection;
52 QDBusInterface* interface;
55 static int timeoutCountLimit;
57 void slotSynchronized( qlonglong );
61 int CollectionAttributesSynchronizationJobPrivate::timeoutCountLimit = 60;
65 d( new CollectionAttributesSynchronizationJobPrivate( this ) )
68 d->collection = collection;
69 d->safetyTimer =
new QTimer(
this );
70 connect( d->safetyTimer, SIGNAL(timeout()), SLOT(slotTimeout()) );
71 d->safetyTimer->setInterval( 10 * 1000 );
72 d->safetyTimer->setSingleShot(
false );
80 void CollectionAttributesSynchronizationJob::start()
85 void CollectionAttributesSynchronizationJobPrivate::doStart()
87 if ( !collection.isValid() ) {
88 q->setError( KJob::UserDefinedError );
89 q->setErrorText( i18n(
"Invalid collection instance." ) );
94 if ( !instance.isValid() ) {
95 q->setError( KJob::UserDefinedError );
96 q->setErrorText( i18n(
"Invalid resource instance." ) );
101 interface = new QDBusInterface( QString::fromLatin1( "org.freedesktop.Akonadi.Resource.%1" ).arg( instance.identifier() ),
102 QString::fromLatin1( "/" ),
103 QString::fromLatin1( "org.freedesktop.Akonadi.Resource" ),
104 DBusConnectionPool::threadConnection(), this );
105 connect( interface, SIGNAL(attributesSynchronized(qlonglong)),
106 q, SLOT(slotSynchronized(qlonglong)) );
108 if ( interface->isValid() ) {
109 const QDBusMessage reply = interface->call( QString::fromUtf8(
"synchronizeCollectionAttributes" ), collection.id() );
110 if ( reply.type() == QDBusMessage::ErrorMessage ) {
115 safetyTimer->start();
117 q->setError( KJob::UserDefinedError );
118 q->setErrorText( i18n(
"Unable to obtain D-Bus interface for resource '%1'", instance.identifier() ) );
124 void CollectionAttributesSynchronizationJobPrivate::slotSynchronized( qlonglong
id )
126 if (
id == collection.id() ) {
127 q->disconnect( interface, SIGNAL(attributesSynchronized(qlonglong)),
128 q, SLOT(slotSynchronized(qlonglong)) );
134 void CollectionAttributesSynchronizationJobPrivate::slotTimeout()
139 if ( timeoutCount > timeoutCountLimit ) {
141 q->setError( KJob::UserDefinedError );
142 q->setErrorText( i18n(
"Collection attributes synchronization timed out." ) );
149 kDebug() <<
"trying again to sync collection attributes" << collection.id() << instance.
identifier();
150 interface->call( QString::fromUtf8(
"synchronizeCollectionAttributes" ), collection.id() );
156 #include "collectionattributessynchronizationjob.moc"