1 | /* |
2 | Copyright (c) 2007 Tobias Koenig <tokoe@kde.org> |
3 | |
4 | This library is free software; you can redistribute it and/or modify it |
5 | under the terms of the GNU Library General Public License as published by |
6 | the Free Software Foundation; either version 2 of the License, or (at your |
7 | option) any later version. |
8 | |
9 | This library is distributed in the hope that it will be useful, but WITHOUT |
10 | ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
11 | FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public |
12 | License for more details. |
13 | |
14 | You should have received a copy of the GNU Library General Public License |
15 | along with this library; see the file COPYING.LIB. If not, write to the |
16 | Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA |
17 | 02110-1301, USA. |
18 | */ |
19 | |
20 | #ifndef AKONADI_JOB_P_H |
21 | #define AKONADI_JOB_P_H |
22 | |
23 | #include "session.h" |
24 | #include "item.h" |
25 | |
26 | namespace Akonadi { |
27 | |
28 | /** |
29 | * @internal |
30 | */ |
31 | class JobPrivate |
32 | { |
33 | public: |
34 | explicit JobPrivate(Job *parent) |
35 | : q_ptr(parent) |
36 | , mCurrentSubJob(0) |
37 | , mSession(0) |
38 | , mWriteFinished(false) |
39 | , mStarted(false) |
40 | { |
41 | } |
42 | |
43 | virtual ~JobPrivate() |
44 | { |
45 | } |
46 | |
47 | void init(QObject *parent); |
48 | |
49 | void handleResponse(const QByteArray &tag, const QByteArray &data); |
50 | void startQueued(); |
51 | void lostConnection(); |
52 | void slotSubJobAboutToStart(Akonadi::Job *); |
53 | void startNext(); |
54 | void signalCreationToJobTracker(); |
55 | void signalStartedToJobTracker(); |
56 | void delayedEmitResult(); |
57 | /* |
58 | Returns a string to display in akonadi console's job tracker. E.g. item ID. |
59 | */ |
60 | virtual QString jobDebuggingString() const { |
61 | return QString(); |
62 | } |
63 | /** |
64 | Returns a new unique command tag for communication with the backend. |
65 | */ |
66 | QByteArray newTag(); |
67 | |
68 | /** |
69 | Return the tag used for the request. |
70 | */ |
71 | QByteArray tag() const; |
72 | |
73 | /** |
74 | Sends raw data to the backend. |
75 | */ |
76 | void writeData(const QByteArray &data); |
77 | |
78 | /** |
79 | * Notify following jobs about item revision changes. |
80 | * This is used to avoid phantom conflicts between pipelined modify jobs on the same item. |
81 | * @param itemID the id of the item which has changed |
82 | * @param oldRevision the old item revision |
83 | * @param newRevision the new item revision |
84 | */ |
85 | void itemRevisionChanged(Akonadi::Item::Id itemId, int oldRevision, int newRevision); |
86 | |
87 | /** |
88 | * Propagate item revision changes to this job and its sub-jobs. |
89 | */ |
90 | void updateItemRevision(Akonadi::Item::Id itemId, int oldRevision, int newRevision); |
91 | |
92 | /** |
93 | * Overwrite this if your job does operations with conflict detection and update |
94 | * the item revisions if your items are affected. The default implementation does nothing. |
95 | */ |
96 | virtual void doUpdateItemRevision(Akonadi::Item::Id, int oldRevision, int newRevision); |
97 | |
98 | /** |
99 | * This method is called right before result() and finished() signals are emitted. |
100 | * Overwrite this method in your job if you need to emit some signals or process |
101 | * some data before the job finishes. |
102 | * |
103 | * Default implementation does nothing. |
104 | */ |
105 | virtual void aboutToFinish(); |
106 | |
107 | int protocolVersion() const; |
108 | |
109 | Job *q_ptr; |
110 | Q_DECLARE_PUBLIC(Job) |
111 | |
112 | Job *mParentJob; |
113 | Job *mCurrentSubJob; |
114 | QByteArray mTag; |
115 | Session *mSession; |
116 | bool mWriteFinished; |
117 | bool mStarted; |
118 | }; |
119 | |
120 | } |
121 | |
122 | #endif |
123 | |