summaryrefslogtreecommitdiffstats
path: root/src/plugins/organizer/memory/qorganizeritemmemorybackend.cpp
diff options
context:
space:
mode:
authorMatt Vogt <matthew.vogt@jollamobile.com>2014-06-18 09:34:56 +1000
committerMatthew Vogt <matthew.vogt@qinetic.com.au>2014-06-24 03:11:16 +0200
commit98b975206c638f9b624bfa184367880bfc08949a (patch)
tree606650fd23e837258ed61bc2c4b46c647480bb43 /src/plugins/organizer/memory/qorganizeritemmemorybackend.cpp
parent2c771de92d5c47d6ac58ab5f5b3e709b915492f3 (diff)
Fix organizer tests in outlying timezones
Fix test failures resulting from incorrect handling of local and UTC time, which fail only in timezones some distance from UTC. Change-Id: I8ddecf501a4db46aca07a1e5d5db7dc5eb804b78 Reviewed-by: Alex Blasche <alexander.blasche@digia.com> Reviewed-by: Michael Krasnyk <michael.krasnyk@gmail.com> Reviewed-by: Christopher Adams <chris.adams@jollamobile.com>
Diffstat (limited to 'src/plugins/organizer/memory/qorganizeritemmemorybackend.cpp')
-rw-r--r--src/plugins/organizer/memory/qorganizeritemmemorybackend.cpp23
1 files changed, 15 insertions, 8 deletions
diff --git a/src/plugins/organizer/memory/qorganizeritemmemorybackend.cpp b/src/plugins/organizer/memory/qorganizeritemmemorybackend.cpp
index ac95c8cf0..344880906 100644
--- a/src/plugins/organizer/memory/qorganizeritemmemorybackend.cpp
+++ b/src/plugins/organizer/memory/qorganizeritemmemorybackend.cpp
@@ -479,14 +479,16 @@ QList<QOrganizerItem> QOrganizerItemMemoryEngine::internalItemOccurrences(const
xdates += xdate;
}
if (realPeriodStart.isValid()) {
+ // Dates are interpreted as local time, but realPeriodStart is UTC
+ const QDate localStartDate(realPeriodStart.toLocalTime().date());
QSet<QOrganizerRecurrenceRule> xrules = recur.exceptionRules();
foreach (const QOrganizerRecurrenceRule& xrule, xrules) {
if (xrule.frequency() != QOrganizerRecurrenceRule::Invalid
- && ((xrule.limitType() != QOrganizerRecurrenceRule::DateLimit) || (xrule.limitDate() >= realPeriodStart.date()))) {
+ && ((xrule.limitType() != QOrganizerRecurrenceRule::DateLimit) || (xrule.limitDate() >= localStartDate))) {
// we cannot skip it, since it applies in the given time period.
QList<QDateTime> xdatetimes = generateDateTimes(initialDateTime, xrule, realPeriodStart, realPeriodEnd, 50); // max count of 50 is arbitrary...
foreach (const QDateTime& xdatetime, xdatetimes)
- xdates += xdatetime.date();
+ xdates += xdatetime.toLocalTime().date();
}
}
}
@@ -496,14 +498,18 @@ QList<QOrganizerItem> QOrganizerItemMemoryEngine::internalItemOccurrences(const
// we want to have dates sorted
// Only key of the map is relevant (QDateTime), the value (int) is not used
QMap<QDateTime, int> rdateMap;
- foreach (const QDate& rdate, recur.recurrenceDates())
- rdateMap.insert(QDateTime(rdate, initialDateTime.time()), 0);
+ foreach (const QDate& rdate, recur.recurrenceDates()) {
+ QDateTime dt(initialDateTime.toLocalTime());
+ dt.setDate(rdate);
+ rdateMap.insert(dt.toUTC(), 0);
+ }
if (realPeriodStart.isValid()) {
+ const QDate localStartDate(realPeriodStart.toLocalTime().date());
QSet<QOrganizerRecurrenceRule> rrules = recur.recurrenceRules();
foreach (const QOrganizerRecurrenceRule& rrule, rrules) {
if (rrule.frequency() != QOrganizerRecurrenceRule::Invalid
- && ((rrule.limitType() != QOrganizerRecurrenceRule::DateLimit) || (rrule.limitDate() >= realPeriodStart.date()))) {
+ && ((rrule.limitType() != QOrganizerRecurrenceRule::DateLimit) || (rrule.limitDate() >= localStartDate))) {
// we cannot skip it, since it applies in the given time period.
QList<QDateTime> rdatetimes = generateDateTimes(initialDateTime, rrule, realPeriodStart, realPeriodEnd, 50); // max count of 50 is arbitrary...
foreach (const QDateTime& rdatetime, rdatetimes)
@@ -521,17 +527,18 @@ QList<QOrganizerItem> QOrganizerItemMemoryEngine::internalItemOccurrences(const
// now for each rdate which isn't also an xdate
foreach (const QDateTime& rdate, rdates) {
if (rdate >= realPeriodStart && rdate <= realPeriodEnd) {
- if (!xdates.contains(rdate.date())) {
+ const QDate localRDate(rdate.toLocalTime().date());
+ if (!xdates.contains(localRDate)) {
// generate the required instance and add it to the return list.
retn.append(QOrganizerManagerEngine::generateOccurrence(parentItem, rdate));
} else if (includeExceptions) {
for (int i = 0; i < xoccurrences.size(); i++) {
QOrganizerItemParent parentDetail = xoccurrences[i].detail(QOrganizerItemDetail::TypeParent);
- if (parentDetail.originalDate() == rdate.date())
+ if (parentDetail.originalDate() == localRDate)
retn.append(xoccurrences[i]);
}
} else if (exceptionDates) {
- exceptionDates->append(rdate.date());
+ exceptionDates->append(localRDate);
}
}
}