Merge lp:~renatofilho/qtorganizer5-eds/fix-1240505 into lp:qtorganizer5-eds

Proposed by Renato Araujo Oliveira Filho
Status: Merged
Approved by: Gustavo Pichorim Boiko
Approved revision: 29
Merged at revision: 25
Proposed branch: lp:~renatofilho/qtorganizer5-eds/fix-1240505
Merge into: lp:qtorganizer5-eds
Diff against target: 555 lines (+329/-20)
9 files modified
qorganizer/CMakeLists.txt (+2/-0)
qorganizer/qorganizer-eds-engine.cpp (+46/-3)
qorganizer/qorganizer-eds-engine.h (+4/-0)
qorganizer/qorganizer-eds-enginedata.h (+2/-1)
qorganizer/qorganizer-eds-removebyidrequestdata.cpp (+131/-0)
qorganizer/qorganizer-eds-removebyidrequestdata.h (+55/-0)
qorganizer/qorganizer-eds-removerequestdata.cpp (+11/-8)
qorganizer/qorganizer-eds-removerequestdata.h (+1/-0)
tests/unittest/event-test.cpp (+77/-8)
To merge this branch: bzr merge lp:~renatofilho/qtorganizer5-eds/fix-1240505
Reviewer Review Type Date Requested Status
Gustavo Pichorim Boiko (community) Approve
PS Jenkins bot continuous-integration Approve
Review via email: mp+200436@code.launchpad.net

Commit message

Implemented remove item by id;

To post a comment you must log in.
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
26. By Renato Araujo Oliveira Filho

Added missing files.

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
27. By Renato Araujo Oliveira Filho

Make sure that the item remove signal is fired.

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
28. By Renato Araujo Oliveira Filho

Used Qstring to represet collectionId.
The function QOrganizerCollectionId::fromString does not work if the plugin is not installed.

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
29. By Renato Araujo Oliveira Filho

Emit the itemRemoved signal only once.

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
Revision history for this message
Gustavo Pichorim Boiko (boiko) wrote :

