diff options
author | Päivi Rajala <paivi.rajala@nokia.com> | 2012-05-18 18:19:06 +0300 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-05-22 12:25:44 +0200 |
commit | abf50e35c9637788e7ba6e35ed159551397e7d27 (patch) | |
tree | c886a50b3373f810ffc9be8b6c2cdf2bd70c69c4 /src/plugins/organizer/memory/qorganizeritemmemorybackend.cpp | |
parent | d0d0fb70119b799529a27d22d5342e7ac12baf37 (diff) |
Fix handling of multiple recurrence rules in organizer
Previously, if an item had multiple recurrence rules and they produced
duplicate recurrence dates, there were duplicate occurrences. Now
duplicate occurrences are not generated anymore.
Change-Id: Ic95e7d5c832234866936fee8cf04082787e910d2
Reviewed-by: Iiro Kause <iiro.kause@nokia.com>
Diffstat (limited to 'src/plugins/organizer/memory/qorganizeritemmemorybackend.cpp')
-rw-r--r-- | src/plugins/organizer/memory/qorganizeritemmemorybackend.cpp | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/src/plugins/organizer/memory/qorganizeritemmemorybackend.cpp b/src/plugins/organizer/memory/qorganizeritemmemorybackend.cpp index 40a98430b..896688a07 100644 --- a/src/plugins/organizer/memory/qorganizeritemmemorybackend.cpp +++ b/src/plugins/organizer/memory/qorganizeritemmemorybackend.cpp @@ -485,17 +485,19 @@ QList<QOrganizerItem> QOrganizerItemMemoryEngine::internalItemOccurrences(const && ((xrule.limitType() != QOrganizerRecurrenceRule::DateLimit) || (xrule.limitDate() >= realPeriodStart.date()))) { // 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) { + foreach (const QDateTime& xdatetime, xdatetimes) xdates += xdatetime.date(); - } } } } // now generate a list of rdates (from the recurrenceDates and recurrenceRules) - QList<QDateTime> rdates; - foreach (const QDate& rdate, recur.recurrenceDates()) { - rdates += QDateTime(rdate, initialDateTime.time()); - } + + // QMap is used for storing dates, because we don't want to have duplicate dates and + // 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); if (realPeriodStart.isValid()) { QSet<QOrganizerRecurrenceRule> rrules = recur.recurrenceRules(); @@ -503,12 +505,15 @@ QList<QOrganizerItem> QOrganizerItemMemoryEngine::internalItemOccurrences(const if (rrule.frequency() != QOrganizerRecurrenceRule::Invalid && ((rrule.limitType() != QOrganizerRecurrenceRule::DateLimit) || (rrule.limitDate() >= realPeriodStart.date()))) { // we cannot skip it, since it applies in the given time period. - rdates += generateDateTimes(initialDateTime, rrule, realPeriodStart, realPeriodEnd, 50); // max count of 50 is arbitrary... + QList<QDateTime> rdatetimes = generateDateTimes(initialDateTime, rrule, realPeriodStart, realPeriodEnd, 50); // max count of 50 is arbitrary... + foreach (const QDateTime& rdatetime, rdatetimes) + rdateMap.insert(rdatetime, 0); } } } // now order the contents of retn by date - qSort(rdates); + QList<QDateTime> rdates = rdateMap.keys(); + if (initialDateTime.isValid() && !recur.recurrenceDates().isEmpty() && qBinaryFind(rdates, initialDateTime) == rdates.constEnd()) { rdates.prepend(initialDateTime); } |