akonadi
resourcebase.h
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef AKONADI_RESOURCEBASE_H
00024 #define AKONADI_RESOURCEBASE_H
00025
00026 #include "akonadi_export.h"
00027
00028 #include <akonadi/agentbase.h>
00029 #include <akonadi/collection.h>
00030 #include <akonadi/item.h>
00031
00032 class KJob;
00033 class ResourceAdaptor;
00034
00035 namespace Akonadi {
00036
00037 class ResourceBasePrivate;
00038
00143
00144 class AKONADI_EXPORT ResourceBase : public AgentBase
00145 {
00146 Q_OBJECT
00147
00148 public:
00173 template <typename T>
00174 static int init( int argc, char **argv )
00175 {
00176 const QString id = parseArguments( argc, argv );
00177 KApplication app;
00178 T* r = new T( id );
00179
00180
00181
00182 Observer *observer = dynamic_cast<Observer*>( r );
00183 if ( observer != 0 )
00184 r->registerObserver( observer );
00185 return init( r );
00186 }
00187
00191
00192 void setName( const QString &name );
00193
00197 QString name() const;
00198
00199 Q_SIGNALS:
00205 void nameChanged( const QString &name );
00206
00210 void synchronized();
00211
00212 protected Q_SLOTS:
00218 virtual void retrieveCollections() = 0;
00219
00233 virtual void retrieveItems( const Akonadi::Collection &collection ) = 0;
00234
00244 virtual bool retrieveItem( const Akonadi::Item &item, const QSet<QByteArray> &parts ) = 0;
00245
00246 protected:
00252 ResourceBase( const QString & id );
00253
00257 ~ResourceBase();
00258
00264 void itemRetrieved( const Item &item );
00265
00273 void changeCommitted( const Item &item );
00274
00284 void changeCommitted( const Collection &collection );
00285
00292 void collectionsRetrieved( const Collection::List &collections );
00293
00301 void collectionsRetrievedIncremental( const Collection::List &changedCollections,
00302 const Collection::List &removedCollections );
00303
00311 void setCollectionStreamingEnabled( bool enable );
00312
00321 void collectionsRetrievalDone();
00322
00331 void itemsRetrieved( const Item::List &items );
00332
00340 void setTotalItems( int amount );
00341
00347 void setItemStreamingEnabled( bool enable );
00348
00355 void itemsRetrievedIncremental( const Item::List &changedItems,
00356 const Item::List &removedItems );
00357
00367 void itemsRetrievalDone();
00368
00378 void clearCache();
00379
00383 Collection currentCollection() const;
00384
00388 Item currentItem() const;
00389
00393 void synchronize();
00394
00399 void synchronizeCollection( qint64 id );
00400
00404 void synchronizeCollectionTree();
00405
00409 void cancelTask();
00410
00415 void cancelTask( const QString &error );
00416
00423 void deferTask();
00424
00428 void doSetOnline( bool online );
00429
00430 private:
00431 static QString parseArguments( int, char** );
00432 static int init( ResourceBase *r );
00433
00434
00435 friend class ::ResourceAdaptor;
00436
00437 bool requestItemDelivery( qint64 uid, const QString &remoteId, const QString &mimeType, const QStringList &parts );
00438
00439 private:
00440 Q_DECLARE_PRIVATE( ResourceBase )
00441
00442 Q_PRIVATE_SLOT( d_func(), void slotDeliveryDone( KJob* ) )
00443 Q_PRIVATE_SLOT( d_func(), void slotCollectionSyncDone( KJob* ) )
00444 Q_PRIVATE_SLOT( d_func(), void slotDeleteResourceCollection() )
00445 Q_PRIVATE_SLOT( d_func(), void slotDeleteResourceCollectionDone( KJob* ) )
00446 Q_PRIVATE_SLOT( d_func(), void slotCollectionDeletionDone( KJob* ) )
00447 Q_PRIVATE_SLOT( d_func(), void slotLocalListDone( KJob* ) )
00448 Q_PRIVATE_SLOT( d_func(), void slotSynchronizeCollection( const Akonadi::Collection& ) )
00449 Q_PRIVATE_SLOT( d_func(), void slotCollectionListDone( KJob* ) )
00450 Q_PRIVATE_SLOT( d_func(), void slotItemSyncDone( KJob* ) )
00451 Q_PRIVATE_SLOT( d_func(), void slotPercent( KJob*, unsigned long ) )
00452 };
00453
00454 }
00455
00456 #ifndef AKONADI_RESOURCE_MAIN
00457
00460 #define AKONADI_RESOURCE_MAIN( resourceClass ) \
00461 int main( int argc, char **argv ) \
00462 { \
00463 return Akonadi::ResourceBase::init<resourceClass>( argc, argv ); \
00464 }
00465 #endif
00466
00467 #endif