Merge lp:~renatofilho/qtorganizer5-eds/fix-all-dayevents into lp:qtorganizer5-eds

Proposed by Renato Araujo Oliveira Filho
Status: Merged
Approved by: Bill Filler
Approved revision: 91
Merged at revision: 94
Proposed branch: lp:~renatofilho/qtorganizer5-eds/fix-all-dayevents
Merge into: lp:qtorganizer5-eds
Prerequisite: lp:~renatofilho/qtorganizer5-eds/fix-query-with-detached-events
Diff against target: 152 lines (+113/-2)
2 files modified
organizer/qorganizer-eds-engine.cpp (+26/-2)
tests/unittest/event-test.cpp (+87/-0)
To merge this branch: bzr merge lp:~renatofilho/qtorganizer5-eds/fix-all-dayevents
Reviewer Review Type Date Requested Status
PS Jenkins bot continuous-integration Approve
Ubuntu Phablet Team Pending
Review via email: mp+287973@code.launchpad.net

Commit message

Fix qdatetime value before convert it to time_t.
Update event end time if saving event with startDate > endDate;

To post a comment you must log in.
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'organizer/qorganizer-eds-engine.cpp'
2--- organizer/qorganizer-eds-engine.cpp 2016-03-03 17:20:40 +0000
3+++ organizer/qorganizer-eds-engine.cpp 2016-03-03 17:20:40 +0000
4@@ -1340,6 +1340,10 @@
5 *tzId = QByteArray(icaltimezone_get_tzid(timezone));
6 return icaltime_from_timet_with_zone(finalDate.toTime_t(), allDay, timezone);
7 } else {
8+ if (!finalDate.isValid()) {
9+ finalDate = QDateTime(finalDate.date(),
10+ allDay || !finalDate.time().isValid() ? QTime(0, 0, 0) : finalDate.time());
11+ }
12 *tzId = "";
13 return icaltime_from_timet(finalDate.toTime_t(), allDay);
14 }
15@@ -2078,8 +2082,18 @@
16 {
17 QOrganizerEventTime etr = item.detail(QOrganizerItemDetail::TypeEventTime);
18 if (!etr.isEmpty()) {
19+ QDateTime eventEndDateTime = etr.endDateTime();
20+ if (etr.startDateTime() > eventEndDateTime) {
21+ eventEndDateTime = etr.startDateTime();
22+ }
23+
24+ if (etr.isAllDay() &&
25+ (eventEndDateTime.date() == etr.startDateTime().date())) {
26+ eventEndDateTime = etr.startDateTime().addDays(1);
27+ }
28+
29 QByteArray tzId;
30- struct icaltimetype ict = fromQDateTime(etr.endDateTime(), etr.isAllDay(), &tzId);
31+ struct icaltimetype ict = fromQDateTime(eventEndDateTime, etr.isAllDay(), &tzId);
32 ECalComponentDateTime dt;
33 dt.tzid = tzId.isEmpty() ? NULL : tzId.constData();
34 dt.value = &ict;
35@@ -2270,8 +2284,18 @@
36 {
37 QOrganizerTodoTime ttr = item.detail(QOrganizerItemDetail::TypeTodoTime);
38 if (!ttr.isEmpty() && !ttr.dueDateTime().isNull()) {
39+ QDateTime dueDateTime = ttr.dueDateTime();
40+ if (ttr.startDateTime() > dueDateTime) {
41+ dueDateTime = ttr.startDateTime();
42+ }
43+
44+ if (ttr.isAllDay() &&
45+ (dueDateTime.date() == ttr.startDateTime().date())) {
46+ dueDateTime = ttr.startDateTime().addDays(1);
47+ }
48+
49 QByteArray tzId;
50- struct icaltimetype ict = fromQDateTime(ttr.dueDateTime(), ttr.isAllDay(), &tzId);
51+ struct icaltimetype ict = fromQDateTime(dueDateTime, ttr.isAllDay(), &tzId);
52 ECalComponentDateTime dt;
53 dt.tzid = tzId.isEmpty() ? NULL : tzId.constData();
54 dt.value = &ict;
55
56=== modified file 'tests/unittest/event-test.cpp'
57--- tests/unittest/event-test.cpp 2016-03-03 17:20:40 +0000
58+++ tests/unittest/event-test.cpp 2016-03-03 17:20:40 +0000
59@@ -578,6 +578,93 @@
60 QCOMPARE(eventResult.endDateTime().time(), QTime(0, 0, 0));
61 }
62
63+ void testModifyAllDayEvent()
64+ {
65+ static QString displayLabelValue = QStringLiteral("All day title");
66+ static QString descriptionValue = QStringLiteral("All day description");
67+
68+ QDateTime eventDateTime = QDateTime(QDate(2013, 9, 3), QTime(0,30,0));
69+ QOrganizerEvent event;
70+ event.setStartDateTime(eventDateTime);
71+ event.setEndDateTime(eventDateTime.addDays(1));
72+ event.setDisplayLabel(displayLabelValue);
73+ event.setDescription(descriptionValue);
74+ event.setAllDay(true);
75+
76+ QtOrganizer::QOrganizerManager::Error error;
77+ QMap<int, QtOrganizer::QOrganizerManager::Error> errorMap;
78+ QList<QOrganizerItem> items;
79+ items << event;
80+ bool saveResult = m_engine->saveItems(&items,
81+ QList<QtOrganizer::QOrganizerItemDetail::DetailType>(),
82+ &errorMap,
83+ &error);
84+ QVERIFY(saveResult);
85+
86+ QOrganizerEvent eventResult = static_cast<QOrganizerEvent>(items[0]);
87+ eventResult.setDescription(QStringLiteral("New description"));
88+ items.clear();
89+ items << eventResult;
90+ saveResult = m_engine->saveItems(&items,
91+ QList<QtOrganizer::QOrganizerItemDetail::DetailType>(),
92+ &errorMap,
93+ &error);
94+
95+ QOrganizerItemFetchHint hint;
96+ QList<QOrganizerItemId> ids;
97+ ids << items[0].id();
98+ items = m_engine->items(ids, hint, &errorMap, &error);
99+ QCOMPARE(items.count(), 1);
100+
101+ eventResult = static_cast<QOrganizerEvent>(items[0]);
102+ QCOMPARE(eventResult.description(), QStringLiteral("New description"));
103+ QCOMPARE(eventResult.isAllDay(), true);
104+ QCOMPARE(eventResult.startDateTime().date(), eventDateTime.date());
105+ QCOMPARE(eventResult.startDateTime().time(), QTime(0, 0, 0));
106+ QCOMPARE(eventResult.endDateTime().date(), eventDateTime.date().addDays(1));
107+ QCOMPARE(eventResult.endDateTime().time(), QTime(0, 0, 0));
108+ }
109+
110+ void testCreateAllDayEventWithInvalidEndDate()
111+ {
112+ static QString displayLabelValue = QStringLiteral("All day title");
113+ static QString descriptionValue = QStringLiteral("All day description");
114+
115+ QDateTime eventDateTime = QDateTime(QDate(2013, 9, 3), QTime(0,30,0));
116+ QOrganizerEvent event;
117+ event.setStartDateTime(eventDateTime);
118+ event.setEndDateTime(eventDateTime.addDays(-10));
119+ event.setDisplayLabel(displayLabelValue);
120+ event.setDescription(descriptionValue);
121+ event.setAllDay(true);
122+
123+ QtOrganizer::QOrganizerManager::Error error;
124+ QMap<int, QtOrganizer::QOrganizerManager::Error> errorMap;
125+ QList<QOrganizerItem> items;
126+ items << event;
127+ bool saveResult = m_engine->saveItems(&items,
128+ QList<QtOrganizer::QOrganizerItemDetail::DetailType>(),
129+ &errorMap,
130+ &error);
131+ QVERIFY(saveResult);
132+ QCOMPARE(error, QOrganizerManager::NoError);
133+ QVERIFY(errorMap.isEmpty());
134+ QOrganizerItemId id = items[0].id();
135+ QVERIFY(!id.isNull());
136+
137+ QOrganizerItemFetchHint hint;
138+ QList<QOrganizerItemId> ids;
139+ ids << items[0].id();
140+ items = m_engine->items(ids, hint, &errorMap, &error);
141+ QCOMPARE(items.count(), 1);
142+
143+ QOrganizerEvent eventResult = static_cast<QOrganizerEvent>(items[0]);
144+ QCOMPARE(eventResult.isAllDay(), true);
145+ QCOMPARE(eventResult.startDateTime().date(), eventDateTime.date());
146+ QCOMPARE(eventResult.startDateTime().time(), QTime(0, 0, 0));
147+ QCOMPARE(eventResult.endDateTime().date(), eventDateTime.date().addDays(1));
148+ QCOMPARE(eventResult.endDateTime().time(), QTime(0, 0, 0));
149+ }
150
151 void testCreateTodoEventWithStartDate()
152 {

Subscribers

People subscribed via source and target branches