Merge lp:~renatofilho/qtorganizer5-eds/fix-1262296 into lp:qtorganizer5-eds
- fix-1262296
- Merge into trunk
Status: | Merged |
---|---|
Approved by: | Robert Bruce Park |
Approved revision: | 37 |
Merged at revision: | 26 |
Proposed branch: | lp:~renatofilho/qtorganizer5-eds/fix-1262296 |
Merge into: | lp:qtorganizer5-eds |
Diff against target: |
193 lines (+70/-16) 3 files modified
qorganizer/qorganizer-eds-engine.cpp (+22/-14) qorganizer/qorganizer-eds-saverequestdata.cpp (+4/-1) tests/unittest/event-test.cpp (+44/-1) |
To merge this branch: | bzr merge lp:~renatofilho/qtorganizer5-eds/fix-1262296 |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
PS Jenkins bot | continuous-integration | Approve | |
Gustavo Pichorim Boiko (community) | Approve | ||
Review via email:
|
Commit message
Fixed create items without collection id.
Description of the change
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
PS Jenkins bot (ps-jenkins) wrote : | # |
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:27
http://
Executed test runs:
FAILURE: http://
FAILURE: http://
FAILURE: http://
Click here to trigger a rebuild:
http://
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:28
http://
Executed test runs:
FAILURE: http://
FAILURE: http://
FAILURE: http://
Click here to trigger a rebuild:
http://
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:29
http://
Executed test runs:
SUCCESS: http://
FAILURE: http://
FAILURE: http://
Click here to trigger a rebuild:
http://
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:30
http://
Executed test runs:
SUCCESS: http://
FAILURE: http://
FAILURE: http://
Click here to trigger a rebuild:
http://
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:31
http://
Executed test runs:
SUCCESS: http://
FAILURE: http://
FAILURE: http://
Click here to trigger a rebuild:
http://
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:32
http://
Executed test runs:
SUCCESS: http://
FAILURE: http://
FAILURE: http://
Click here to trigger a rebuild:
http://
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:33
http://
Executed test runs:
FAILURE: http://
FAILURE: http://
FAILURE: http://
Click here to trigger a rebuild:
http://
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:34
http://
Executed test runs:
FAILURE: http://
SUCCESS: http://
deb: http://
FAILURE: http://
Click here to trigger a rebuild:
http://
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
PS Jenkins bot (ps-jenkins) wrote : | # |
PASSED: Continuous integration, rev:35
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
Gustavo Pichorim Boiko (boiko) wrote : | # |
Looks good!
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Autolanding.
More details in the following jenkins job:
http://
Executed test runs:
FAILURE: http://
FAILURE: http://
FAILURE: http://
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
Robert Bruce Park (robru) wrote : | # |
The jenkins failure looks like a merge conflict, can you rebase this on trunk?
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Autolanding.
More details in the following jenkins job:
http://
Executed test runs:
FAILURE: http://
FAILURE: http://
FAILURE: http://
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:36
http://
Executed test runs:
FAILURE: http://
FAILURE: http://
FAILURE: http://
Click here to trigger a rebuild:
http://
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
PS Jenkins bot (ps-jenkins) wrote : | # |
PASSED: Continuous integration, rev:37
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Autolanding.
More details in the following jenkins job:
http://
Executed test runs:
FAILURE: http://
SUCCESS: http://
deb: http://
FAILURE: http://
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
PS Jenkins bot (ps-jenkins) wrote : | # |
PASSED: Continuous integration, rev:37
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
Preview Diff
1 | === modified file 'qorganizer/qorganizer-eds-engine.cpp' | |||
2 | --- qorganizer/qorganizer-eds-engine.cpp 2014-01-05 18:18:32 +0000 | |||
3 | +++ qorganizer/qorganizer-eds-engine.cpp 2014-01-07 12:59:42 +0000 | |||
4 | @@ -162,6 +162,7 @@ | |||
5 | 162 | 162 | ||
6 | 163 | GSList *events = 0; | 163 | GSList *events = 0; |
7 | 164 | events = g_slist_append(events, comp); | 164 | events = g_slist_append(events, comp); |
8 | 165 | |||
9 | 165 | data->appendResults(data->parent()->parseEvents(data->collection(), events, false)); | 166 | data->appendResults(data->parent()->parseEvents(data->collection(), events, false)); |
10 | 166 | g_slist_free(events); | 167 | g_slist_free(events); |
11 | 167 | } | 168 | } |
12 | @@ -243,11 +244,9 @@ | |||
13 | 243 | QOrganizerManager::Error *error) | 244 | QOrganizerManager::Error *error) |
14 | 244 | { | 245 | { |
15 | 245 | qDebug() << Q_FUNC_INFO; | 246 | qDebug() << Q_FUNC_INFO; |
16 | 246 | QOrganizerItemIdFilter filter; | ||
17 | 247 | filter.setIds(itemIds); | ||
18 | 248 | 247 | ||
21 | 249 | QOrganizerItemFetchRequest *req = new QOrganizerItemFetchRequest(this); | 248 | QOrganizerItemFetchByIdRequest *req = new QOrganizerItemFetchByIdRequest(this); |
22 | 250 | req->setFilter(filter); | 249 | req->setIds(itemIds); |
23 | 251 | req->setFetchHint(fetchHint); | 250 | req->setFetchHint(fetchHint); |
24 | 252 | 251 | ||
25 | 253 | startRequest(req); | 252 | startRequest(req); |
26 | @@ -256,9 +255,9 @@ | |||
27 | 256 | if (error) { | 255 | if (error) { |
28 | 257 | *error = req->error(); | 256 | *error = req->error(); |
29 | 258 | } | 257 | } |
31 | 259 | // TODO implement correct reply for errorMap | 258 | |
32 | 260 | if (errorMap) { | 259 | if (errorMap) { |
34 | 261 | *errorMap = QMap<int, QOrganizerManager::Error>(); | 260 | *errorMap = req->errorMap(); |
35 | 262 | } | 261 | } |
36 | 263 | req->deleteLater(); | 262 | req->deleteLater(); |
37 | 264 | return req->items(); | 263 | return req->items(); |
38 | @@ -346,7 +345,7 @@ | |||
39 | 346 | qDebug() << Q_FUNC_INFO; | 345 | qDebug() << Q_FUNC_INFO; |
40 | 347 | QString collectionId = data->nextCollection(); | 346 | QString collectionId = data->nextCollection(); |
41 | 348 | 347 | ||
43 | 349 | if (collectionId.isEmpty() && data->end()) { | 348 | if (collectionId.isNull() && data->end()) { |
44 | 350 | data->finish(); | 349 | data->finish(); |
45 | 351 | delete data; | 350 | delete data; |
46 | 352 | return; | 351 | return; |
47 | @@ -357,17 +356,20 @@ | |||
48 | 357 | createItems = false; | 356 | createItems = false; |
49 | 358 | items = data->takeItemsToUpdate(); | 357 | items = data->takeItemsToUpdate(); |
50 | 359 | } | 358 | } |
51 | 359 | |||
52 | 360 | if (items.isEmpty()) { | 360 | if (items.isEmpty()) { |
53 | 361 | saveItemsAsyncStart(data); | 361 | saveItemsAsyncStart(data); |
54 | 362 | return; | ||
55 | 362 | } | 363 | } |
56 | 363 | 364 | ||
58 | 364 | if (collectionId.isNull() && createItems) { | 365 | if (collectionId.isEmpty() && createItems) { |
59 | 365 | collectionId = data->parent()->d->m_sourceRegistry->defaultCollection().id().toString(); | 366 | collectionId = data->parent()->d->m_sourceRegistry->defaultCollection().id().toString(); |
60 | 367 | qDebug() << "Use default collection to save item with empty collection:" << collectionId; | ||
61 | 366 | } | 368 | } |
62 | 367 | 369 | ||
63 | 368 | EClient *client = data->parent()->d->m_sourceRegistry->client(collectionId); | 370 | EClient *client = data->parent()->d->m_sourceRegistry->client(collectionId); |
64 | 369 | if (!client) { | 371 | if (!client) { |
66 | 370 | qWarning() << "Trying to save items with invalid collection"; | 372 | qWarning() << "Trying to save items with invalid collection" << collectionId; |
67 | 371 | Q_FOREACH(const QOrganizerItem &i, items) { | 373 | Q_FOREACH(const QOrganizerItem &i, items) { |
68 | 372 | data->appendResult(i, QOrganizerManager::InvalidCollectionError); | 374 | data->appendResult(i, QOrganizerManager::InvalidCollectionError); |
69 | 373 | } | 375 | } |
70 | @@ -454,18 +456,22 @@ | |||
71 | 454 | data->appendResult(i, QOrganizerManager::UnspecifiedError); | 456 | data->appendResult(i, QOrganizerManager::UnspecifiedError); |
72 | 455 | } | 457 | } |
73 | 456 | } else { | 458 | } else { |
74 | 459 | QString currentCollectionId = data->currentCollection(); | ||
75 | 460 | if (currentCollectionId.isEmpty()) { | ||
76 | 461 | currentCollectionId = data->parent()->defaultCollection(0).id().toString(); | ||
77 | 462 | } | ||
78 | 457 | QList<QOrganizerItem> items = data->workingItems(); | 463 | QList<QOrganizerItem> items = data->workingItems(); |
79 | 458 | for(uint i=0, iMax=g_slist_length(uids); i < iMax; i++) { | 464 | for(uint i=0, iMax=g_slist_length(uids); i < iMax; i++) { |
80 | 459 | QOrganizerItem &item = items[i]; | 465 | QOrganizerItem &item = items[i]; |
81 | 460 | const gchar *uid = static_cast<const gchar*>(g_slist_nth_data(uids, i)); | 466 | const gchar *uid = static_cast<const gchar*>(g_slist_nth_data(uids, i)); |
82 | 461 | 467 | ||
87 | 462 | QOrganizerEDSCollectionEngineId *edsCollectionId = new QOrganizerEDSCollectionEngineId(data->currentCollection()); | 468 | QOrganizerEDSEngineId *eid = new QOrganizerEDSEngineId(currentCollectionId, |
84 | 463 | item.setCollectionId(QOrganizerCollectionId(edsCollectionId)); | ||
85 | 464 | |||
86 | 465 | QOrganizerEDSEngineId *eid = new QOrganizerEDSEngineId(data->currentCollection(), | ||
88 | 466 | QString::fromUtf8(uid)); | 469 | QString::fromUtf8(uid)); |
89 | 467 | item.setId(QOrganizerItemId(eid)); | 470 | item.setId(QOrganizerItemId(eid)); |
90 | 468 | item.setGuid(QString::fromUtf8(uid)); | 471 | item.setGuid(QString::fromUtf8(uid)); |
91 | 472 | |||
92 | 473 | QOrganizerEDSCollectionEngineId *edsCollectionId = new QOrganizerEDSCollectionEngineId(currentCollectionId); | ||
93 | 474 | item.setCollectionId(QOrganizerCollectionId(edsCollectionId)); | ||
94 | 469 | } | 475 | } |
95 | 470 | g_slist_free_full(uids, g_free); | 476 | g_slist_free_full(uids, g_free); |
96 | 471 | data->appendResults(items); | 477 | data->appendResults(items); |
97 | @@ -589,7 +595,9 @@ | |||
98 | 589 | QOrganizerCollection QOrganizerEDSEngine::defaultCollection(QOrganizerManager::Error* error) | 595 | QOrganizerCollection QOrganizerEDSEngine::defaultCollection(QOrganizerManager::Error* error) |
99 | 590 | { | 596 | { |
100 | 591 | qDebug() << Q_FUNC_INFO; | 597 | qDebug() << Q_FUNC_INFO; |
102 | 592 | *error = QOrganizerManager::NoError; | 598 | if (error) { |
103 | 599 | *error = QOrganizerManager::NoError; | ||
104 | 600 | } | ||
105 | 593 | return d->m_sourceRegistry->defaultCollection(); | 601 | return d->m_sourceRegistry->defaultCollection(); |
106 | 594 | } | 602 | } |
107 | 595 | 603 | ||
108 | 596 | 604 | ||
109 | === modified file 'qorganizer/qorganizer-eds-saverequestdata.cpp' | |||
110 | --- qorganizer/qorganizer-eds-saverequestdata.cpp 2013-12-11 13:16:50 +0000 | |||
111 | +++ qorganizer/qorganizer-eds-saverequestdata.cpp 2014-01-07 12:59:42 +0000 | |||
112 | @@ -31,6 +31,9 @@ | |||
113 | 31 | // map items by collection | 31 | // map items by collection |
114 | 32 | Q_FOREACH(const QOrganizerItem &i, request<QOrganizerItemSaveRequest>()->items()) { | 32 | Q_FOREACH(const QOrganizerItem &i, request<QOrganizerItemSaveRequest>()->items()) { |
115 | 33 | QString collectionId = i.collectionId().toString(); | 33 | QString collectionId = i.collectionId().toString(); |
116 | 34 | if (collectionId == QStringLiteral("qtorganizer:::")) { | ||
117 | 35 | collectionId = QStringLiteral(""); | ||
118 | 36 | } | ||
119 | 34 | QList<QOrganizerItem> li = m_items[collectionId]; | 37 | QList<QOrganizerItem> li = m_items[collectionId]; |
120 | 35 | li << i; | 38 | li << i; |
121 | 36 | m_items.insert(collectionId, li); | 39 | m_items.insert(collectionId, li); |
122 | @@ -62,7 +65,7 @@ | |||
123 | 62 | QString SaveRequestData::nextCollection() | 65 | QString SaveRequestData::nextCollection() |
124 | 63 | { | 66 | { |
125 | 64 | if (m_items.isEmpty()) { | 67 | if (m_items.isEmpty()) { |
127 | 65 | m_currentCollection = QString(); | 68 | m_currentCollection = QString(QString::null); |
128 | 66 | m_currentItems.clear(); | 69 | m_currentItems.clear(); |
129 | 67 | } else { | 70 | } else { |
130 | 68 | m_currentCollection = m_items.keys().first(); | 71 | m_currentCollection = m_items.keys().first(); |
131 | 69 | 72 | ||
132 | === modified file 'tests/unittest/event-test.cpp' | |||
133 | --- tests/unittest/event-test.cpp 2014-01-05 18:18:32 +0000 | |||
134 | +++ tests/unittest/event-test.cpp 2014-01-07 12:59:42 +0000 | |||
135 | @@ -271,6 +271,45 @@ | |||
136 | 271 | QCOMPARE(items.count(), 0); | 271 | QCOMPARE(items.count(), 0); |
137 | 272 | } | 272 | } |
138 | 273 | 273 | ||
139 | 274 | void testCreateEventWithoutCollection() | ||
140 | 275 | { | ||
141 | 276 | static QString displayLabelValue = QStringLiteral("event without collection"); | ||
142 | 277 | static QString descriptionValue = QStringLiteral("event without collection"); | ||
143 | 278 | |||
144 | 279 | QOrganizerEvent event; | ||
145 | 280 | event.setStartDateTime(QDateTime(QDate(2013, 9, 3), QTime(0,30,0))); | ||
146 | 281 | event.setDisplayLabel(displayLabelValue); | ||
147 | 282 | event.setDescription(descriptionValue); | ||
148 | 283 | |||
149 | 284 | QtOrganizer::QOrganizerManager::Error error; | ||
150 | 285 | QMap<int, QtOrganizer::QOrganizerManager::Error> errorMap; | ||
151 | 286 | QList<QOrganizerItem> items; | ||
152 | 287 | items << event; | ||
153 | 288 | bool saveResult = m_engine->saveItems(&items, | ||
154 | 289 | QList<QtOrganizer::QOrganizerItemDetail::DetailType>(), | ||
155 | 290 | &errorMap, | ||
156 | 291 | &error); | ||
157 | 292 | |||
158 | 293 | QVERIFY(saveResult); | ||
159 | 294 | QCOMPARE(error, QOrganizerManager::NoError); | ||
160 | 295 | QVERIFY(errorMap.isEmpty()); | ||
161 | 296 | QVERIFY(!items[0].id().isNull()); | ||
162 | 297 | |||
163 | 298 | // append new item to be removed after the test | ||
164 | 299 | appendToRemove(items[0].id()); | ||
165 | 300 | |||
166 | 301 | // check if item was created on the default collection | ||
167 | 302 | QOrganizerItemFetchHint hint; | ||
168 | 303 | |||
169 | 304 | QList<QOrganizerItemId> ids; | ||
170 | 305 | ids << items[0].id(); | ||
171 | 306 | qDebug() << "Check for item id:" << ids; | ||
172 | 307 | items = m_engine->items(ids, hint, 0, 0); | ||
173 | 308 | QCOMPARE(items.count(), 1); | ||
174 | 309 | QOrganizerCollection collection = m_engine->defaultCollection(0); | ||
175 | 310 | QCOMPARE(items[0].collectionId(), collection.id()); | ||
176 | 311 | } | ||
177 | 312 | |||
178 | 274 | void testCreateMultipleItemsWithSameCollection() | 313 | void testCreateMultipleItemsWithSameCollection() |
179 | 275 | { | 314 | { |
180 | 276 | static QString displayLabelValue = QStringLiteral("Multiple Item:%1"); | 315 | static QString displayLabelValue = QStringLiteral("Multiple Item:%1"); |
181 | @@ -363,7 +402,11 @@ | |||
182 | 363 | 402 | ||
183 | 364 | // This item will cause error, because the collection ID is invalid | 403 | // This item will cause error, because the collection ID is invalid |
184 | 365 | QOrganizerEvent ev; | 404 | QOrganizerEvent ev; |
186 | 366 | ev.setCollectionId(QOrganizerCollectionId::fromString("1386259057.30874.6@qorganizer")); | 405 | QOrganizerEDSCollectionEngineId *edsCollectionId = new QOrganizerEDSCollectionEngineId("XXXXXX"); |
187 | 406 | QOrganizerCollectionId cid(edsCollectionId); | ||
188 | 407 | QVERIFY(!cid.isNull()); | ||
189 | 408 | QCOMPARE(cid.toString(), QStringLiteral("qtorganizer:eds::XXXXXX")); | ||
190 | 409 | ev.setCollectionId(cid); | ||
191 | 367 | ev.setStartDateTime(QDateTime(QDate(2013, 10, 2), QTime(0,30,0))); | 410 | ev.setStartDateTime(QDateTime(QDate(2013, 10, 2), QTime(0,30,0))); |
192 | 368 | ev.setDisplayLabel(displayLabelValue.arg(2)); | 411 | ev.setDisplayLabel(displayLabelValue.arg(2)); |
193 | 369 | ev.setDescription(descriptionValue.arg(2)); | 412 | ev.setDescription(descriptionValue.arg(2)); |
FAILED: Continuous integration, rev:26 jenkins. qa.ubuntu. com/job/ qtorganizer5- eds-ci/ 64/ jenkins. qa.ubuntu. com/job/ qtorganizer5- eds-trusty- amd64-ci/ 51/console jenkins. qa.ubuntu. com/job/ qtorganizer5- eds-trusty- armhf-ci/ 51/console jenkins. qa.ubuntu. com/job/ qtorganizer5- eds-trusty- i386-ci/ 51/console
http://
Executed test runs:
FAILURE: http://
FAILURE: http://
FAILURE: http://
Click here to trigger a rebuild: s-jenkins. ubuntu- ci:8080/ job/qtorganizer 5-eds-ci/ 64/rebuild
http://