Page MenuHomePhorge

D48.1775614230.diff
No OneTemporary

Authored By
Unknown
Size
4 KB
Referenced Files
None
Subscribers
None

D48.1775614230.diff

Index: akonadi/calendar/calendarbase.cpp
===================================================================
--- akonadi/calendar/calendarbase.cpp
+++ akonadi/calendar/calendarbase.cpp
@@ -143,6 +143,7 @@
QString MultiCalendar::calendar(const KCalCore::Incidence::Ptr &incidence) const
{
+ kDebug() << incidence->instanceIdentifier() << mCalendarByIncidence.value(incidence, QString());
Q_ASSERT(mCalendarByIncidence.contains(incidence));
return mCalendarByIncidence.value(incidence);
}
@@ -269,22 +270,31 @@
}
}
+ kDebug() << "inserting" << incidence->instanceIdentifier() << item.id();
+
mItemById.insert(item.id(), item);
mItemIdByUniqueInstanceIdentifier.insert(uniqueInstanceIdentifier, item.id());
- mItemsByCollection.insert(item.storageCollectionId(), item);
-
- // we need item in storageCollection, to find exceptions
- if (item.parentCollection().id() != item.storageCollectionId()) {
- mItemsByCollection.insert(item.parentCollection().id(), item);
- }
+ mItemsByCollection.insert(item.parentCollection().id(), item);
incidence->setCustomProperty("VOLATILE", "AKONADI-ID", QString::number(item.id()));
- // Must be the last one due to re-entrancy
- const bool result = q->MultiCalendar::addIncidenceToCalendar(calendar, incidence);
- if (!result) {
- kError() << "Error adding incidence " << itemToString(item);
- Q_ASSERT(false);
+
+ if ((item.parentCollection().id() != item.storageCollectionId()) && (incidence->hasRecurrenceId() || incidence->recurs())) {
+ mItemsByCollection.insert(item.storageCollectionId(), item);
+ const bool result = q->MultiCalendar::addIncidenceToCalendar(QString::number(item.storageCollectionId()), incidence);
+ if (!result) {
+ kError() << "Error adding incidence " << itemToString(item);
+ Q_ASSERT(false);
+ }
+ } else {
+ // Must be the last one due to re-entrancy
+ const bool result = q->MultiCalendar::addIncidenceToCalendar(calendar, incidence);
+ if (!result) {
+ kError() << "Error adding incidence " << itemToString(item);
+ Q_ASSERT(false);
+ }
}
+
+
}
void CalendarBasePrivate::collectionFetchResult(KJob* job)
@@ -327,7 +337,10 @@
}
Q_ASSERT(item.storageCollectionId() > 0);
- const QString calendar = QString::number(item.parentCollection().id());
+ QString calendar = QString::number(item.parentCollection().id());
+ if ((item.parentCollection().id() != item.storageCollectionId()) && (tmp->hasRecurrenceId() || tmp->recurs())) {
+ calendar = QString::number(item.storageCollectionId());
+ }
const QString uniqueInstanceIdentifier = calendar + tmp->instanceIdentifier();
// We want the one stored in the calendar
@@ -336,10 +349,7 @@
// Null incidence means it was deleted via CalendarBase::deleteIncidence(), but then
// the ETMCalendar received the monitor notification and tried to delete it again.
if (incidence) {
- // kDebug() << "Deleting incidence from calendar .id=" << item.id() << "uid=" << incidence->uid();
- mItemIdByUniqueInstanceIdentifier.remove(uniqueInstanceIdentifier);
-
- mItemsByCollection.remove(item.parentCollection().id(), item);
+ // kDebug() << "Deleting incidence from calendar .id=" << item.id() << "uid=" << incidence->instanceIdentifier();
// Must be the last one due to re-entrancy
// This will trigger the removal of all exceptions via deleteIncidence
@@ -349,11 +359,20 @@
Q_ASSERT(false);
}
+ mItemIdByUniqueInstanceIdentifier.remove(uniqueInstanceIdentifier);
+
+ mItemsByCollection.remove(item.parentCollection().id(), item);
+
// only remove ItemById entry if all incidences are deleted
// we need item in storageCollection, to find exceptions
- if (mItemIdByUniqueInstanceIdentifier.key(item.id(), QString()).isEmpty()) {
+ if ((incidence->hasRecurrenceId() || incidence->recurs()) && (item.storageCollectionId() != item.parentCollection().id())) {
+ if (mItemIdByUniqueInstanceIdentifier.key(item.id(), QString()).isEmpty()) {
+ mItemById.remove(item.id());
+ mItemsByCollection.remove(item.storageCollectionId(), item);
+ }
+
+ } else {
mItemById.remove(item.id());
- mItemsByCollection.remove(item.storageCollectionId(), item);
}
} else {
kWarning() << "CalendarBase::internalRemove2: incidence is null, item.id=" << itemToString(item);

File Metadata

Mime Type
text/plain
Expires
Wed, Apr 8, 2:10 AM (5 d, 7 h ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
18834335
Default Alt Text
D48.1775614230.diff (4 KB)

Event Timeline