Looks good!

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'qorganizer/CMakeLists.txt'
--- qorganizer/CMakeLists.txt 2013-12-03 18:45:04 +0000
+++ qorganizer/CMakeLists.txt 2014-01-05 21:25:57 +0000
@@ -11,6 +11,7 @@
11 qorganizer-eds-engineid.cpp11 qorganizer-eds-engineid.cpp
12 qorganizer-eds-removecollectionrequestdata.cpp12 qorganizer-eds-removecollectionrequestdata.cpp
13 qorganizer-eds-removerequestdata.cpp13 qorganizer-eds-removerequestdata.cpp
14 qorganizer-eds-removebyidrequestdata.cpp
14 qorganizer-eds-requestdata.cpp15 qorganizer-eds-requestdata.cpp
15 qorganizer-eds-savecollectionrequestdata.cpp16 qorganizer-eds-savecollectionrequestdata.cpp
16 qorganizer-eds-saverequestdata.cpp17 qorganizer-eds-saverequestdata.cpp
@@ -27,6 +28,7 @@
27 qorganizer-eds-engineid.h28 qorganizer-eds-engineid.h
28 qorganizer-eds-removecollectionrequestdata.h29 qorganizer-eds-removecollectionrequestdata.h
29 qorganizer-eds-removerequestdata.h30 qorganizer-eds-removerequestdata.h
31 qorganizer-eds-removebyidrequestdata.h
30 qorganizer-eds-requestdata.h32 qorganizer-eds-requestdata.h
31 qorganizer-eds-savecollectionrequestdata.h33 qorganizer-eds-savecollectionrequestdata.h
32 qorganizer-eds-saverequestdata.h34 qorganizer-eds-saverequestdata.h
3335
=== modified file 'qorganizer/qorganizer-eds-engine.cpp'
--- qorganizer/qorganizer-eds-engine.cpp 2013-12-11 15:23:52 +0000
+++ qorganizer/qorganizer-eds-engine.cpp 2014-01-05 21:25:57 +0000
@@ -24,6 +24,7 @@
24#include "qorganizer-eds-fetchbyidrequestdata.h"24#include "qorganizer-eds-fetchbyidrequestdata.h"
25#include "qorganizer-eds-saverequestdata.h"25#include "qorganizer-eds-saverequestdata.h"
26#include "qorganizer-eds-removerequestdata.h"26#include "qorganizer-eds-removerequestdata.h"
27#include "qorganizer-eds-removebyidrequestdata.h"
27#include "qorganizer-eds-savecollectionrequestdata.h"28#include "qorganizer-eds-savecollectionrequestdata.h"
28#include "qorganizer-eds-removecollectionrequestdata.h"29#include "qorganizer-eds-removecollectionrequestdata.h"
29#include "qorganizer-eds-viewwatcher.h"30#include "qorganizer-eds-viewwatcher.h"
@@ -43,6 +44,7 @@
43#include <QtOrganizer/QOrganizerItemFetchByIdRequest>44#include <QtOrganizer/QOrganizerItemFetchByIdRequest>
44#include <QtOrganizer/QOrganizerItemSaveRequest>45#include <QtOrganizer/QOrganizerItemSaveRequest>
45#include <QtOrganizer/QOrganizerItemRemoveRequest>46#include <QtOrganizer/QOrganizerItemRemoveRequest>
47#include <QtOrganizer/QOrganizerItemRemoveByIdRequest>
46#include <QtOrganizer/QOrganizerCollectionFetchRequest>48#include <QtOrganizer/QOrganizerCollectionFetchRequest>
47#include <QtOrganizer/QOrganizerCollectionSaveRequest>49#include <QtOrganizer/QOrganizerCollectionSaveRequest>
48#include <QtOrganizer/QOrganizerCollectionRemoveRequest>50#include <QtOrganizer/QOrganizerCollectionRemoveRequest>
@@ -457,7 +459,9 @@
457 QOrganizerItem &item = items[i];459 QOrganizerItem &item = items[i];
458 const gchar *uid = static_cast<const gchar*>(g_slist_nth_data(uids, i));460 const gchar *uid = static_cast<const gchar*>(g_slist_nth_data(uids, i));
459461
460 item.setCollectionId(QOrganizerCollectionId::fromString(data->currentCollection()));462 QOrganizerEDSCollectionEngineId *edsCollectionId = new QOrganizerEDSCollectionEngineId(data->currentCollection());
463 item.setCollectionId(QOrganizerCollectionId(edsCollectionId));
464
461 QOrganizerEDSEngineId *eid = new QOrganizerEDSEngineId(data->currentCollection(),465 QOrganizerEDSEngineId *eid = new QOrganizerEDSEngineId(data->currentCollection(),
462 QString::fromUtf8(uid));466 QString::fromUtf8(uid));
463 item.setId(QOrganizerItemId(eid));467 item.setId(QOrganizerItemId(eid));
@@ -497,6 +501,44 @@
497 return true;501 return true;
498}502}
499503
504void QOrganizerEDSEngine::removeItemsByIdAsync(QOrganizerItemRemoveByIdRequest *req)
505{
506 qDebug() << Q_FUNC_INFO;
507 if (req->itemIds().count() == 0) {
508 QOrganizerManagerEngine::updateItemRemoveByIdRequest(req,
509 QOrganizerManager::NoError,
510 QMap<int, QOrganizerManager::Error>(),
511 QOrganizerAbstractRequest::FinishedState);
512 return;
513 }
514
515 RemoveByIdRequestData *data = new RemoveByIdRequestData(this, req);
516 removeItemsByIdAsyncStart(data);
517}
518
519void QOrganizerEDSEngine::removeItemsByIdAsyncStart(RemoveByIdRequestData *data)
520{
521 qDebug() << Q_FUNC_INFO;
522 QString collectionId = data->next();
523 for(; !collectionId.isNull(); collectionId = data->next()) {
524 EClient *client = data->parent()->d->m_sourceRegistry->client(collectionId);
525 data->setClient(client);
526 g_object_unref(client);
527 GSList *ids = data->compIds();
528 GError *gError = 0;
529 e_cal_client_remove_objects_sync(data->client(), ids, E_CAL_OBJ_MOD_ALL, 0, 0);
530 QCoreApplication::processEvents();
531 if (gError) {
532 qWarning() << "Fail to remove Items" << gError->message;
533 g_error_free(gError);
534 gError = 0;
535 }
536 data->commit();
537 }
538 data->finish();
539 delete data;
540}
541
500void QOrganizerEDSEngine::removeItemsAsync(QOrganizerItemRemoveRequest *req)542void QOrganizerEDSEngine::removeItemsAsync(QOrganizerItemRemoveRequest *req)
501{543{
502 qDebug() << Q_FUNC_INFO;544 qDebug() << Q_FUNC_INFO;
@@ -746,6 +788,9 @@
746 case QOrganizerAbstractRequest::ItemRemoveRequest:788 case QOrganizerAbstractRequest::ItemRemoveRequest:
747 removeItemsAsync(qobject_cast<QOrganizerItemRemoveRequest*>(req));789 removeItemsAsync(qobject_cast<QOrganizerItemRemoveRequest*>(req));
748 break;790 break;
791 case QOrganizerAbstractRequest::ItemRemoveByIdRequest:
792 removeItemsByIdAsync(qobject_cast<QOrganizerItemRemoveByIdRequest*>(req));
793 break;
749 case QOrganizerAbstractRequest::CollectionSaveRequest:794 case QOrganizerAbstractRequest::CollectionSaveRequest:
750 saveCollectionAsync(qobject_cast<QOrganizerCollectionSaveRequest*>(req));795 saveCollectionAsync(qobject_cast<QOrganizerCollectionSaveRequest*>(req));
751 break;796 break;
@@ -2019,5 +2064,3 @@
20192064
2020 return comps;2065 return comps;
2021}2066}
2022
2023
20242067
=== modified file 'qorganizer/qorganizer-eds-engine.h'
--- qorganizer/qorganizer-eds-engine.h 2013-12-06 16:24:23 +0000
+++ qorganizer/qorganizer-eds-engine.h 2014-01-05 21:25:57 +0000
@@ -40,6 +40,7 @@
40class FetchByIdRequestData;40class FetchByIdRequestData;
41class SaveRequestData;41class SaveRequestData;
42class RemoveRequestData;42class RemoveRequestData;
43class RemoveByIdRequestData;
43class SaveCollectionRequestData;44class SaveCollectionRequestData;
44class RemoveCollectionRequestData;45class RemoveCollectionRequestData;
45class ViewWatcher;46class ViewWatcher;
@@ -207,6 +208,9 @@
207 static void saveItemsAsyncCreated(GObject *source_object, GAsyncResult *res, SaveRequestData *data);208 static void saveItemsAsyncCreated(GObject *source_object, GAsyncResult *res, SaveRequestData *data);
208 static void saveItemsAsyncModified(GObject *source_object, GAsyncResult *res, SaveRequestData *data);209 static void saveItemsAsyncModified(GObject *source_object, GAsyncResult *res, SaveRequestData *data);
209210
211 void removeItemsByIdAsync(QtOrganizer::QOrganizerItemRemoveByIdRequest *req);
212 static void removeItemsByIdAsyncStart(RemoveByIdRequestData *data);
213
210 void removeItemsAsync(QtOrganizer::QOrganizerItemRemoveRequest *req);214 void removeItemsAsync(QtOrganizer::QOrganizerItemRemoveRequest *req);
211 static void removeItemsAsyncStart(RemoveRequestData *data);215 static void removeItemsAsyncStart(RemoveRequestData *data);
212216
213217
=== modified file 'qorganizer/qorganizer-eds-enginedata.h'
--- qorganizer/qorganizer-eds-enginedata.h 2013-12-01 17:29:50 +0000
+++ qorganizer/qorganizer-eds-enginedata.h 2014-01-05 21:25:57 +0000
@@ -41,8 +41,9 @@
41 template<class K>41 template<class K>
42 void emitSharedSignals(K* cs)42 void emitSharedSignals(K* cs)
43 {43 {
44 Q_FOREACH(QtOrganizer::QOrganizerManagerEngine* engine, m_sharedEngines)44 Q_FOREACH(QtOrganizer::QOrganizerManagerEngine* engine, m_sharedEngines) {
45 cs->emitSignals(engine);45 cs->emitSignals(engine);
46 }
46 }47 }
4748
48 ViewWatcher* watch(const QString &collectionId);49 ViewWatcher* watch(const QString &collectionId);
4950
=== added file 'qorganizer/qorganizer-eds-removebyidrequestdata.cpp'
--- qorganizer/qorganizer-eds-removebyidrequestdata.cpp 1970-01-01 00:00:00 +0000
+++ qorganizer/qorganizer-eds-removebyidrequestdata.cpp 2014-01-05 21:25:57 +0000
@@ -0,0 +1,131 @@
1/*
2 * Copyright 2013 Canonical Ltd.
3 *
4 * This file is part of ubuntu-pim-service.
5 *
6 * contact-service-app is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; version 3.
9 *
10 * contact-service-app is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
18
19#include "qorganizer-eds-removebyidrequestdata.h"
20#include "qorganizer-eds-engineid.h"
21#include "qorganizer-eds-enginedata.h"
22
23#include <QtOrganizer/QOrganizerManagerEngine>
24#include <QtOrganizer/QOrganizerItemRemoveByIdRequest>
25
26using namespace QtOrganizer;
27
28RemoveByIdRequestData::RemoveByIdRequestData(QOrganizerEDSEngine *engine, QtOrganizer::QOrganizerAbstractRequest *req)
29 : RequestData(engine, req),
30 m_sessionStaterd(0),
31 m_currentCompIds(0)
32{
33 Q_FOREACH(const QOrganizerItemId &id, request<QOrganizerItemRemoveByIdRequest>()->itemIds()) {
34 QString strId = id.toString();
35 QString collectionId;
36 if (strId.contains("/")) {
37 collectionId = strId.split("/").first();
38 QSet<QOrganizerItemId> ids = m_pending.value(collectionId);
39 ids << id;
40 m_pending.insert(collectionId, ids);
41 }
42 }
43}
44
45RemoveByIdRequestData::~RemoveByIdRequestData()
46{
47}
48
49void RemoveByIdRequestData::finish(QtOrganizer::QOrganizerManager::Error error)
50{
51 QOrganizerManagerEngine::updateItemRemoveByIdRequest(request<QOrganizerItemRemoveByIdRequest>(),
52 error,
53 QMap<int, QOrganizerManager::Error>(),
54 QOrganizerAbstractRequest::FinishedState);
55 //The signal will be fired by the view watcher. Check ViewWatcher::onObjectsRemoved
56 //emitChangeset(&m_changeSet);
57}
58
59GSList *RemoveByIdRequestData::compIds() const
60{
61 return m_currentCompIds;
62}
63
64void RemoveByIdRequestData::commit()
65{
66 Q_ASSERT(m_sessionStaterd);
67 QOrganizerManagerEngine::updateItemRemoveByIdRequest(request<QOrganizerItemRemoveByIdRequest>(),
68 QtOrganizer::QOrganizerManager::NoError,
69 QMap<int, QOrganizerManager::Error>(),
70 QOrganizerAbstractRequest::ActiveState);
71 reset();
72}
73
74GSList *RemoveByIdRequestData::parseIds(QSet<QOrganizerItemId> iids)
75{
76 GSList *ids = 0;
77 Q_FOREACH(const QOrganizerItemId &iid, iids) {
78 ECalComponentId *id = g_new0(ECalComponentId, 1);
79 id->uid = g_strdup(QOrganizerEDSEngineId::toComponentId(iid).toUtf8().data());
80 id->rid = NULL;
81 ids = g_slist_append(ids, id);
82 }
83
84 return ids;
85}
86
87QString RemoveByIdRequestData::next()
88{
89 Q_ASSERT(!m_sessionStaterd);
90
91 if (m_pending.count() > 0) {
92 m_sessionStaterd = true;
93 m_currentCollectionId = m_pending.keys().first();
94 m_currentIds = m_pending[m_currentCollectionId];
95 m_currentCompIds = parseIds(m_currentIds);
96 m_pending.remove(m_currentCollectionId);
97 return m_currentCollectionId;
98 }
99 return QString(QString::null);
100}
101
102
103void RemoveByIdRequestData::reset()
104{
105 m_currentIds.clear();
106 m_currentCollectionId = QString(QString::null);
107 if (m_currentCompIds) {
108 g_slist_free_full(m_currentCompIds, (GDestroyNotify)e_cal_component_free_id);
109 m_currentCompIds = 0;
110 }
111 m_sessionStaterd = false;
112}
113
114void RemoveByIdRequestData::cancel()
115{
116 Q_ASSERT(m_sessionStaterd);
117 RequestData::cancel();
118 clear();
119}
120
121void RemoveByIdRequestData::clear()
122{
123 reset();
124 m_pending.clear();
125 setClient(0);
126}
127
128QString RemoveByIdRequestData::collectionId() const
129{
130 return m_currentCollectionId;
131}
0132
=== added file 'qorganizer/qorganizer-eds-removebyidrequestdata.h'
--- qorganizer/qorganizer-eds-removebyidrequestdata.h 1970-01-01 00:00:00 +0000
+++ qorganizer/qorganizer-eds-removebyidrequestdata.h 2014-01-05 21:25:57 +0000
@@ -0,0 +1,55 @@
1/*
2 * Copyright 2013 Canonical Ltd.
3 *
4 * This file is part of ubuntu-pim-service.
5 *
6 * contact-service-app is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; version 3.
9 *
10 * contact-service-app is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifndef __QORGANIZER_EDS_REMOVEBYIDQUESTDATA_H__
20#define __QORGANIZER_EDS_REMOVEBYIDQUESTDATA_H__
21
22#include "qorganizer-eds-requestdata.h"
23
24#include <glib.h>
25
26class RemoveByIdRequestData : public RequestData
27{
28public:
29 RemoveByIdRequestData(QOrganizerEDSEngine *engine, QtOrganizer::QOrganizerAbstractRequest *req);
30 ~RemoveByIdRequestData();
31
32 QString collectionId() const;
33
34 void finish(QtOrganizer::QOrganizerManager::Error error = QtOrganizer::QOrganizerManager::NoError);
35
36 GSList *compIds() const;
37
38 QString next();
39 void commit();
40 virtual void cancel();
41
42private:
43 QHash<QString, QSet<QtOrganizer::QOrganizerItemId> > m_pending;
44 QSet<QtOrganizer::QOrganizerItemId> m_currentIds;
45 QString m_currentCollectionId;
46
47 bool m_sessionStaterd;
48 GSList *m_currentCompIds;
49
50 void reset();
51 void clear();
52 GSList *parseIds(QSet<QtOrganizer::QOrganizerItemId> iids);
53};
54
55#endif
056
=== modified file 'qorganizer/qorganizer-eds-removerequestdata.cpp'
--- qorganizer/qorganizer-eds-removerequestdata.cpp 2013-12-11 13:16:50 +0000
+++ qorganizer/qorganizer-eds-removerequestdata.cpp 2014-01-05 21:25:57 +0000
@@ -74,7 +74,8 @@
74 QMap<int, QOrganizerManager::Error>(),74 QMap<int, QOrganizerManager::Error>(),
75 QOrganizerAbstractRequest::FinishedState);75 QOrganizerAbstractRequest::FinishedState);
7676
77 emitChangeset(&m_changeSet);77 //The signal will be fired by the view watcher. Check ViewWatcher::onObjectsRemoved
78 //emitChangeset(&m_changeSet);
78}79}
7980
80GSList *RemoveRequestData::compIds() const81GSList *RemoveRequestData::compIds() const
@@ -89,10 +90,7 @@
89 QtOrganizer::QOrganizerManager::NoError,90 QtOrganizer::QOrganizerManager::NoError,
90 QMap<int, QOrganizerManager::Error>(),91 QMap<int, QOrganizerManager::Error>(),
91 QOrganizerAbstractRequest::ActiveState);92 QOrganizerAbstractRequest::ActiveState);
9293 reset();
93 m_changeSet.insertRemovedItems(m_currentIds);
94 m_currentCollectionId = QOrganizerCollectionId();
95 clear();
96}94}
9795
98QOrganizerCollectionId RemoveRequestData::next()96QOrganizerCollectionId RemoveRequestData::next()
@@ -116,12 +114,11 @@
116 clear();114 clear();
117}115}
118116
119void RemoveRequestData::clear()117void RemoveRequestData::reset()
120{118{
121 m_changeSet.clearAll();119 m_currentCollectionId = QOrganizerCollectionId();
122 m_currentIds.clear();120 m_currentIds.clear();
123121
124 setClient(0);
125 if (m_currentCompIds) {122 if (m_currentCompIds) {
126 g_slist_free_full(m_currentCompIds, (GDestroyNotify)e_cal_component_free_id);123 g_slist_free_full(m_currentCompIds, (GDestroyNotify)e_cal_component_free_id);
127 m_currentCompIds = 0;124 m_currentCompIds = 0;
@@ -129,6 +126,12 @@
129 m_sessionStaterd = false;126 m_sessionStaterd = false;
130}127}
131128
129void RemoveRequestData::clear()
130{
131 reset();
132 setClient(0);
133}
134
132QOrganizerCollectionId RemoveRequestData::collectionId() const135QOrganizerCollectionId RemoveRequestData::collectionId() const
133{136{
134 return m_currentCollectionId;137 return m_currentCollectionId;
135138
=== modified file 'qorganizer/qorganizer-eds-removerequestdata.h'
--- qorganizer/qorganizer-eds-removerequestdata.h 2013-12-01 21:48:44 +0000
+++ qorganizer/qorganizer-eds-removerequestdata.h 2014-01-05 21:25:57 +0000
@@ -50,6 +50,7 @@
50 QtOrganizer::QOrganizerCollectionId m_currentCollectionId;50 QtOrganizer::QOrganizerCollectionId m_currentCollectionId;
5151
52 void clear();52 void clear();
53 void reset();
53 GSList* takeItemsIds(QtOrganizer::QOrganizerCollectionId collectionId);54 GSList* takeItemsIds(QtOrganizer::QOrganizerCollectionId collectionId);
54};55};
5556
5657
=== modified file 'tests/unittest/event-test.cpp'
--- tests/unittest/event-test.cpp 2013-12-11 13:16:50 +0000
+++ tests/unittest/event-test.cpp 2014-01-05 21:25:57 +0000
@@ -37,17 +37,22 @@
37 static const QString defaultTaskCollectionName;37 static const QString defaultTaskCollectionName;
38 static const QString collectionTypePropertyName;38 static const QString collectionTypePropertyName;
39 static const QString taskListTypeName;39 static const QString taskListTypeName;
40 static int signalIndex;
4041
41 QDateTime m_itemRemovedTime;42 QDateTime m_itemRemovedTime;
42 QDateTime m_requestFinishedTime;43 QDateTime m_requestFinishedTime;
43 QOrganizerEDSEngine *m_engine;44 QOrganizerEDSEngine *m_engine;
44 QOrganizerCollection m_collection;45 QOrganizerCollection m_collection;
4546
47
46private Q_SLOTS:48private Q_SLOTS:
47 void init()49 void init()
48 {50 {
49 EDSBaseTest::init(0);51 EDSBaseTest::init(0);
5052
53 signalIndex = 0;
54 m_itemRemovedTime = QDateTime();
55 m_requestFinishedTime = QDateTime();
51 m_engine = QOrganizerEDSEngine::createEDSEngine(QMap<QString, QString>());56 m_engine = QOrganizerEDSEngine::createEDSEngine(QMap<QString, QString>());
5257
53 QtOrganizer::QOrganizerManager::Error error;58 QtOrganizer::QOrganizerManager::Error error;
@@ -69,12 +74,16 @@
69 void itemRemoved()74 void itemRemoved()
70 {75 {
71 m_itemRemovedTime = QDateTime::currentDateTime();76 m_itemRemovedTime = QDateTime::currentDateTime();
77 // avoid both signals to be fired at the same time
78 QTest::qSleep(100);
72 }79 }
7380
74 void requestFinished(QOrganizerAbstractRequest::State state)81 void requestFinished(QOrganizerAbstractRequest::State state)
75 {82 {
76 if (state == QOrganizerAbstractRequest::FinishedState) {83 if (state == QOrganizerAbstractRequest::FinishedState) {
77 m_requestFinishedTime = QDateTime::currentDateTime();84 m_requestFinishedTime = QDateTime::currentDateTime();
85 // avoid both signals to be fired at the same time
86 QTest::qSleep(100);
78 }87 }
79 }88 }
8089
@@ -177,15 +186,13 @@
177 &error);186 &error);
178 QVERIFY(saveResult);187 QVERIFY(saveResult);
179 QCOMPARE(error, QOrganizerManager::NoError);188 QCOMPARE(error, QOrganizerManager::NoError);
189 QCOMPARE(items.size(), 1);
180 QVERIFY(errorMap.isEmpty());190 QVERIFY(errorMap.isEmpty());
181 QVERIFY(!items[0].id().isNull());191 QVERIFY(!items[0].id().isNull());
182192
183 // append new item to be removed after the test193 // append new item to be removed after the test
184 appendToRemove(items[0].id());194 appendToRemove(items[0].id());
185195
186 m_itemRemovedTime = QDateTime();
187 m_requestFinishedTime = QDateTime();
188
189 QOrganizerItemRemoveRequest req;196 QOrganizerItemRemoveRequest req;
190 connect(&req, SIGNAL(stateChanged(QOrganizerAbstractRequest::State)),197 connect(&req, SIGNAL(stateChanged(QOrganizerAbstractRequest::State)),
191 this, SLOT(requestFinished(QOrganizerAbstractRequest::State)));198 this, SLOT(requestFinished(QOrganizerAbstractRequest::State)));
@@ -197,9 +204,71 @@
197 m_engine->waitForRequestFinished(&req, -1);204 m_engine->waitForRequestFinished(&req, -1);
198205
199 // check if the signal item removed was fired after the request finish206 // check if the signal item removed was fired after the request finish
200 QVERIFY(!m_itemRemovedTime.isValid());207 QTRY_VERIFY(m_requestFinishedTime.isValid());
201 QVERIFY(m_requestFinishedTime.isValid());208 QTRY_VERIFY(m_itemRemovedTime.isValid());
202 QVERIFY(m_requestFinishedTime > m_itemRemovedTime);209 QVERIFY(m_itemRemovedTime > m_requestFinishedTime);
210 }
211
212 void testRemoveItemById()
213 {
214 static QString displayLabelValue = QStringLiteral("event to be removed");
215 static QString descriptionValue = QStringLiteral("removable event");
216
217 QOrganizerTodo todo;
218 todo.setCollectionId(m_collection.id());
219 todo.setStartDateTime(QDateTime(QDate(2013, 9, 3), QTime(0,30,0)));
220 todo.setDisplayLabel(displayLabelValue);
221 todo.setDescription(descriptionValue);
222
223 QtOrganizer::QOrganizerManager::Error error;
224 QMap<int, QtOrganizer::QOrganizerManager::Error> errorMap;
225 QList<QOrganizerItem> items;
226 items << todo;
227 bool saveResult = m_engine->saveItems(&items,
228 QList<QtOrganizer::QOrganizerItemDetail::DetailType>(),
229 &errorMap,
230 &error);
231 QVERIFY(saveResult);
232 QCOMPARE(error, QOrganizerManager::NoError);
233 QVERIFY(errorMap.isEmpty());
234 QOrganizerItemId id = items[0].id();
235 QVERIFY(!id.isNull());
236
237 // append new item to be removed after the test
238 appendToRemove(id);
239
240 QOrganizerItemRemoveByIdRequest req;
241
242 connect(&req, SIGNAL(stateChanged(QOrganizerAbstractRequest::State)),
243 this, SLOT(requestFinished(QOrganizerAbstractRequest::State)));
244 connect(m_engine, SIGNAL(itemsRemoved(QList<QOrganizerItemId>)),
245 this, SLOT(itemRemoved()));
246 req.setItemId(id);
247
248 m_engine->startRequest(&req);
249 m_engine->waitForRequestFinished(&req, -1);
250
251 // check if the signal item removed was fired after the request finish
252 QTRY_VERIFY(m_requestFinishedTime.isValid());
253 QTRY_VERIFY(m_itemRemovedTime.isValid());
254 QVERIFY(m_itemRemovedTime > m_requestFinishedTime);
255
256 // check if item was removed
257 QOrganizerItemSortOrder sort;
258 QOrganizerItemFetchHint hint;
259 QOrganizerItemIdFilter filter;
260
261 QList<QOrganizerItemId> ids;
262 ids << id;
263 filter.setIds(ids);
264 items = m_engine->items(filter,
265 QDateTime(),
266 QDateTime(),
267 10,
268 sort,
269 hint,
270 &error);
271 QCOMPARE(items.count(), 0);
203 }272 }
204273
205 void testCreateMultipleItemsWithSameCollection()274 void testCreateMultipleItemsWithSameCollection()
@@ -325,7 +394,7 @@
325const QString EventTest::defaultTaskCollectionName = QStringLiteral("TEST_EVENT_COLLECTION TASK LIST");394const QString EventTest::defaultTaskCollectionName = QStringLiteral("TEST_EVENT_COLLECTION TASK LIST");
326const QString EventTest::collectionTypePropertyName = QStringLiteral("collection-type");395const QString EventTest::collectionTypePropertyName = QStringLiteral("collection-type");
327const QString EventTest::taskListTypeName = QStringLiteral("Task List");396const QString EventTest::taskListTypeName = QStringLiteral("Task List");
328397int EventTest::signalIndex = 0;
329398
330QTEST_MAIN(EventTest)399QTEST_MAIN(EventTest)
331400

Subscribers

People subscribed via source and target branches