Merge lp:~renatofilho/qtorganizer5-eds/fix-engine-crash into lp:qtorganizer5-eds
- fix-engine-crash
- Merge into trunk
Status: | Merged | ||||
---|---|---|---|---|---|
Merged at revision: | 59 | ||||
Proposed branch: | lp:~renatofilho/qtorganizer5-eds/fix-engine-crash | ||||
Merge into: | lp:qtorganizer5-eds | ||||
Diff against target: |
1190 lines (+374/-182) 33 files modified
CMakeLists.txt (+1/-1) buildOnDevice.sh (+2/-2) config.h.in (+1/-0) organizer/qorganizer-eds-engine.cpp (+29/-21) organizer/qorganizer-eds-engine.h (+5/-0) organizer/qorganizer-eds-fetchbyidrequestdata.cpp (+4/-2) organizer/qorganizer-eds-fetchbyidrequestdata.h (+2/-1) organizer/qorganizer-eds-fetchocurrencedata.cpp (+5/-2) organizer/qorganizer-eds-fetchocurrencedata.h (+2/-1) organizer/qorganizer-eds-fetchrequestdata.cpp (+5/-3) organizer/qorganizer-eds-fetchrequestdata.h (+2/-1) organizer/qorganizer-eds-removebyidrequestdata.cpp (+5/-2) organizer/qorganizer-eds-removebyidrequestdata.h (+2/-1) organizer/qorganizer-eds-removecollectionrequestdata.cpp (+6/-11) organizer/qorganizer-eds-removecollectionrequestdata.h (+2/-1) organizer/qorganizer-eds-removerequestdata.cpp (+4/-2) organizer/qorganizer-eds-removerequestdata.h (+2/-1) organizer/qorganizer-eds-requestdata.cpp (+69/-23) organizer/qorganizer-eds-requestdata.h (+14/-6) organizer/qorganizer-eds-savecollectionrequestdata.cpp (+10/-6) organizer/qorganizer-eds-savecollectionrequestdata.h (+3/-2) organizer/qorganizer-eds-saverequestdata.cpp (+5/-6) organizer/qorganizer-eds-saverequestdata.h (+2/-1) organizer/qorganizer-eds-source-registry.cpp (+1/-4) tests/unittest/CMakeLists.txt (+6/-5) tests/unittest/cancel-operation-test.cpp (+99/-0) tests/unittest/collections-test.cpp (+21/-7) tests/unittest/eds-base-test.cpp (+34/-60) tests/unittest/eds-base-test.h (+2/-3) tests/unittest/event-test.cpp (+2/-2) tests/unittest/fetchitem-test.cpp (+4/-3) tests/unittest/recurrence-test.cpp (+7/-2) tests/unittest/run-eds-test.sh (+16/-0) |
||||
To merge this branch: | bzr merge lp:~renatofilho/qtorganizer5-eds/fix-engine-crash | ||||
Related bugs: |
|
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
PS Jenkins bot | continuous-integration | Approve | |
Ubuntu Phablet Team | Pending | ||
Review via email: mp+219586@code.launchpad.net |
Commit message
Only destroy request data in the requestDestroyed function.
Return the items in the requested order.
Description of the change
PS Jenkins bot (ps-jenkins) wrote : | # |
- 61. By Renato Araujo Oliveira Filho
-
Fixed collection update signal.
Avoid delete request while wait to finish.
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:61
http://
Executed test runs:
FAILURE: http://
SUCCESS: http://
deb: http://
FAILURE: http://
Click here to trigger a rebuild:
http://
- 62. By Renato Araujo Oliveira Filho <renato@ubuntu>
-
Try t fix faling test.
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:62
http://
Executed test runs:
FAILURE: http://
FAILURE: http://
FAILURE: http://
Click here to trigger a rebuild:
http://
- 63. By Renato Araujo Oliveira Filho
-
Reduce the wait time during the test cleanup.
PS Jenkins bot (ps-jenkins) wrote : | # |
PASSED: Continuous integration, rev:63
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
- 64. By Renato Araujo Oliveira Filho
-
WIP
- 65. By Renato Araujo Oliveira Filho <renato@ubuntu>
-
Make EDS tests more reliable.
- 66. By Renato Araujo Oliveira Filho
-
Test cancel operation.
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:66
http://
Executed test runs:
FAILURE: http://
FAILURE: http://
FAILURE: http://
Click here to trigger a rebuild:
http://
- 67. By Renato Araujo Oliveira Filho
-
Added missing file.
- 68. By Renato Araujo Oliveira Filho
-
Removed unused functions.
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:68
http://
Executed test runs:
FAILURE: http://
FAILURE: http://
FAILURE: http://
Click here to trigger a rebuild:
http://
- 69. By Renato Araujo Oliveira Filho
-
Fixed organizer plugin load during tests.
PS Jenkins bot (ps-jenkins) wrote : | # |
PASSED: Continuous integration, rev:69
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
- 70. By Renato Araujo Oliveira Filho
-
Added test for select and unselect a collection.
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:70
http://
Executed test runs:
SUCCESS: http://
FAILURE: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
PS Jenkins bot (ps-jenkins) wrote : | # |
PASSED: Continuous integration, rev:70
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
- 71. By Renato Araujo Oliveira Filho
-
Removed commented code.
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:71
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
deb: http://
FAILURE: http://
Click here to trigger a rebuild:
http://
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:71
http://
Executed test runs:
FAILURE: http://
SUCCESS: http://
deb: http://
FAILURE: http://
Click here to trigger a rebuild:
http://
PS Jenkins bot (ps-jenkins) wrote : | # |
PASSED: Continuous integration, rev:71
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
- 72. By Renato Araujo Oliveira Filho
-
Return the item in the the correct sort order.
PS Jenkins bot (ps-jenkins) wrote : | # |
PASSED: Continuous integration, rev:72
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
Preview Diff
1 | === modified file 'CMakeLists.txt' | |||
2 | --- CMakeLists.txt 2013-12-05 15:30:17 +0000 | |||
3 | +++ CMakeLists.txt 2014-06-10 18:21:21 +0000 | |||
4 | @@ -70,7 +70,7 @@ | |||
5 | 70 | set(EVOLUTION_SOURCE_SERVICE_NAME "org.gnome.evolution.dataserver.Sources2") | 70 | set(EVOLUTION_SOURCE_SERVICE_NAME "org.gnome.evolution.dataserver.Sources2") |
6 | 71 | endif() | 71 | endif() |
7 | 72 | 72 | ||
9 | 73 | add_subdirectory(qorganizer) | 73 | add_subdirectory(organizer) |
10 | 74 | if(DBUS_RUNNER) | 74 | if(DBUS_RUNNER) |
11 | 75 | if(EVOLUTION_CALENDAR_FACTORY) | 75 | if(EVOLUTION_CALENDAR_FACTORY) |
12 | 76 | enable_testing() | 76 | enable_testing() |
13 | 77 | 77 | ||
14 | === modified file 'buildOnDevice.sh' | |||
15 | --- buildOnDevice.sh 2014-04-19 13:41:01 +0000 | |||
16 | +++ buildOnDevice.sh 2014-06-10 18:21:21 +0000 | |||
17 | @@ -72,9 +72,9 @@ | |||
18 | 72 | # same options as in debian/rules | 72 | # same options as in debian/rules |
19 | 73 | #QMAKE_OPTIONS="-recursive MALIIT_DEFAULT_PROFILE=ubuntu CONFIG+=\\\"debug nodoc enable-presage enable-hunspell enable-pinyin\\\"" | 73 | #QMAKE_OPTIONS="-recursive MALIIT_DEFAULT_PROFILE=ubuntu CONFIG+=\\\"debug nodoc enable-presage enable-hunspell enable-pinyin\\\"" |
20 | 74 | exec_with_ssh "mkdir -p $CODE_DIR/build" | 74 | exec_with_ssh "mkdir -p $CODE_DIR/build" |
22 | 75 | exec_with_ssh "cd $CODE_DIR/build && cmake ../ -DCMAKE_BUILD_TYPE=Debug && make -j 4" | 75 | exec_with_ssh "cd $CODE_DIR/build && cmake ../ -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Debug && make -j 4" |
23 | 76 | echo "Installing" | 76 | echo "Installing" |
25 | 77 | exec_with_ssh "cd $CODE_DIR/build && " $SUDO " make install" | 77 | exec_with_ssh "cd $CODE_DIR/build && " $SUDO " make install/fast" |
26 | 78 | } | 78 | } |
27 | 79 | 79 | ||
28 | 80 | run() { | 80 | run() { |
29 | 81 | 81 | ||
30 | === modified file 'config.h.in' | |||
31 | --- config.h.in 2013-12-02 01:42:41 +0000 | |||
32 | +++ config.h.in 2014-06-10 18:21:21 +0000 | |||
33 | @@ -4,5 +4,6 @@ | |||
34 | 4 | #define TMP_DIR "@TMP_DIR@" | 4 | #define TMP_DIR "@TMP_DIR@" |
35 | 5 | #define EVOLUTION_CALENDAR_FACTORY "@EVOLUTION_CALENDAR_FACTORY@" | 5 | #define EVOLUTION_CALENDAR_FACTORY "@EVOLUTION_CALENDAR_FACTORY@" |
36 | 6 | #define EVOLUTION_CALENDAR_SERVICE "org.gnome.evolution.dataserver.Calendar4" | 6 | #define EVOLUTION_CALENDAR_SERVICE "org.gnome.evolution.dataserver.Calendar4" |
37 | 7 | #define QORGANIZER_DEV_PATH "@CMAKE_BINARY_DIR@" | ||
38 | 7 | 8 | ||
39 | 8 | #endif | 9 | #endif |
40 | 9 | 10 | ||
41 | === renamed directory 'qorganizer' => 'organizer' | |||
42 | === modified file 'organizer/qorganizer-eds-engine.cpp' | |||
43 | --- qorganizer/qorganizer-eds-engine.cpp 2014-05-08 16:45:14 +0000 | |||
44 | +++ organizer/qorganizer-eds-engine.cpp 2014-06-10 18:21:21 +0000 | |||
45 | @@ -90,17 +90,17 @@ | |||
46 | 90 | } | 90 | } |
47 | 91 | connect(d->m_sourceRegistry, SIGNAL(sourceAdded(QString)), SLOT(onSourceAdded(QString))); | 91 | connect(d->m_sourceRegistry, SIGNAL(sourceAdded(QString)), SLOT(onSourceAdded(QString))); |
48 | 92 | connect(d->m_sourceRegistry, SIGNAL(sourceRemoved(QString)), SLOT(onSourceRemoved(QString))); | 92 | connect(d->m_sourceRegistry, SIGNAL(sourceRemoved(QString)), SLOT(onSourceRemoved(QString))); |
49 | 93 | connect(d->m_sourceRegistry, SIGNAL(sourceUpdated(QString)), SLOT(onSourceUpdated(QString))); | ||
50 | 93 | d->m_sourceRegistry->load(); | 94 | d->m_sourceRegistry->load(); |
51 | 94 | } | 95 | } |
52 | 95 | 96 | ||
53 | 96 | QOrganizerEDSEngine::~QOrganizerEDSEngine() | 97 | QOrganizerEDSEngine::~QOrganizerEDSEngine() |
54 | 97 | { | 98 | { |
58 | 98 | QList<QOrganizerAbstractRequest*> reqs = m_runningRequests.keys(); | 99 | while(m_runningRequests.count()) { |
59 | 99 | Q_FOREACH(QOrganizerAbstractRequest *req, reqs) { | 100 | QOrganizerAbstractRequest *req = m_runningRequests.keys().first(); |
60 | 100 | req->cancel(); | 101 | QOrganizerEDSEngine::requestDestroyed(req); |
61 | 101 | } | 102 | } |
62 | 102 | 103 | ||
63 | 103 | Q_ASSERT(m_runningRequests.count() == 0); | ||
64 | 104 | d->m_sharedEngines.remove(this); | 104 | d->m_sharedEngines.remove(this); |
65 | 105 | if (!d->m_refCount.deref()) { | 105 | if (!d->m_refCount.deref()) { |
66 | 106 | delete d; | 106 | delete d; |
67 | @@ -811,9 +811,11 @@ | |||
68 | 811 | startRequest(req); | 811 | startRequest(req); |
69 | 812 | waitForRequestFinished(req, 0); | 812 | waitForRequestFinished(req, 0); |
70 | 813 | 813 | ||
72 | 814 | *error = req->error(); | 814 | if (error) { |
73 | 815 | *error = req->error(); | ||
74 | 816 | } | ||
75 | 815 | 817 | ||
77 | 816 | if (*error == QOrganizerManager::NoError) { | 818 | if (req->error() == QOrganizerManager::NoError) { |
78 | 817 | return req->collections(); | 819 | return req->collections(); |
79 | 818 | } else { | 820 | } else { |
80 | 819 | return QList<QOrganizerCollection>(); | 821 | return QList<QOrganizerCollection>(); |
81 | @@ -941,8 +943,11 @@ | |||
82 | 941 | startRequest(req); | 943 | startRequest(req); |
83 | 942 | waitForRequestFinished(req, 0); | 944 | waitForRequestFinished(req, 0); |
84 | 943 | 945 | ||
87 | 944 | *error = req->error(); | 946 | if (error) { |
88 | 945 | return(*error == QOrganizerManager::NoError); | 947 | *error = req->error(); |
89 | 948 | } | ||
90 | 949 | |||
91 | 950 | return(req->error() == QOrganizerManager::NoError); | ||
92 | 946 | } | 951 | } |
93 | 947 | 952 | ||
94 | 948 | void QOrganizerEDSEngine::removeCollectionAsync(QtOrganizer::QOrganizerCollectionRemoveRequest *req) | 953 | void QOrganizerEDSEngine::removeCollectionAsync(QtOrganizer::QOrganizerCollectionRemoveRequest *req) |
95 | @@ -1008,12 +1013,7 @@ | |||
96 | 1008 | 1013 | ||
97 | 1009 | void QOrganizerEDSEngine::releaseRequestData(RequestData *data) | 1014 | void QOrganizerEDSEngine::releaseRequestData(RequestData *data) |
98 | 1010 | { | 1015 | { |
105 | 1011 | if (data->cancelled()) { | 1016 | data->deleteLater(); |
100 | 1012 | // if request was cancelled data will be destroyed later | ||
101 | 1013 | data->continueCancel(); | ||
102 | 1014 | } else { | ||
103 | 1015 | delete data; | ||
104 | 1016 | } | ||
106 | 1017 | } | 1017 | } |
107 | 1018 | 1018 | ||
108 | 1019 | void QOrganizerEDSEngine::requestDestroyed(QOrganizerAbstractRequest* req) | 1019 | void QOrganizerEDSEngine::requestDestroyed(QOrganizerAbstractRequest* req) |
109 | @@ -1021,7 +1021,7 @@ | |||
110 | 1021 | RequestData *data = m_runningRequests.take(req); | 1021 | RequestData *data = m_runningRequests.take(req); |
111 | 1022 | if (data) { | 1022 | if (data) { |
112 | 1023 | data->cancel(); | 1023 | data->cancel(); |
114 | 1024 | delete data; | 1024 | data->deleteLater(); |
115 | 1025 | } | 1025 | } |
116 | 1026 | } | 1026 | } |
117 | 1027 | 1027 | ||
118 | @@ -1073,10 +1073,10 @@ | |||
119 | 1073 | 1073 | ||
120 | 1074 | bool QOrganizerEDSEngine::cancelRequest(QOrganizerAbstractRequest* req) | 1074 | bool QOrganizerEDSEngine::cancelRequest(QOrganizerAbstractRequest* req) |
121 | 1075 | { | 1075 | { |
123 | 1076 | RequestData *data = m_runningRequests.take(req); | 1076 | RequestData *data = m_runningRequests.value(req); |
124 | 1077 | if (data) { | 1077 | if (data) { |
125 | 1078 | data->cancel(); | 1078 | data->cancel(); |
127 | 1079 | delete data; | 1079 | data->deleteLater(); |
128 | 1080 | return true; | 1080 | return true; |
129 | 1081 | } | 1081 | } |
130 | 1082 | return false; | 1082 | return false; |
131 | @@ -1087,10 +1087,11 @@ | |||
132 | 1087 | Q_ASSERT(req); | 1087 | Q_ASSERT(req); |
133 | 1088 | Q_UNUSED(msecs); | 1088 | Q_UNUSED(msecs); |
134 | 1089 | 1089 | ||
139 | 1090 | QPointer<QOrganizerAbstractRequest> r(req); | 1090 | RequestData *data = m_runningRequests.value(req); |
140 | 1091 | 1091 | if (data) { | |
141 | 1092 | while(r && (r->state() == QOrganizerAbstractRequest::ActiveState)) { | 1092 | data->wait(); |
142 | 1093 | QCoreApplication::processEvents(); | 1093 | // We can delete the operation already finished |
143 | 1094 | data->deleteLater(); | ||
144 | 1094 | } | 1095 | } |
145 | 1095 | 1096 | ||
146 | 1096 | return true; | 1097 | return true; |
147 | @@ -1186,11 +1187,18 @@ | |||
148 | 1186 | void QOrganizerEDSEngine::onSourceAdded(const QString &collectionId) | 1187 | void QOrganizerEDSEngine::onSourceAdded(const QString &collectionId) |
149 | 1187 | { | 1188 | { |
150 | 1188 | d->watch(collectionId); | 1189 | d->watch(collectionId); |
151 | 1190 | Q_EMIT collectionsAdded(QList<QOrganizerCollectionId>() << QOrganizerCollectionId::fromString(collectionId)); | ||
152 | 1189 | } | 1191 | } |
153 | 1190 | 1192 | ||
154 | 1191 | void QOrganizerEDSEngine::onSourceRemoved(const QString &collectionId) | 1193 | void QOrganizerEDSEngine::onSourceRemoved(const QString &collectionId) |
155 | 1192 | { | 1194 | { |
156 | 1193 | d->unWatch(collectionId); | 1195 | d->unWatch(collectionId); |
157 | 1196 | Q_EMIT collectionsRemoved(QList<QOrganizerCollectionId>() << QOrganizerCollectionId::fromString(collectionId)); | ||
158 | 1197 | } | ||
159 | 1198 | |||
160 | 1199 | void QOrganizerEDSEngine::onSourceUpdated(const QString &collectionId) | ||
161 | 1200 | { | ||
162 | 1201 | Q_EMIT collectionsChanged(QList<QOrganizerCollectionId>() << QOrganizerCollectionId::fromString(collectionId)); | ||
163 | 1194 | } | 1202 | } |
164 | 1195 | 1203 | ||
165 | 1196 | void QOrganizerEDSEngine::onViewChanged(QOrganizerItemChangeSet *change) | 1204 | void QOrganizerEDSEngine::onViewChanged(QOrganizerItemChangeSet *change) |
166 | 1197 | 1205 | ||
167 | === modified file 'organizer/qorganizer-eds-engine.h' | |||
168 | --- qorganizer/qorganizer-eds-engine.h 2014-04-18 03:16:33 +0000 | |||
169 | +++ organizer/qorganizer-eds-engine.h 2014-06-10 18:21:21 +0000 | |||
170 | @@ -128,6 +128,7 @@ | |||
171 | 128 | protected Q_SLOTS: | 128 | protected Q_SLOTS: |
172 | 129 | void onSourceAdded(const QString &collectionId); | 129 | void onSourceAdded(const QString &collectionId); |
173 | 130 | void onSourceRemoved(const QString &collectionId); | 130 | void onSourceRemoved(const QString &collectionId); |
174 | 131 | void onSourceUpdated(const QString &collectionId); | ||
175 | 131 | void onViewChanged(QtOrganizer::QOrganizerItemChangeSet *change); | 132 | void onViewChanged(QtOrganizer::QOrganizerItemChangeSet *change); |
176 | 132 | 133 | ||
177 | 133 | protected: | 134 | protected: |
178 | @@ -247,5 +248,9 @@ | |||
179 | 247 | friend class FetchOcurrenceData; | 248 | friend class FetchOcurrenceData; |
180 | 248 | }; | 249 | }; |
181 | 249 | 250 | ||
182 | 251 | using namespace QtOrganizer; | ||
183 | 252 | Q_DECLARE_METATYPE(QList<QOrganizerCollectionId>) | ||
184 | 253 | Q_DECLARE_METATYPE(QList<QOrganizerItemId>) | ||
185 | 254 | |||
186 | 250 | #endif | 255 | #endif |
187 | 251 | 256 | ||
188 | 252 | 257 | ||
189 | === modified file 'organizer/qorganizer-eds-fetchbyidrequestdata.cpp' | |||
190 | --- qorganizer/qorganizer-eds-fetchbyidrequestdata.cpp 2013-12-03 20:01:45 +0000 | |||
191 | +++ organizer/qorganizer-eds-fetchbyidrequestdata.cpp 2014-06-10 18:21:21 +0000 | |||
192 | @@ -65,13 +65,15 @@ | |||
193 | 65 | return (m_current >= ids.count()); | 65 | return (m_current >= ids.count()); |
194 | 66 | } | 66 | } |
195 | 67 | 67 | ||
197 | 68 | void FetchByIdRequestData::finish(QOrganizerManager::Error error) | 68 | void FetchByIdRequestData::finish(QOrganizerManager::Error error, |
198 | 69 | QOrganizerAbstractRequest::State state) | ||
199 | 69 | { | 70 | { |
200 | 70 | QOrganizerManagerEngine::updateItemFetchByIdRequest(request<QOrganizerItemFetchByIdRequest>(), | 71 | QOrganizerManagerEngine::updateItemFetchByIdRequest(request<QOrganizerItemFetchByIdRequest>(), |
201 | 71 | m_results, | 72 | m_results, |
202 | 72 | error, | 73 | error, |
203 | 73 | m_errors, | 74 | m_errors, |
205 | 74 | QOrganizerAbstractRequest::FinishedState); | 75 | state); |
206 | 76 | RequestData::finish(error, state); | ||
207 | 75 | } | 77 | } |
208 | 76 | 78 | ||
209 | 77 | int FetchByIdRequestData::appendResult(const QOrganizerItem &result) | 79 | int FetchByIdRequestData::appendResult(const QOrganizerItem &result) |
210 | 78 | 80 | ||
211 | === modified file 'organizer/qorganizer-eds-fetchbyidrequestdata.h' | |||
212 | --- qorganizer/qorganizer-eds-fetchbyidrequestdata.h 2013-12-03 20:01:45 +0000 | |||
213 | +++ organizer/qorganizer-eds-fetchbyidrequestdata.h 2014-06-10 18:21:21 +0000 | |||
214 | @@ -34,7 +34,8 @@ | |||
215 | 34 | QString currentCollectionId() const; | 34 | QString currentCollectionId() const; |
216 | 35 | bool end() const; | 35 | bool end() const; |
217 | 36 | 36 | ||
219 | 37 | void finish(QtOrganizer::QOrganizerManager::Error error = QtOrganizer::QOrganizerManager::NoError); | 37 | void finish(QtOrganizer::QOrganizerManager::Error error = QtOrganizer::QOrganizerManager::NoError, |
220 | 38 | QtOrganizer::QOrganizerAbstractRequest::State state = QtOrganizer::QOrganizerAbstractRequest::FinishedState); | ||
221 | 38 | int appendResult(const QtOrganizer::QOrganizerItem &result); | 39 | int appendResult(const QtOrganizer::QOrganizerItem &result); |
222 | 39 | 40 | ||
223 | 40 | private: | 41 | private: |
224 | 41 | 42 | ||
225 | === modified file 'organizer/qorganizer-eds-fetchocurrencedata.cpp' | |||
226 | --- qorganizer/qorganizer-eds-fetchocurrencedata.cpp 2014-02-25 18:43:06 +0000 | |||
227 | +++ organizer/qorganizer-eds-fetchocurrencedata.cpp 2014-06-10 18:21:21 +0000 | |||
228 | @@ -62,7 +62,8 @@ | |||
229 | 62 | return endDate.toTime_t(); | 62 | return endDate.toTime_t(); |
230 | 63 | } | 63 | } |
231 | 64 | 64 | ||
233 | 65 | void FetchOcurrenceData::finish(QOrganizerManager::Error error) | 65 | void FetchOcurrenceData::finish(QOrganizerManager::Error error, |
234 | 66 | QtOrganizer::QOrganizerAbstractRequest::State state) | ||
235 | 66 | { | 67 | { |
236 | 67 | QList<QtOrganizer::QOrganizerItem> results; | 68 | QList<QtOrganizer::QOrganizerItem> results; |
237 | 68 | 69 | ||
238 | @@ -76,7 +77,9 @@ | |||
239 | 76 | QOrganizerManagerEngine::updateItemOccurrenceFetchRequest(request<QOrganizerItemOccurrenceFetchRequest>(), | 77 | QOrganizerManagerEngine::updateItemOccurrenceFetchRequest(request<QOrganizerItemOccurrenceFetchRequest>(), |
240 | 77 | results, | 78 | results, |
241 | 78 | error, | 79 | error, |
243 | 79 | QOrganizerAbstractRequest::FinishedState); | 80 | state); |
244 | 81 | |||
245 | 82 | RequestData::finish(error, state); | ||
246 | 80 | } | 83 | } |
247 | 81 | 84 | ||
248 | 82 | void FetchOcurrenceData::appendResult(icalcomponent *comp) | 85 | void FetchOcurrenceData::appendResult(icalcomponent *comp) |
249 | 83 | 86 | ||
250 | === modified file 'organizer/qorganizer-eds-fetchocurrencedata.h' | |||
251 | --- qorganizer/qorganizer-eds-fetchocurrencedata.h 2014-02-25 18:43:06 +0000 | |||
252 | +++ organizer/qorganizer-eds-fetchocurrencedata.h 2014-06-10 18:21:21 +0000 | |||
253 | @@ -32,7 +32,8 @@ | |||
254 | 32 | time_t startDate() const; | 32 | time_t startDate() const; |
255 | 33 | time_t endDate() const; | 33 | time_t endDate() const; |
256 | 34 | 34 | ||
258 | 35 | void finish(QtOrganizer::QOrganizerManager::Error error = QtOrganizer::QOrganizerManager::NoError); | 35 | void finish(QtOrganizer::QOrganizerManager::Error error = QtOrganizer::QOrganizerManager::NoError, |
259 | 36 | QtOrganizer::QOrganizerAbstractRequest::State state = QtOrganizer::QOrganizerAbstractRequest::FinishedState); | ||
260 | 36 | void appendResult(icalcomponent *comp); | 37 | void appendResult(icalcomponent *comp); |
261 | 37 | 38 | ||
262 | 38 | private: | 39 | private: |
263 | 39 | 40 | ||
264 | === modified file 'organizer/qorganizer-eds-fetchrequestdata.cpp' | |||
265 | --- qorganizer/qorganizer-eds-fetchrequestdata.cpp 2014-04-14 18:43:25 +0000 | |||
266 | +++ organizer/qorganizer-eds-fetchrequestdata.cpp 2014-06-10 18:21:21 +0000 | |||
267 | @@ -97,13 +97,15 @@ | |||
268 | 97 | return (endDate.isValid() && startDate.isValid()); | 97 | return (endDate.isValid() && startDate.isValid()); |
269 | 98 | } | 98 | } |
270 | 99 | 99 | ||
272 | 100 | void FetchRequestData::finish(QOrganizerManager::Error error) | 100 | void FetchRequestData::finish(QOrganizerManager::Error error, |
273 | 101 | QOrganizerAbstractRequest::State state) | ||
274 | 101 | { | 102 | { |
275 | 102 | QOrganizerManagerEngine::updateItemFetchRequest(request<QOrganizerItemFetchRequest>(), | 103 | QOrganizerManagerEngine::updateItemFetchRequest(request<QOrganizerItemFetchRequest>(), |
276 | 103 | m_results, | 104 | m_results, |
277 | 104 | error, | 105 | error, |
279 | 105 | QOrganizerAbstractRequest::FinishedState); | 106 | state); |
280 | 106 | // TODO: emit changeset??? | 107 | // TODO: emit changeset??? |
281 | 108 | RequestData::finish(error, state); | ||
282 | 107 | } | 109 | } |
283 | 108 | 110 | ||
284 | 109 | void FetchRequestData::appendResult(icalcomponent *comp) | 111 | void FetchRequestData::appendResult(icalcomponent *comp) |
285 | @@ -117,7 +119,7 @@ | |||
286 | 117 | QOrganizerItemFetchRequest *req = request<QOrganizerItemFetchRequest>(); | 119 | QOrganizerItemFetchRequest *req = request<QOrganizerItemFetchRequest>(); |
287 | 118 | Q_FOREACH(const QOrganizerItem &item, results) { | 120 | Q_FOREACH(const QOrganizerItem &item, results) { |
288 | 119 | if (QOrganizerManagerEngine::testFilter(req->filter(), item)) { | 121 | if (QOrganizerManagerEngine::testFilter(req->filter(), item)) { |
290 | 120 | m_results << item; | 122 | QOrganizerManagerEngine::addSorted(&m_results, item, req->sorting()); |
291 | 121 | count++; | 123 | count++; |
292 | 122 | } | 124 | } |
293 | 123 | } | 125 | } |
294 | 124 | 126 | ||
295 | === modified file 'organizer/qorganizer-eds-fetchrequestdata.h' | |||
296 | --- qorganizer/qorganizer-eds-fetchrequestdata.h 2014-02-25 17:12:32 +0000 | |||
297 | +++ organizer/qorganizer-eds-fetchrequestdata.h 2014-06-10 18:21:21 +0000 | |||
298 | @@ -36,7 +36,8 @@ | |||
299 | 36 | time_t endDate() const; | 36 | time_t endDate() const; |
300 | 37 | bool hasDateInterval() const; | 37 | bool hasDateInterval() const; |
301 | 38 | 38 | ||
303 | 39 | void finish(QtOrganizer::QOrganizerManager::Error error = QtOrganizer::QOrganizerManager::NoError); | 39 | void finish(QtOrganizer::QOrganizerManager::Error error = QtOrganizer::QOrganizerManager::NoError, |
304 | 40 | QtOrganizer::QOrganizerAbstractRequest::State state = QtOrganizer::QOrganizerAbstractRequest::FinishedState); | ||
305 | 40 | void appendResult(icalcomponent *comp); | 41 | void appendResult(icalcomponent *comp); |
306 | 41 | int appendResults(QList<QtOrganizer::QOrganizerItem> results); | 42 | int appendResults(QList<QtOrganizer::QOrganizerItem> results); |
307 | 42 | QString dateFilter(); | 43 | QString dateFilter(); |
308 | 43 | 44 | ||
309 | === modified file 'organizer/qorganizer-eds-removebyidrequestdata.cpp' | |||
310 | --- qorganizer/qorganizer-eds-removebyidrequestdata.cpp 2014-04-18 03:16:33 +0000 | |||
311 | +++ organizer/qorganizer-eds-removebyidrequestdata.cpp 2014-06-10 18:21:21 +0000 | |||
312 | @@ -46,15 +46,18 @@ | |||
313 | 46 | { | 46 | { |
314 | 47 | } | 47 | } |
315 | 48 | 48 | ||
317 | 49 | void RemoveByIdRequestData::finish(QtOrganizer::QOrganizerManager::Error error) | 49 | void RemoveByIdRequestData::finish(QtOrganizer::QOrganizerManager::Error error, |
318 | 50 | QtOrganizer::QOrganizerAbstractRequest::State state) | ||
319 | 50 | { | 51 | { |
320 | 51 | e_client_refresh_sync(m_client, 0, 0); | 52 | e_client_refresh_sync(m_client, 0, 0); |
321 | 52 | QOrganizerManagerEngine::updateItemRemoveByIdRequest(request<QOrganizerItemRemoveByIdRequest>(), | 53 | QOrganizerManagerEngine::updateItemRemoveByIdRequest(request<QOrganizerItemRemoveByIdRequest>(), |
322 | 53 | error, | 54 | error, |
323 | 54 | QMap<int, QOrganizerManager::Error>(), | 55 | QMap<int, QOrganizerManager::Error>(), |
325 | 55 | QOrganizerAbstractRequest::FinishedState); | 56 | state); |
326 | 56 | //The signal will be fired by the view watcher. Check ViewWatcher::onObjectsRemoved | 57 | //The signal will be fired by the view watcher. Check ViewWatcher::onObjectsRemoved |
327 | 57 | //emitChangeset(&m_changeSet); | 58 | //emitChangeset(&m_changeSet); |
328 | 59 | |||
329 | 60 | RequestData::finish(error, state); | ||
330 | 58 | } | 61 | } |
331 | 59 | 62 | ||
332 | 60 | GSList *RemoveByIdRequestData::compIds() const | 63 | GSList *RemoveByIdRequestData::compIds() const |
333 | 61 | 64 | ||
334 | === modified file 'organizer/qorganizer-eds-removebyidrequestdata.h' | |||
335 | --- qorganizer/qorganizer-eds-removebyidrequestdata.h 2014-01-05 18:18:32 +0000 | |||
336 | +++ organizer/qorganizer-eds-removebyidrequestdata.h 2014-06-10 18:21:21 +0000 | |||
337 | @@ -31,7 +31,8 @@ | |||
338 | 31 | 31 | ||
339 | 32 | QString collectionId() const; | 32 | QString collectionId() const; |
340 | 33 | 33 | ||
342 | 34 | void finish(QtOrganizer::QOrganizerManager::Error error = QtOrganizer::QOrganizerManager::NoError); | 34 | void finish(QtOrganizer::QOrganizerManager::Error error = QtOrganizer::QOrganizerManager::NoError, |
343 | 35 | QtOrganizer::QOrganizerAbstractRequest::State state = QtOrganizer::QOrganizerAbstractRequest::FinishedState); | ||
344 | 35 | 36 | ||
345 | 36 | GSList *compIds() const; | 37 | GSList *compIds() const; |
346 | 37 | 38 | ||
347 | 38 | 39 | ||
348 | === modified file 'organizer/qorganizer-eds-removecollectionrequestdata.cpp' | |||
349 | --- qorganizer/qorganizer-eds-removecollectionrequestdata.cpp 2013-12-03 01:23:34 +0000 | |||
350 | +++ organizer/qorganizer-eds-removecollectionrequestdata.cpp 2014-06-10 18:21:21 +0000 | |||
351 | @@ -39,21 +39,16 @@ | |||
352 | 39 | { | 39 | { |
353 | 40 | } | 40 | } |
354 | 41 | 41 | ||
356 | 42 | void RemoveCollectionRequestData::finish(QtOrganizer::QOrganizerManager::Error error) | 42 | void RemoveCollectionRequestData::finish(QOrganizerManager::Error error, |
357 | 43 | QOrganizerAbstractRequest::State state) | ||
358 | 43 | { | 44 | { |
359 | 44 | QOrganizerManagerEngine::updateCollectionRemoveRequest(request<QOrganizerCollectionRemoveRequest>(), | 45 | QOrganizerManagerEngine::updateCollectionRemoveRequest(request<QOrganizerCollectionRemoveRequest>(), |
360 | 45 | error, | 46 | error, |
361 | 46 | m_errorMap, | 47 | m_errorMap, |
372 | 47 | QOrganizerAbstractRequest::FinishedState); | 48 | state); |
373 | 48 | 49 | ||
374 | 49 | QList<QOrganizerCollectionId> removedIds = m_pendingCollections; | 50 | // changes will be fired by source-registry |
375 | 50 | Q_FOREACH(int index, m_errorMap.keys()) { | 51 | RequestData::finish(error, state); |
366 | 51 | removedIds.removeAt(index); | ||
367 | 52 | } | ||
368 | 53 | |||
369 | 54 | QOrganizerCollectionChangeSet cs; | ||
370 | 55 | cs.insertRemovedCollections(removedIds); | ||
371 | 56 | emitChangeset(&cs); | ||
376 | 57 | } | 52 | } |
377 | 58 | 53 | ||
378 | 59 | void RemoveCollectionRequestData::commit(QtOrganizer::QOrganizerManager::Error error) | 54 | void RemoveCollectionRequestData::commit(QtOrganizer::QOrganizerManager::Error error) |
379 | 60 | 55 | ||
380 | === modified file 'organizer/qorganizer-eds-removecollectionrequestdata.h' | |||
381 | --- qorganizer/qorganizer-eds-removecollectionrequestdata.h 2013-12-03 01:23:34 +0000 | |||
382 | +++ organizer/qorganizer-eds-removecollectionrequestdata.h 2014-06-10 18:21:21 +0000 | |||
383 | @@ -29,7 +29,8 @@ | |||
384 | 29 | RemoveCollectionRequestData(QOrganizerEDSEngine *engine, QtOrganizer::QOrganizerAbstractRequest *req); | 29 | RemoveCollectionRequestData(QOrganizerEDSEngine *engine, QtOrganizer::QOrganizerAbstractRequest *req); |
385 | 30 | ~RemoveCollectionRequestData(); | 30 | ~RemoveCollectionRequestData(); |
386 | 31 | 31 | ||
388 | 32 | void finish(QtOrganizer::QOrganizerManager::Error error = QtOrganizer::QOrganizerManager::NoError); | 32 | void finish(QtOrganizer::QOrganizerManager::Error error = QtOrganizer::QOrganizerManager::NoError, |
389 | 33 | QtOrganizer::QOrganizerAbstractRequest::State state = QtOrganizer::QOrganizerAbstractRequest::FinishedState); | ||
390 | 33 | 34 | ||
391 | 34 | ESource* begin(); | 35 | ESource* begin(); |
392 | 35 | void commit(QtOrganizer::QOrganizerManager::Error error = QtOrganizer::QOrganizerManager::NoError); | 36 | void commit(QtOrganizer::QOrganizerManager::Error error = QtOrganizer::QOrganizerManager::NoError); |
393 | 36 | 37 | ||
394 | === modified file 'organizer/qorganizer-eds-removerequestdata.cpp' | |||
395 | --- qorganizer/qorganizer-eds-removerequestdata.cpp 2014-04-18 03:16:33 +0000 | |||
396 | +++ organizer/qorganizer-eds-removerequestdata.cpp 2014-06-10 18:21:21 +0000 | |||
397 | @@ -65,16 +65,18 @@ | |||
398 | 65 | return ids; | 65 | return ids; |
399 | 66 | } | 66 | } |
400 | 67 | 67 | ||
402 | 68 | void RemoveRequestData::finish(QtOrganizer::QOrganizerManager::Error error) | 68 | void RemoveRequestData::finish(QOrganizerManager::Error error, |
403 | 69 | QOrganizerAbstractRequest::State state) | ||
404 | 69 | { | 70 | { |
405 | 70 | e_client_refresh_sync(m_client, 0, 0); | 71 | e_client_refresh_sync(m_client, 0, 0); |
406 | 71 | QOrganizerManagerEngine::updateItemRemoveRequest(request<QOrganizerItemRemoveRequest>(), | 72 | QOrganizerManagerEngine::updateItemRemoveRequest(request<QOrganizerItemRemoveRequest>(), |
407 | 72 | error, | 73 | error, |
408 | 73 | QMap<int, QOrganizerManager::Error>(), | 74 | QMap<int, QOrganizerManager::Error>(), |
410 | 74 | QOrganizerAbstractRequest::FinishedState); | 75 | state); |
411 | 75 | 76 | ||
412 | 76 | //The signal will be fired by the view watcher. Check ViewWatcher::onObjectsRemoved | 77 | //The signal will be fired by the view watcher. Check ViewWatcher::onObjectsRemoved |
413 | 77 | //emitChangeset(&m_changeSet); | 78 | //emitChangeset(&m_changeSet); |
414 | 79 | RequestData::finish(error, state); | ||
415 | 78 | } | 80 | } |
416 | 79 | 81 | ||
417 | 80 | GSList *RemoveRequestData::compIds() const | 82 | GSList *RemoveRequestData::compIds() const |
418 | 81 | 83 | ||
419 | === modified file 'organizer/qorganizer-eds-removerequestdata.h' | |||
420 | --- qorganizer/qorganizer-eds-removerequestdata.h 2013-12-31 15:42:33 +0000 | |||
421 | +++ organizer/qorganizer-eds-removerequestdata.h 2014-06-10 18:21:21 +0000 | |||
422 | @@ -32,7 +32,8 @@ | |||
423 | 32 | QList<QtOrganizer::QOrganizerCollectionId> pendingCollections() const; | 32 | QList<QtOrganizer::QOrganizerCollectionId> pendingCollections() const; |
424 | 33 | QtOrganizer::QOrganizerCollectionId collectionId() const; | 33 | QtOrganizer::QOrganizerCollectionId collectionId() const; |
425 | 34 | 34 | ||
427 | 35 | void finish(QtOrganizer::QOrganizerManager::Error error = QtOrganizer::QOrganizerManager::NoError); | 35 | void finish(QtOrganizer::QOrganizerManager::Error error = QtOrganizer::QOrganizerManager::NoError, |
428 | 36 | QtOrganizer::QOrganizerAbstractRequest::State state = QtOrganizer::QOrganizerAbstractRequest::FinishedState); | ||
429 | 36 | 37 | ||
430 | 37 | GSList *compIds() const; | 38 | GSList *compIds() const; |
431 | 38 | 39 | ||
432 | 39 | 40 | ||
433 | === modified file 'organizer/qorganizer-eds-requestdata.cpp' | |||
434 | --- qorganizer/qorganizer-eds-requestdata.cpp 2014-04-18 20:30:59 +0000 | |||
435 | +++ organizer/qorganizer-eds-requestdata.cpp 2014-06-10 18:21:21 +0000 | |||
436 | @@ -18,6 +18,9 @@ | |||
437 | 18 | 18 | ||
438 | 19 | #include "qorganizer-eds-requestdata.h" | 19 | #include "qorganizer-eds-requestdata.h" |
439 | 20 | 20 | ||
440 | 21 | #include <QtCore/QDebug> | ||
441 | 22 | #include <QtCore/QCoreApplication> | ||
442 | 23 | |||
443 | 21 | #include <QtOrganizer/QOrganizerAbstractRequest> | 24 | #include <QtOrganizer/QOrganizerAbstractRequest> |
444 | 22 | #include <QtOrganizer/QOrganizerManagerEngine> | 25 | #include <QtOrganizer/QOrganizerManagerEngine> |
445 | 23 | 26 | ||
446 | @@ -25,9 +28,9 @@ | |||
447 | 25 | 28 | ||
448 | 26 | RequestData::RequestData(QOrganizerEDSEngine *engine, QtOrganizer::QOrganizerAbstractRequest *req) | 29 | RequestData::RequestData(QOrganizerEDSEngine *engine, QtOrganizer::QOrganizerAbstractRequest *req) |
449 | 27 | : m_parent(engine), | 30 | : m_parent(engine), |
450 | 28 | m_req(req), | ||
451 | 29 | m_client(0), | 31 | m_client(0), |
453 | 30 | m_canceling(false) | 32 | m_finished(false), |
454 | 33 | m_req(req) | ||
455 | 31 | { | 34 | { |
456 | 32 | QOrganizerManagerEngine::updateRequestState(req, QOrganizerAbstractRequest::ActiveState); | 35 | QOrganizerManagerEngine::updateRequestState(req, QOrganizerAbstractRequest::ActiveState); |
457 | 33 | m_cancellable = g_cancellable_new(); | 36 | m_cancellable = g_cancellable_new(); |
458 | @@ -36,7 +39,6 @@ | |||
459 | 36 | 39 | ||
460 | 37 | RequestData::~RequestData() | 40 | RequestData::~RequestData() |
461 | 38 | { | 41 | { |
462 | 39 | Q_ASSERT(m_req->state() != QOrganizerAbstractRequest::ActiveState); | ||
463 | 40 | if (m_cancellable) { | 42 | if (m_cancellable) { |
464 | 41 | g_clear_object(&m_cancellable); | 43 | g_clear_object(&m_cancellable); |
465 | 42 | } | 44 | } |
466 | @@ -44,14 +46,10 @@ | |||
467 | 44 | if (m_client) { | 46 | if (m_client) { |
468 | 45 | g_clear_object(&m_client); | 47 | g_clear_object(&m_client); |
469 | 46 | } | 48 | } |
470 | 47 | |||
471 | 48 | m_parent->m_runningRequests.remove(m_req); | ||
472 | 49 | } | 49 | } |
473 | 50 | 50 | ||
474 | 51 | GCancellable* RequestData::cancellable() const | 51 | GCancellable* RequestData::cancellable() const |
475 | 52 | { | 52 | { |
476 | 53 | g_cancellable_reset(m_cancellable); | ||
477 | 54 | //g_object_ref(m_cancellable); | ||
478 | 55 | return m_cancellable; | 53 | return m_cancellable; |
479 | 56 | } | 54 | } |
480 | 57 | 55 | ||
481 | @@ -73,26 +71,74 @@ | |||
482 | 73 | 71 | ||
483 | 74 | void RequestData::cancel() | 72 | void RequestData::cancel() |
484 | 75 | { | 73 | { |
486 | 76 | m_canceling = true; | 74 | QMutexLocker locker(&m_canceling); |
487 | 77 | if (m_cancellable) { | 75 | if (m_cancellable) { |
488 | 76 | gulong id = g_cancellable_connect(m_cancellable, | ||
489 | 77 | (GCallback) RequestData::onCancelled, | ||
490 | 78 | this, NULL); | ||
491 | 79 | // wait the cancel | ||
492 | 80 | wait(); | ||
493 | 81 | |||
494 | 82 | // cancel | ||
495 | 78 | g_cancellable_cancel(m_cancellable); | 83 | g_cancellable_cancel(m_cancellable); |
497 | 79 | m_parent->waitForRequestFinished(m_req, 0); | 84 | |
498 | 85 | // done | ||
499 | 86 | g_cancellable_disconnect(m_cancellable, id); | ||
500 | 80 | m_cancellable = 0; | 87 | m_cancellable = 0; |
501 | 81 | } | 88 | } |
516 | 82 | m_canceling = false; | 89 | } |
517 | 83 | } | 90 | |
518 | 84 | 91 | void RequestData::wait() | |
519 | 85 | bool RequestData::cancelled() const | 92 | { |
520 | 86 | { | 93 | QMutexLocker locker(&m_waiting); |
521 | 87 | if (!m_req.isNull()) { | 94 | while(!m_finished) { |
522 | 88 | return m_canceling; | 95 | QCoreApplication::processEvents(QEventLoop::AllEvents, 100); |
523 | 89 | } | 96 | } |
524 | 90 | return false; | 97 | } |
525 | 91 | } | 98 | |
526 | 92 | 99 | bool RequestData::isWaiting() | |
527 | 93 | void RequestData::continueCancel() | 100 | { |
528 | 94 | { | 101 | bool result = true; |
529 | 95 | QOrganizerManagerEngine::updateRequestState(m_req, QOrganizerAbstractRequest::CanceledState); | 102 | if (m_waiting.tryLock()) { |
530 | 103 | result = false; | ||
531 | 104 | m_waiting.unlock(); | ||
532 | 105 | } | ||
533 | 106 | return result; | ||
534 | 107 | } | ||
535 | 108 | |||
536 | 109 | bool RequestData::isCanceling() | ||
537 | 110 | { | ||
538 | 111 | bool result = true; | ||
539 | 112 | if (m_canceling.tryLock()) { | ||
540 | 113 | result = false; | ||
541 | 114 | m_canceling.unlock(); | ||
542 | 115 | } | ||
543 | 116 | return result; | ||
544 | 117 | } | ||
545 | 118 | |||
546 | 119 | void RequestData::deleteLater() | ||
547 | 120 | { | ||
548 | 121 | if (isWaiting() || isCanceling()) { | ||
549 | 122 | // still running | ||
550 | 123 | return; | ||
551 | 124 | } | ||
552 | 125 | m_parent->m_runningRequests.remove(m_req); | ||
553 | 126 | delete this; | ||
554 | 127 | } | ||
555 | 128 | |||
556 | 129 | void RequestData::finish(QOrganizerManager::Error error, QtOrganizer::QOrganizerAbstractRequest::State state) | ||
557 | 130 | { | ||
558 | 131 | Q_UNUSED(error); | ||
559 | 132 | Q_UNUSED(state); | ||
560 | 133 | m_finished = true; | ||
561 | 134 | } | ||
562 | 135 | |||
563 | 136 | void RequestData::onCancelled(GCancellable *cancellable, RequestData *self) | ||
564 | 137 | { | ||
565 | 138 | Q_UNUSED(cancellable); | ||
566 | 139 | if (self->m_req) { | ||
567 | 140 | self->finish(QOrganizerManager::UnspecifiedError, QOrganizerAbstractRequest::CanceledState); | ||
568 | 141 | } | ||
569 | 96 | } | 142 | } |
570 | 97 | 143 | ||
571 | 98 | void RequestData::setClient(EClient *client) | 144 | void RequestData::setClient(EClient *client) |
572 | 99 | 145 | ||
573 | === modified file 'organizer/qorganizer-eds-requestdata.h' | |||
574 | --- qorganizer/qorganizer-eds-requestdata.h 2014-04-18 19:55:27 +0000 | |||
575 | +++ organizer/qorganizer-eds-requestdata.h 2014-06-10 18:21:21 +0000 | |||
576 | @@ -24,6 +24,7 @@ | |||
577 | 24 | 24 | ||
578 | 25 | #include <QtCore/QPointer> | 25 | #include <QtCore/QPointer> |
579 | 26 | #include <QtCore/QMutex> | 26 | #include <QtCore/QMutex> |
580 | 27 | #include <QtCore/QEventLoop> | ||
581 | 27 | 28 | ||
582 | 28 | #include <QtOrganizer/QOrganizerAbstractRequest> | 29 | #include <QtOrganizer/QOrganizerAbstractRequest> |
583 | 29 | #include <QtOrganizer/QOrganizerManager> | 30 | #include <QtOrganizer/QOrganizerManager> |
584 | @@ -33,16 +34,17 @@ | |||
585 | 33 | { | 34 | { |
586 | 34 | public: | 35 | public: |
587 | 35 | RequestData(QOrganizerEDSEngine *engine, QtOrganizer::QOrganizerAbstractRequest *req); | 36 | RequestData(QOrganizerEDSEngine *engine, QtOrganizer::QOrganizerAbstractRequest *req); |
588 | 36 | virtual ~RequestData(); | ||
589 | 37 | GCancellable* cancellable() const; | 37 | GCancellable* cancellable() const; |
590 | 38 | bool isLive() const; | 38 | bool isLive() const; |
591 | 39 | void setClient(EClient *client); | 39 | void setClient(EClient *client); |
592 | 40 | ECalClient *client() const; | 40 | ECalClient *client() const; |
593 | 41 | virtual void finish(QtOrganizer::QOrganizerManager::Error error = QtOrganizer::QOrganizerManager::NoError) = 0; | ||
594 | 42 | QOrganizerEDSEngine *parent() const; | 41 | QOrganizerEDSEngine *parent() const; |
595 | 43 | virtual void cancel(); | 42 | virtual void cancel(); |
598 | 44 | bool cancelled() const; | 43 | void deleteLater(); |
599 | 45 | void continueCancel(); | 44 | virtual void finish(QtOrganizer::QOrganizerManager::Error error, QtOrganizer::QOrganizerAbstractRequest::State state) = 0; |
600 | 45 | void wait(); | ||
601 | 46 | bool isWaiting(); | ||
602 | 47 | bool isCanceling(); | ||
603 | 46 | 48 | ||
604 | 47 | template<class T> | 49 | template<class T> |
605 | 48 | T* request() const { | 50 | T* request() const { |
606 | @@ -56,13 +58,19 @@ | |||
607 | 56 | 58 | ||
608 | 57 | protected: | 59 | protected: |
609 | 58 | QOrganizerEDSEngine *m_parent; | 60 | QOrganizerEDSEngine *m_parent; |
610 | 61 | EClient *m_client; | ||
611 | 59 | QtOrganizer::QOrganizerItemChangeSet m_changeSet; | 62 | QtOrganizer::QOrganizerItemChangeSet m_changeSet; |
614 | 60 | EClient *m_client; | 63 | QMutex m_waiting; |
615 | 61 | bool m_canceling; | 64 | QMutex m_canceling; |
616 | 65 | bool m_finished; | ||
617 | 66 | |||
618 | 67 | virtual ~RequestData(); | ||
619 | 62 | 68 | ||
620 | 63 | private: | 69 | private: |
621 | 64 | QPointer<QtOrganizer::QOrganizerAbstractRequest> m_req; | 70 | QPointer<QtOrganizer::QOrganizerAbstractRequest> m_req; |
622 | 65 | GCancellable *m_cancellable; | 71 | GCancellable *m_cancellable; |
623 | 72 | |||
624 | 73 | static void onCancelled(GCancellable *cancellable, RequestData *self); | ||
625 | 66 | }; | 74 | }; |
626 | 67 | 75 | ||
627 | 68 | #endif | 76 | #endif |
628 | 69 | 77 | ||
629 | === modified file 'organizer/qorganizer-eds-savecollectionrequestdata.cpp' | |||
630 | --- qorganizer/qorganizer-eds-savecollectionrequestdata.cpp 2014-03-21 18:04:50 +0000 | |||
631 | +++ organizer/qorganizer-eds-savecollectionrequestdata.cpp 2014-06-10 18:21:21 +0000 | |||
632 | @@ -50,16 +50,20 @@ | |||
633 | 50 | } | 50 | } |
634 | 51 | } | 51 | } |
635 | 52 | 52 | ||
637 | 53 | void SaveCollectionRequestData::finish(QtOrganizer::QOrganizerManager::Error error) | 53 | void SaveCollectionRequestData::finish(QtOrganizer::QOrganizerManager::Error error, |
638 | 54 | QtOrganizer::QOrganizerAbstractRequest::State state) | ||
639 | 54 | { | 55 | { |
640 | 55 | QOrganizerManagerEngine::updateCollectionSaveRequest(request<QOrganizerCollectionSaveRequest>(), | 56 | QOrganizerManagerEngine::updateCollectionSaveRequest(request<QOrganizerCollectionSaveRequest>(), |
641 | 56 | m_results.values(), | 57 | m_results.values(), |
642 | 57 | error, | 58 | error, |
643 | 58 | m_errorMap, | 59 | m_errorMap, |
647 | 59 | QOrganizerAbstractRequest::FinishedState); | 60 | state); |
648 | 60 | 61 | ||
649 | 61 | emitChangeset(&m_changeSet); | 62 | |
650 | 63 | // changes will be fired by source-registry | ||
651 | 62 | m_changeSet.clearAll(); | 64 | m_changeSet.clearAll(); |
652 | 65 | |||
653 | 66 | RequestData::finish(error, state); | ||
654 | 63 | } | 67 | } |
655 | 64 | 68 | ||
656 | 65 | void SaveCollectionRequestData::commitSourceCreated() | 69 | void SaveCollectionRequestData::commitSourceCreated() |
657 | @@ -181,11 +185,11 @@ | |||
658 | 181 | 185 | ||
659 | 182 | // update name | 186 | // update name |
660 | 183 | QString name = collection.metaData(QOrganizerCollection::KeyName).toString(); | 187 | QString name = collection.metaData(QOrganizerCollection::KeyName).toString(); |
662 | 184 | e_source_set_display_name(source, name.toUtf8().data()); | 188 | e_source_set_display_name(source, name.toUtf8().constData()); |
663 | 185 | 189 | ||
664 | 186 | // update color | 190 | // update color |
665 | 187 | QString color = collection.metaData(QOrganizerCollection::KeyColor).toString(); | 191 | QString color = collection.metaData(QOrganizerCollection::KeyColor).toString(); |
667 | 188 | e_source_selectable_set_color(E_SOURCE_SELECTABLE(extCalendar), color.toUtf8().data()); | 192 | e_source_selectable_set_color(E_SOURCE_SELECTABLE(extCalendar), color.toUtf8().constData()); |
668 | 189 | 193 | ||
669 | 190 | // update selected | 194 | // update selected |
670 | 191 | bool selected = collection.extendedMetaData(COLLECTION_SELECTED_METADATA).toBool(); | 195 | bool selected = collection.extendedMetaData(COLLECTION_SELECTED_METADATA).toBool(); |
671 | 192 | 196 | ||
672 | === modified file 'organizer/qorganizer-eds-savecollectionrequestdata.h' | |||
673 | --- qorganizer/qorganizer-eds-savecollectionrequestdata.h 2014-03-21 18:04:50 +0000 | |||
674 | +++ organizer/qorganizer-eds-savecollectionrequestdata.h 2014-06-10 18:21:21 +0000 | |||
675 | @@ -28,7 +28,8 @@ | |||
676 | 28 | QtOrganizer::QOrganizerAbstractRequest *req); | 28 | QtOrganizer::QOrganizerAbstractRequest *req); |
677 | 29 | ~SaveCollectionRequestData(); | 29 | ~SaveCollectionRequestData(); |
678 | 30 | 30 | ||
680 | 31 | void finish(QtOrganizer::QOrganizerManager::Error error = QtOrganizer::QOrganizerManager::NoError); | 31 | void finish(QtOrganizer::QOrganizerManager::Error error = QtOrganizer::QOrganizerManager::NoError, |
681 | 32 | QtOrganizer::QOrganizerAbstractRequest::State state = QtOrganizer::QOrganizerAbstractRequest::FinishedState); | ||
682 | 32 | bool isNew(int index) const; | 33 | bool isNew(int index) const; |
683 | 33 | bool prepareToCreate(); | 34 | bool prepareToCreate(); |
684 | 34 | bool prepareToUpdate(); | 35 | bool prepareToUpdate(); |
685 | @@ -46,7 +47,7 @@ | |||
686 | 46 | 47 | ||
687 | 47 | QMap<int, QtOrganizer::QOrganizerManager::Error> m_errorMap; | 48 | QMap<int, QtOrganizer::QOrganizerManager::Error> m_errorMap; |
688 | 48 | QMap<int, QtOrganizer::QOrganizerCollection> m_results; | 49 | QMap<int, QtOrganizer::QOrganizerCollection> m_results; |
690 | 49 | QMap<int, ESource*> m_sources; | 50 | QMap<int, ESource*> m_sources; |
691 | 50 | QMap<int, ESource*> m_sourcesToCreate; | 51 | QMap<int, ESource*> m_sourcesToCreate; |
692 | 51 | QMap<int, ESource*> m_sourcesToUpdate; | 52 | QMap<int, ESource*> m_sourcesToUpdate; |
693 | 52 | QtOrganizer::QOrganizerCollectionChangeSet m_changeSet; | 53 | QtOrganizer::QOrganizerCollectionChangeSet m_changeSet; |
694 | 53 | 54 | ||
695 | === modified file 'organizer/qorganizer-eds-saverequestdata.cpp' | |||
696 | --- qorganizer/qorganizer-eds-saverequestdata.cpp 2014-04-18 03:16:33 +0000 | |||
697 | +++ organizer/qorganizer-eds-saverequestdata.cpp 2014-06-10 18:21:21 +0000 | |||
698 | @@ -46,18 +46,17 @@ | |||
699 | 46 | { | 46 | { |
700 | 47 | } | 47 | } |
701 | 48 | 48 | ||
703 | 49 | void SaveRequestData::finish(QtOrganizer::QOrganizerManager::Error error) | 49 | void SaveRequestData::finish(QtOrganizer::QOrganizerManager::Error error, |
704 | 50 | QtOrganizer::QOrganizerAbstractRequest::State state) | ||
705 | 50 | { | 51 | { |
706 | 51 | e_client_refresh_sync(m_client, 0, 0); | 52 | e_client_refresh_sync(m_client, 0, 0); |
707 | 52 | QOrganizerManagerEngine::updateItemSaveRequest(request<QOrganizerItemSaveRequest>(), | 53 | QOrganizerManagerEngine::updateItemSaveRequest(request<QOrganizerItemSaveRequest>(), |
708 | 53 | m_result, | 54 | m_result, |
709 | 54 | error, | 55 | error, |
710 | 55 | m_erros, | 56 | m_erros, |
716 | 56 | QOrganizerAbstractRequest::FinishedState); | 57 | state); |
717 | 57 | Q_FOREACH(const QOrganizerItem &item, m_result) { | 58 | // Change will be fired by the viewwatcher |
718 | 58 | m_changeSet.insertAddedItem(item.id()); | 59 | RequestData::finish(error, state); |
714 | 59 | } | ||
715 | 60 | emitChangeset(&m_changeSet); | ||
719 | 61 | } | 60 | } |
720 | 62 | 61 | ||
721 | 63 | void SaveRequestData::appendResults(QList<QOrganizerItem> result) | 62 | void SaveRequestData::appendResults(QList<QOrganizerItem> result) |
722 | 64 | 63 | ||
723 | === modified file 'organizer/qorganizer-eds-saverequestdata.h' | |||
724 | --- qorganizer/qorganizer-eds-saverequestdata.h 2014-04-14 01:44:59 +0000 | |||
725 | +++ organizer/qorganizer-eds-saverequestdata.h 2014-06-10 18:21:21 +0000 | |||
726 | @@ -29,7 +29,8 @@ | |||
727 | 29 | QtOrganizer::QOrganizerAbstractRequest *req); | 29 | QtOrganizer::QOrganizerAbstractRequest *req); |
728 | 30 | ~SaveRequestData(); | 30 | ~SaveRequestData(); |
729 | 31 | 31 | ||
731 | 32 | void finish(QtOrganizer::QOrganizerManager::Error error = QtOrganizer::QOrganizerManager::NoError); | 32 | void finish(QtOrganizer::QOrganizerManager::Error error = QtOrganizer::QOrganizerManager::NoError, |
732 | 33 | QtOrganizer::QOrganizerAbstractRequest::State state = QtOrganizer::QOrganizerAbstractRequest::FinishedState); | ||
733 | 33 | 34 | ||
734 | 34 | 35 | ||
735 | 35 | QString nextCollection(); | 36 | QString nextCollection(); |
736 | 36 | 37 | ||
737 | === modified file 'organizer/qorganizer-eds-source-registry.cpp' | |||
738 | --- qorganizer/qorganizer-eds-source-registry.cpp 2014-03-21 18:54:45 +0000 | |||
739 | +++ organizer/qorganizer-eds-source-registry.cpp 2014-06-10 18:21:21 +0000 | |||
740 | @@ -300,10 +300,6 @@ | |||
741 | 300 | void SourceRegistry::updateCollection(QOrganizerCollection *collection, | 300 | void SourceRegistry::updateCollection(QOrganizerCollection *collection, |
742 | 301 | ESource *source) | 301 | ESource *source) |
743 | 302 | { | 302 | { |
744 | 303 | //TODO get metadata (color, etc..) | ||
745 | 304 | collection->setMetaData(QOrganizerCollection::KeyName, | ||
746 | 305 | QString::fromUtf8(e_source_get_display_name(source))); | ||
747 | 306 | |||
748 | 307 | // name | 303 | // name |
749 | 308 | collection->setMetaData(QOrganizerCollection::KeyName, | 304 | collection->setMetaData(QOrganizerCollection::KeyName, |
750 | 309 | QString::fromUtf8(e_source_get_display_name(source))); | 305 | QString::fromUtf8(e_source_get_display_name(source))); |
751 | @@ -328,4 +324,5 @@ | |||
752 | 328 | // selected | 324 | // selected |
753 | 329 | bool selected = (e_source_selectable_get_selected(E_SOURCE_SELECTABLE(extCalendar)) == TRUE); | 325 | bool selected = (e_source_selectable_get_selected(E_SOURCE_SELECTABLE(extCalendar)) == TRUE); |
754 | 330 | collection->setExtendedMetaData(COLLECTION_SELECTED_METADATA, selected); | 326 | collection->setExtendedMetaData(COLLECTION_SELECTED_METADATA, selected); |
755 | 327 | |||
756 | 331 | } | 328 | } |
757 | 332 | 329 | ||
758 | === modified file 'tests/unittest/CMakeLists.txt' | |||
759 | --- tests/unittest/CMakeLists.txt 2014-02-25 18:46:32 +0000 | |||
760 | +++ tests/unittest/CMakeLists.txt 2014-06-10 18:21:21 +0000 | |||
761 | @@ -21,16 +21,16 @@ | |||
762 | 21 | ) | 21 | ) |
763 | 22 | 22 | ||
764 | 23 | add_test(${TESTNAME} | 23 | add_test(${TESTNAME} |
770 | 24 | ${DBUS_RUNNER} --keep-env | 24 | ${CMAKE_CURRENT_SOURCE_DIR}/run-eds-test.sh ${DBUS_RUNNER} ${CMAKE_CURRENT_BINARY_DIR}/${TESTNAME} ${TESTNAME} |
771 | 25 | --task ${CMAKE_CURRENT_BINARY_DIR}/${TESTNAME} --task-name ${TESTNAME} --wait-until-complete --wait-for=org.gnome.evolution.dataserver.Calendar4 | 25 | ${EVOLUTION_CALENDAR_FACTORY} ${EVOLUTION_SOURCE_SERVICE_NAME} |
772 | 26 | --task ${EVOLUTION_CALENDAR_FACTORY} --task-name "evolution" -r --wait-for=${EVOLUTION_SOURCE_SERVICE_NAME} | 26 | ${EVOLUTION_SOURCE_REGISTRY} |
773 | 27 | --task ${EVOLUTION_SOURCE_REGISTRY} --task-name "source-registry" --wait-for=org.gtk.vfs.Daemon -r | 27 | ${GVFSD}) |
769 | 28 | --task ${GVFSD} --task-name "gvfsd" -r) | ||
774 | 29 | update_test_properties(${TESTNAME}) | 28 | update_test_properties(${TESTNAME}) |
775 | 30 | endmacro(declare_test testname) | 29 | endmacro(declare_test testname) |
776 | 31 | 30 | ||
777 | 32 | macro(update_test_properties TESTNAME) | 31 | macro(update_test_properties TESTNAME) |
778 | 33 | set(TEST_TMP_DIR "${TMP_DIR}/${TESTNAME}") | 32 | set(TEST_TMP_DIR "${TMP_DIR}/${TESTNAME}") |
779 | 33 | set(ENV_VARS_LIST "") | ||
780 | 34 | list(APPEND ENV_VARS_LIST "QT_QPA_PLATFORM=minimal") | 34 | list(APPEND ENV_VARS_LIST "QT_QPA_PLATFORM=minimal") |
781 | 35 | list(APPEND ENV_VARS_LIST "HOME=${TEST_TMP_DIR}") | 35 | list(APPEND ENV_VARS_LIST "HOME=${TEST_TMP_DIR}") |
782 | 36 | list(APPEND ENV_VARS_LIST "XDG_RUNTIME_DIR=${TEST_TMP_DIR}") | 36 | list(APPEND ENV_VARS_LIST "XDG_RUNTIME_DIR=${TEST_TMP_DIR}") |
783 | @@ -74,3 +74,4 @@ | |||
784 | 74 | declare_test(event-test) | 74 | declare_test(event-test) |
785 | 75 | declare_test(fetchitem-test) | 75 | declare_test(fetchitem-test) |
786 | 76 | declare_test(recurrence-test) | 76 | declare_test(recurrence-test) |
787 | 77 | declare_test(cancel-operation-test) | ||
788 | 77 | 78 | ||
789 | === added file 'tests/unittest/cancel-operation-test.cpp' | |||
790 | --- tests/unittest/cancel-operation-test.cpp 1970-01-01 00:00:00 +0000 | |||
791 | +++ tests/unittest/cancel-operation-test.cpp 2014-06-10 18:21:21 +0000 | |||
792 | @@ -0,0 +1,99 @@ | |||
793 | 1 | /* | ||
794 | 2 | * Copyright 2013 Canonical Ltd. | ||
795 | 3 | * | ||
796 | 4 | * This file is part of qtorganizer5-eds. | ||
797 | 5 | * | ||
798 | 6 | * contact-service-app is free software; you can redistribute it and/or modify | ||
799 | 7 | * it under the terms of the GNU General Public License as published by | ||
800 | 8 | * the Free Software Foundation; version 3. | ||
801 | 9 | * | ||
802 | 10 | * contact-service-app is distributed in the hope that it will be useful, | ||
803 | 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
804 | 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
805 | 13 | * GNU General Public License for more details. | ||
806 | 14 | * | ||
807 | 15 | * You should have received a copy of the GNU General Public License | ||
808 | 16 | * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
809 | 17 | */ | ||
810 | 18 | |||
811 | 19 | |||
812 | 20 | #include <QObject> | ||
813 | 21 | #include <QtTest> | ||
814 | 22 | #include <QDebug> | ||
815 | 23 | |||
816 | 24 | #include <QtOrganizer> | ||
817 | 25 | |||
818 | 26 | #include "qorganizer-eds-engine.h" | ||
819 | 27 | #include "eds-base-test.h" | ||
820 | 28 | |||
821 | 29 | |||
822 | 30 | using namespace QtOrganizer; | ||
823 | 31 | |||
824 | 32 | class CancelOperationTest : public QObject, public EDSBaseTest | ||
825 | 33 | { | ||
826 | 34 | Q_OBJECT | ||
827 | 35 | private: | ||
828 | 36 | static const QString defaultCollectionName; | ||
829 | 37 | |||
830 | 38 | QOrganizerEDSEngine *m_engine; | ||
831 | 39 | QOrganizerCollection m_collection; | ||
832 | 40 | |||
833 | 41 | private Q_SLOTS: | ||
834 | 42 | void init() | ||
835 | 43 | { | ||
836 | 44 | EDSBaseTest::init(); | ||
837 | 45 | m_engine = QOrganizerEDSEngine::createEDSEngine(QMap<QString, QString>()); | ||
838 | 46 | |||
839 | 47 | |||
840 | 48 | QtOrganizer::QOrganizerManager::Error error; | ||
841 | 49 | m_collection = QOrganizerCollection(); | ||
842 | 50 | m_collection.setMetaData(QOrganizerCollection::KeyName, defaultCollectionName); | ||
843 | 51 | |||
844 | 52 | bool saveResult = m_engine->saveCollection(&m_collection, &error); | ||
845 | 53 | QVERIFY(saveResult); | ||
846 | 54 | QCOMPARE(error, QtOrganizer::QOrganizerManager::NoError); | ||
847 | 55 | |||
848 | 56 | } | ||
849 | 57 | |||
850 | 58 | void cleanup() | ||
851 | 59 | { | ||
852 | 60 | delete m_engine; | ||
853 | 61 | m_engine = 0; | ||
854 | 62 | EDSBaseTest::cleanup(); | ||
855 | 63 | } | ||
856 | 64 | |||
857 | 65 | void cancelOperationBeforeStart() | ||
858 | 66 | { | ||
859 | 67 | // initial collections | ||
860 | 68 | QList<QOrganizerCollection> collections = m_engine->collections(0); | ||
861 | 69 | int initialCollectionsCount = collections.count(); | ||
862 | 70 | |||
863 | 71 | QOrganizerEvent event; | ||
864 | 72 | event.setStartDateTime(QDateTime::currentDateTime()); | ||
865 | 73 | event.setDisplayLabel("displayLabelValue"); | ||
866 | 74 | event.setDescription("descriptionValue"); | ||
867 | 75 | event.setCollectionId(m_collection.id()); | ||
868 | 76 | |||
869 | 77 | // Try cancel a create item operation | ||
870 | 78 | QSignalSpy createdItem(m_engine, SIGNAL(itemsAdded(QList<QOrganizerItemId>))); | ||
871 | 79 | QOrganizerItemSaveRequest req; | ||
872 | 80 | req.setItem(event); | ||
873 | 81 | m_engine->startRequest(&req); | ||
874 | 82 | QCOMPARE(req.state(), QOrganizerAbstractRequest::ActiveState); | ||
875 | 83 | m_engine->cancelRequest(&req); | ||
876 | 84 | QCOMPARE(req.state(), QOrganizerAbstractRequest::CanceledState); | ||
877 | 85 | QTRY_COMPARE(createdItem.count(), 0); | ||
878 | 86 | |||
879 | 87 | // check if collection was not create | ||
880 | 88 | collections = m_engine->collections(0); | ||
881 | 89 | QCOMPARE(collections.count(), initialCollectionsCount); | ||
882 | 90 | } | ||
883 | 91 | |||
884 | 92 | }; | ||
885 | 93 | |||
886 | 94 | const QString CancelOperationTest::defaultCollectionName = QStringLiteral("CancelOperationTest COLLECTION"); | ||
887 | 95 | |||
888 | 96 | |||
889 | 97 | QTEST_MAIN(CancelOperationTest) | ||
890 | 98 | |||
891 | 99 | #include "cancel-operation-test.moc" | ||
892 | 0 | 100 | ||
893 | === modified file 'tests/unittest/collections-test.cpp' | |||
894 | --- tests/unittest/collections-test.cpp 2014-03-21 18:04:50 +0000 | |||
895 | +++ tests/unittest/collections-test.cpp 2014-06-10 18:21:21 +0000 | |||
896 | @@ -44,7 +44,7 @@ | |||
897 | 44 | private Q_SLOTS: | 44 | private Q_SLOTS: |
898 | 45 | void init() | 45 | void init() |
899 | 46 | { | 46 | { |
901 | 47 | EDSBaseTest::init(0); | 47 | EDSBaseTest::init(); |
902 | 48 | m_engineWrite = QOrganizerEDSEngine::createEDSEngine(QMap<QString, QString>()); | 48 | m_engineWrite = QOrganizerEDSEngine::createEDSEngine(QMap<QString, QString>()); |
903 | 49 | m_engineRead = QOrganizerEDSEngine::createEDSEngine(QMap<QString, QString>()); | 49 | m_engineRead = QOrganizerEDSEngine::createEDSEngine(QMap<QString, QString>()); |
904 | 50 | } | 50 | } |
905 | @@ -52,9 +52,10 @@ | |||
906 | 52 | void cleanup() | 52 | void cleanup() |
907 | 53 | { | 53 | { |
908 | 54 | delete m_engineRead; | 54 | delete m_engineRead; |
909 | 55 | delete m_engineWrite; | ||
910 | 55 | m_engineRead = 0; | 56 | m_engineRead = 0; |
911 | 56 | EDSBaseTest::cleanup(m_engineWrite); | ||
912 | 57 | m_engineWrite = 0; | 57 | m_engineWrite = 0; |
913 | 58 | EDSBaseTest::cleanup(); | ||
914 | 58 | } | 59 | } |
915 | 59 | 60 | ||
916 | 60 | void testCreateCollection() | 61 | void testCreateCollection() |
917 | @@ -91,22 +92,35 @@ | |||
918 | 91 | QOrganizerCollection collection; | 92 | QOrganizerCollection collection; |
919 | 92 | QtOrganizer::QOrganizerManager::Error error; | 93 | QtOrganizer::QOrganizerManager::Error error; |
920 | 93 | collection.setMetaData(QOrganizerCollection::KeyName, defaultCollectionName); | 94 | collection.setMetaData(QOrganizerCollection::KeyName, defaultCollectionName); |
922 | 94 | collection.setMetaData(QOrganizerCollection::KeyColor, "red"); | 95 | collection.setMetaData(QOrganizerCollection::KeyColor, QStringLiteral("red")); |
923 | 96 | collection.setExtendedMetaData(QStringLiteral("collection-selected"), false); | ||
924 | 95 | 97 | ||
925 | 96 | QVERIFY(m_engineWrite->saveCollection(&collection, &error)); | 98 | QVERIFY(m_engineWrite->saveCollection(&collection, &error)); |
926 | 97 | QCOMPARE(error, QOrganizerManager::NoError); | 99 | QCOMPARE(error, QOrganizerManager::NoError); |
927 | 98 | QVERIFY(!collection.id().isNull()); | 100 | QVERIFY(!collection.id().isNull()); |
928 | 99 | 101 | ||
929 | 102 | // Check if the collection was stored correct | ||
930 | 103 | QOrganizerCollection newCollection = m_engineRead->collection(collection.id(), &error); | ||
931 | 104 | QCOMPARE(newCollection.metaData(QOrganizerCollection::KeyName).toString(), defaultCollectionName); | ||
932 | 105 | QCOMPARE(newCollection.metaData(QOrganizerCollection::KeyColor).toString(), QStringLiteral("red")); | ||
933 | 106 | QCOMPARE(newCollection.extendedMetaData(QStringLiteral("collection-selected")).toBool(), false); | ||
934 | 107 | |||
935 | 108 | |||
936 | 100 | // update the collection | 109 | // update the collection |
937 | 101 | QSignalSpy updateCollection(m_engineWrite, SIGNAL(collectionsChanged(QList<QOrganizerCollectionId>))); | 110 | QSignalSpy updateCollection(m_engineWrite, SIGNAL(collectionsChanged(QList<QOrganizerCollectionId>))); |
938 | 102 | collection.setMetaData(QOrganizerCollection::KeyColor, "blue"); | 111 | collection.setMetaData(QOrganizerCollection::KeyColor, "blue"); |
939 | 103 | collection.setExtendedMetaData("collection-selected", true); | 112 | collection.setExtendedMetaData("collection-selected", true); |
940 | 104 | QVERIFY(m_engineWrite->saveCollection(&collection, &error)); | 113 | QVERIFY(m_engineWrite->saveCollection(&collection, &error)); |
941 | 105 | QCOMPARE(error, QOrganizerManager::NoError); | 114 | QCOMPARE(error, QOrganizerManager::NoError); |
946 | 106 | QTRY_COMPARE(updateCollection.count(), 1); | 115 | |
947 | 107 | 116 | QTRY_VERIFY(updateCollection.count() > 0); | |
948 | 108 | // Check if the collection was stored correct | 117 | QList<QVariant> args = updateCollection.takeFirst(); |
949 | 109 | QOrganizerCollection newCollection = m_engineRead->collection(collection.id(), &error); | 118 | QCOMPARE(args.count(), 1); |
950 | 119 | QCOMPARE(args[0].value<QList<QOrganizerCollectionId> >().at(0).toString(), collection.id().toString()); | ||
951 | 120 | |||
952 | 121 | |||
953 | 122 | // Check if the collection was updated correct | ||
954 | 123 | newCollection = m_engineRead->collection(collection.id(), &error); | ||
955 | 110 | QCOMPARE(error, QOrganizerManager::NoError); | 124 | QCOMPARE(error, QOrganizerManager::NoError); |
956 | 111 | QCOMPARE(newCollection.metaData(QOrganizerCollection::KeyName).toString(), defaultCollectionName); | 125 | QCOMPARE(newCollection.metaData(QOrganizerCollection::KeyName).toString(), defaultCollectionName); |
957 | 112 | QCOMPARE(newCollection.metaData(QOrganizerCollection::KeyColor).toString(), QStringLiteral("blue")); | 126 | QCOMPARE(newCollection.metaData(QOrganizerCollection::KeyColor).toString(), QStringLiteral("blue")); |
958 | 113 | 127 | ||
959 | === modified file 'tests/unittest/eds-base-test.cpp' | |||
960 | --- tests/unittest/eds-base-test.cpp 2013-12-11 13:16:50 +0000 | |||
961 | +++ tests/unittest/eds-base-test.cpp 2014-06-10 18:21:21 +0000 | |||
962 | @@ -29,71 +29,45 @@ | |||
963 | 29 | 29 | ||
964 | 30 | EDSBaseTest::EDSBaseTest() | 30 | EDSBaseTest::EDSBaseTest() |
965 | 31 | { | 31 | { |
973 | 32 | GError *error = 0; | 32 | qRegisterMetaType<QList<QOrganizerCollectionId> >(); |
974 | 33 | m_sourceRegistry = e_source_registry_new_sync(0, &error); | 33 | qRegisterMetaType<QList<QOrganizerItemId> >(); |
975 | 34 | if (error) { | 34 | QCoreApplication::addLibraryPath(QORGANIZER_DEV_PATH); |
969 | 35 | qWarning() << "Fail to create sourge registry:" << error->message; | ||
970 | 36 | g_error_free(error); | ||
971 | 37 | Q_ASSERT(false); | ||
972 | 38 | } | ||
976 | 39 | } | 35 | } |
977 | 40 | 36 | ||
978 | 41 | EDSBaseTest::~EDSBaseTest() | 37 | EDSBaseTest::~EDSBaseTest() |
979 | 42 | { | 38 | { |
1002 | 43 | g_object_unref(m_sourceRegistry); | 39 | } |
1003 | 44 | } | 40 | |
1004 | 45 | 41 | void EDSBaseTest::init() | |
1005 | 46 | void EDSBaseTest::init(QOrganizerEDSEngine *engine) | 42 | { |
1006 | 47 | { | 43 | } |
1007 | 48 | cleanup(engine); | 44 | |
1008 | 49 | // wait to flush DBUS calls | 45 | |
1009 | 50 | QTest::qWait(1000); | 46 | void EDSBaseTest::cleanup() |
1010 | 51 | } | 47 | { |
1011 | 52 | 48 | static QStringList defaultSources; | |
1012 | 53 | void EDSBaseTest::cleanup(QOrganizerEDSEngine *engine) | 49 | |
1013 | 54 | { | 50 | if (defaultSources.isEmpty()) { |
1014 | 55 | // remove all new items, remove item by item because they can have diff collections | 51 | defaultSources << "qtorganizer:eds::birthdays" |
1015 | 56 | Q_FOREACH(const QOrganizerItemId &id, m_newItems) { | 52 | << "qtorganizer:eds::system-calendar" |
1016 | 57 | QtOrganizer::QOrganizerManager::Error error; | 53 | << "qtorganizer:eds::system-memo-list" |
1017 | 58 | QMap<int, QtOrganizer::QOrganizerManager::Error> errorMap; | 54 | << "qtorganizer:eds::system-task-list"; |
1018 | 59 | 55 | } | |
1019 | 60 | engine->removeItems(QList<QOrganizerItemId>() << id, | 56 | QOrganizerEDSEngine *engine = QOrganizerEDSEngine::createEDSEngine(QMap<QString, QString>()); |
1020 | 61 | &errorMap, | 57 | Q_FOREACH(const QOrganizerCollection &col, engine->collections(0)) { |
1021 | 62 | &error); | 58 | if (defaultSources.contains(col.id().toString())) { |
1022 | 63 | } | 59 | continue; |
1023 | 64 | m_newItems.clear(); | 60 | } |
1024 | 61 | QSignalSpy removeCollection(engine, SIGNAL(collectionsRemoved(QList<QOrganizerCollectionId>))); | ||
1025 | 62 | QVERIFY(engine->removeCollection(col.id(), 0)); | ||
1026 | 63 | QTRY_COMPARE(removeCollection.count(), 1); | ||
1027 | 64 | |||
1028 | 65 | QList<QVariant> args = removeCollection.takeFirst(); | ||
1029 | 66 | QCOMPARE(args.count(), 1); | ||
1030 | 67 | QCOMPARE(args[0].value<QList<QOrganizerCollectionId> >().at(0).toString(), col.id().toString()); | ||
1031 | 68 | } | ||
1032 | 69 | |||
1033 | 65 | delete engine; | 70 | delete engine; |
1034 | 66 | |||
1035 | 67 | // remove all collections | ||
1036 | 68 | GError *error; | ||
1037 | 69 | gboolean status; | ||
1038 | 70 | GList *sources = e_source_registry_list_sources(m_sourceRegistry, 0); | ||
1039 | 71 | |||
1040 | 72 | for(GList *i = sources; i != 0; i = i->next) { | ||
1041 | 73 | ESource *source = E_SOURCE(i->data); | ||
1042 | 74 | error = 0; | ||
1043 | 75 | status = true; | ||
1044 | 76 | if (e_source_get_remote_deletable(source)) { | ||
1045 | 77 | status = e_source_remote_delete_sync(source, 0, &error); | ||
1046 | 78 | QTest::qWait(100); | ||
1047 | 79 | } else if (e_source_get_removable(source)) { | ||
1048 | 80 | status = e_source_remove_sync(source, 0, &error); | ||
1049 | 81 | QTest::qWait(100); | ||
1050 | 82 | // check if source was removed | ||
1051 | 83 | const gchar *uid = e_source_get_uid(source); | ||
1052 | 84 | Q_ASSERT(e_source_registry_ref_source(m_sourceRegistry, uid) == 0); | ||
1053 | 85 | } | ||
1054 | 86 | if (error) { | ||
1055 | 87 | qWarning() << "Fail to remove source:" << error->message; | ||
1056 | 88 | g_error_free(error); | ||
1057 | 89 | Q_ASSERT(false); | ||
1058 | 90 | } | ||
1059 | 91 | |||
1060 | 92 | Q_ASSERT(status); | ||
1061 | 93 | } | ||
1062 | 94 | |||
1063 | 95 | g_list_free_full(sources, g_object_unref); | ||
1064 | 96 | e_source_registry_debug_dump(m_sourceRegistry, 0); | ||
1065 | 97 | } | 71 | } |
1066 | 98 | 72 | ||
1067 | 99 | void EDSBaseTest::appendToRemove(const QtOrganizer::QOrganizerItemId &id) | 73 | void EDSBaseTest::appendToRemove(const QtOrganizer::QOrganizerItemId &id) |
1068 | 100 | 74 | ||
1069 | === modified file 'tests/unittest/eds-base-test.h' | |||
1070 | --- tests/unittest/eds-base-test.h 2013-12-05 23:30:09 +0000 | |||
1071 | +++ tests/unittest/eds-base-test.h 2014-06-10 18:21:21 +0000 | |||
1072 | @@ -32,13 +32,12 @@ | |||
1073 | 32 | ~EDSBaseTest(); | 32 | ~EDSBaseTest(); |
1074 | 33 | 33 | ||
1075 | 34 | protected: | 34 | protected: |
1078 | 35 | void init(QOrganizerEDSEngine *engine); | 35 | void init(); |
1079 | 36 | void cleanup(QOrganizerEDSEngine *engine); | 36 | void cleanup(); |
1080 | 37 | 37 | ||
1081 | 38 | void appendToRemove(const QtOrganizer::QOrganizerItemId &id); | 38 | void appendToRemove(const QtOrganizer::QOrganizerItemId &id); |
1082 | 39 | 39 | ||
1083 | 40 | private: | 40 | private: |
1084 | 41 | ESourceRegistry *m_sourceRegistry; | ||
1085 | 42 | QList<QtOrganizer::QOrganizerItemId> m_newItems; | 41 | QList<QtOrganizer::QOrganizerItemId> m_newItems; |
1086 | 43 | }; | 42 | }; |
1087 | 44 | 43 | ||
1088 | 45 | 44 | ||
1089 | === modified file 'tests/unittest/event-test.cpp' | |||
1090 | --- tests/unittest/event-test.cpp 2014-04-17 21:05:38 +0000 | |||
1091 | +++ tests/unittest/event-test.cpp 2014-06-10 18:21:21 +0000 | |||
1092 | @@ -48,7 +48,7 @@ | |||
1093 | 48 | private Q_SLOTS: | 48 | private Q_SLOTS: |
1094 | 49 | void init() | 49 | void init() |
1095 | 50 | { | 50 | { |
1097 | 51 | EDSBaseTest::init(0); | 51 | EDSBaseTest::init(); |
1098 | 52 | 52 | ||
1099 | 53 | signalIndex = 0; | 53 | signalIndex = 0; |
1100 | 54 | m_itemRemovedTime = QDateTime(); | 54 | m_itemRemovedTime = QDateTime(); |
1101 | @@ -67,7 +67,7 @@ | |||
1102 | 67 | 67 | ||
1103 | 68 | void cleanup() | 68 | void cleanup() |
1104 | 69 | { | 69 | { |
1106 | 70 | EDSBaseTest::cleanup(m_engine); | 70 | EDSBaseTest::cleanup(); |
1107 | 71 | } | 71 | } |
1108 | 72 | 72 | ||
1109 | 73 | //helper | 73 | //helper |
1110 | 74 | 74 | ||
1111 | === modified file 'tests/unittest/fetchitem-test.cpp' | |||
1112 | --- tests/unittest/fetchitem-test.cpp 2014-01-29 18:10:44 +0000 | |||
1113 | +++ tests/unittest/fetchitem-test.cpp 2014-06-10 18:21:21 +0000 | |||
1114 | @@ -42,7 +42,7 @@ | |||
1115 | 42 | private Q_SLOTS: | 42 | private Q_SLOTS: |
1116 | 43 | void initTestCase() | 43 | void initTestCase() |
1117 | 44 | { | 44 | { |
1119 | 45 | EDSBaseTest::init(0); | 45 | EDSBaseTest::init(); |
1120 | 46 | m_engine = QOrganizerEDSEngine::createEDSEngine(QMap<QString, QString>()); | 46 | m_engine = QOrganizerEDSEngine::createEDSEngine(QMap<QString, QString>()); |
1121 | 47 | 47 | ||
1122 | 48 | // create test collection | 48 | // create test collection |
1123 | @@ -87,9 +87,10 @@ | |||
1124 | 87 | { | 87 | { |
1125 | 88 | m_collection = QOrganizerCollection(); | 88 | m_collection = QOrganizerCollection(); |
1126 | 89 | m_events.clear(); | 89 | m_events.clear(); |
1129 | 90 | 90 | delete m_engine; | |
1128 | 91 | EDSBaseTest::cleanup(m_engine); | ||
1130 | 92 | m_engine = 0; | 91 | m_engine = 0; |
1131 | 92 | |||
1132 | 93 | EDSBaseTest::cleanup(); | ||
1133 | 93 | } | 94 | } |
1134 | 94 | 95 | ||
1135 | 95 | void testFetchById() | 96 | void testFetchById() |
1136 | 96 | 97 | ||
1137 | === modified file 'tests/unittest/recurrence-test.cpp' | |||
1138 | --- tests/unittest/recurrence-test.cpp 2014-04-15 19:42:59 +0000 | |||
1139 | +++ tests/unittest/recurrence-test.cpp 2014-06-10 18:21:21 +0000 | |||
1140 | @@ -64,6 +64,9 @@ | |||
1141 | 64 | QList<QtOrganizer::QOrganizerItemDetail::DetailType>(), | 64 | QList<QtOrganizer::QOrganizerItemDetail::DetailType>(), |
1142 | 65 | &errorMap, | 65 | &errorMap, |
1143 | 66 | &error); | 66 | &error); |
1144 | 67 | if (!saveResult) { | ||
1145 | 68 | qWarning() << "Fail to save items"; | ||
1146 | 69 | } | ||
1147 | 67 | 70 | ||
1148 | 68 | Q_ASSERT(saveResult); | 71 | Q_ASSERT(saveResult); |
1149 | 69 | Q_ASSERT(error == QtOrganizer::QOrganizerManager::NoError); | 72 | Q_ASSERT(error == QtOrganizer::QOrganizerManager::NoError); |
1150 | @@ -77,7 +80,7 @@ | |||
1151 | 77 | private Q_SLOTS: | 80 | private Q_SLOTS: |
1152 | 78 | void init() | 81 | void init() |
1153 | 79 | { | 82 | { |
1155 | 80 | EDSBaseTest::init(0); | 83 | EDSBaseTest::init(); |
1156 | 81 | 84 | ||
1157 | 82 | m_engine = QOrganizerEDSEngine::createEDSEngine(QMap<QString, QString>()); | 85 | m_engine = QOrganizerEDSEngine::createEDSEngine(QMap<QString, QString>()); |
1158 | 83 | 86 | ||
1159 | @@ -92,7 +95,9 @@ | |||
1160 | 92 | 95 | ||
1161 | 93 | void cleanup() | 96 | void cleanup() |
1162 | 94 | { | 97 | { |
1164 | 95 | EDSBaseTest::cleanup(m_engine); | 98 | delete m_engine; |
1165 | 99 | m_engine = 0; | ||
1166 | 100 | EDSBaseTest::cleanup(); | ||
1167 | 96 | } | 101 | } |
1168 | 97 | 102 | ||
1169 | 98 | void testCreateWeeklyEvent() | 103 | void testCreateWeeklyEvent() |
1170 | 99 | 104 | ||
1171 | === added file 'tests/unittest/run-eds-test.sh' | |||
1172 | --- tests/unittest/run-eds-test.sh 1970-01-01 00:00:00 +0000 | |||
1173 | +++ tests/unittest/run-eds-test.sh 2014-06-10 18:21:21 +0000 | |||
1174 | @@ -0,0 +1,16 @@ | |||
1175 | 1 | #!/bin/sh | ||
1176 | 2 | |||
1177 | 3 | #ARG1 - DBUS RUNNERN PATH | ||
1178 | 4 | #ARG2 - TEST EXECUTABLE FULL PATH | ||
1179 | 5 | #ARG3 - TEST NAME | ||
1180 | 6 | #ARG4 - EVOLUTION_CALENDAR_FACTORY FULL PATH | ||
1181 | 7 | #ARG5 - EVOLUTION_CALENDAR_FACTORY SERVICE NAME | ||
1182 | 8 | #ARG6 - EVOLUTION_SOURCE_REGISTRY FULL PATH | ||
1183 | 9 | |||
1184 | 10 | rm -rf $XDG_DATA_HOME | ||
1185 | 11 | $1 --keep-env \ | ||
1186 | 12 | --task $2 --task-name $3 --wait-until-complete --wait-for=org.gnome.evolution.dataserver.Calendar4 \ | ||
1187 | 13 | --task $4 --task-name "evolution" -r --wait-for=$5 \ | ||
1188 | 14 | --task $6 --task-name "source-registry" --wait-for=org.gtk.vfs.Daemon -r \ | ||
1189 | 15 | --task $7 --task-name "gvfsd" -r | ||
1190 | 16 | return $? |
PASSED: Continuous integration, rev:60 jenkins. qa.ubuntu. com/job/ qtorganizer5- eds-ci/ 143/ jenkins. qa.ubuntu. com/job/ qtorganizer5- eds-utopic- amd64-ci/ 1 jenkins. qa.ubuntu. com/job/ qtorganizer5- eds-utopic- armhf-ci/ 1 jenkins. qa.ubuntu. com/job/ qtorganizer5- eds-utopic- armhf-ci/ 1/artifact/ work/output/ *zip*/output. zip jenkins. qa.ubuntu. com/job/ qtorganizer5- eds-utopic- i386-ci/ 1
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild: s-jenkins. ubuntu- ci:8080/ job/qtorganizer 5-eds-ci/ 143/rebuild
http://