diff options
author | Matt Vogt <matthew.vogt@jollamobile.com> | 2014-06-18 09:34:56 +1000 |
---|---|---|
committer | Matthew Vogt <matthew.vogt@qinetic.com.au> | 2014-06-24 03:11:16 +0200 |
commit | 98b975206c638f9b624bfa184367880bfc08949a (patch) | |
tree | 606650fd23e837258ed61bc2c4b46c647480bb43 /src/plugins/organizer/memory/qorganizeritemmemorybackend.cpp | |
parent | 2c771de92d5c47d6ac58ab5f5b3e709b915492f3 (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.cpp | 23 |
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); } } } |