summaryrefslogtreecommitdiffstats
path: root/src/plugins/organizer/memory/qorganizeritemmemorybackend.cpp
diff options
context:
space:
mode:
authorPäivi Rajala <paivi.rajala@nokia.com>2012-05-18 18:19:06 +0300
committerQt by Nokia <qt-info@nokia.com>2012-05-22 12:25:44 +0200
commitabf50e35c9637788e7ba6e35ed159551397e7d27 (patch)
treec886a50b3373f810ffc9be8b6c2cdf2bd70c69c4 /src/plugins/organizer/memory/qorganizeritemmemorybackend.cpp
parentd0d0fb70119b799529a27d22d5342e7ac12baf37 (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.cpp21
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);
}