00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef AKONADI_JOB_H
00023 #define AKONADI_JOB_H
00024
00025 #include "akonadi_export.h"
00026
00027 #include <kcompositejob.h>
00028
00029 class QString;
00030
00031 namespace Akonadi {
00032
00033 class JobPrivate;
00034 class Session;
00035 class SessionPrivate;
00036
00086 class AKONADI_EXPORT Job : public KCompositeJob
00087 {
00088 Q_OBJECT
00089
00090 friend class Session;
00091 friend class SessionPrivate;
00092
00093 public:
00097 typedef QList<Job*> List;
00098
00104 enum Error
00105 {
00106 ConnectionFailed = UserDefinedError,
00107 ProtocolVersionMismatch,
00108 UserCanceled,
00109 Unknown,
00110 UserError = UserDefinedError + 42
00111 };
00112
00122 explicit Job( QObject *parent = 0 );
00123
00127 virtual ~Job();
00128
00133 void start();
00134
00139 virtual QString errorString() const;
00140
00141 Q_SIGNALS:
00147 void aboutToStart( Akonadi::Job *job );
00148
00157 void writeFinished( Akonadi::Job *job );
00158
00159 protected:
00165 virtual void doStart() = 0;
00166
00175 virtual void doHandleResponse( const QByteArray &tag, const QByteArray &data );
00176
00185 virtual bool addSubjob( KJob* job );
00186
00192 virtual bool removeSubjob( KJob* job );
00193
00197 virtual bool doKill();
00198
00203 void emitWriteFinished();
00204
00205 protected Q_SLOTS:
00206 virtual void slotResult( KJob* job );
00207
00208 protected:
00209
00210 Job( JobPrivate *dd, QObject *parent );
00211 JobPrivate* const d_ptr;
00212
00213
00214 private:
00215 Q_DECLARE_PRIVATE( Job )
00216
00217
00218 Q_PRIVATE_SLOT( d_func(), void slotSubJobAboutToStart( Akonadi::Job* ) )
00219 Q_PRIVATE_SLOT( d_func(), void startNext() )
00220 Q_PRIVATE_SLOT( d_func(), void signalCreationToJobTracker() )
00221 Q_PRIVATE_SLOT( d_func(), void delayedEmitResult() )
00222
00223 };
00224
00225 }
00226
00227 #endif