Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Merge branch 'jb52954' into 'master'
Handle Google downsynced all day event exceptions

See merge request mer-core/buteo-sync-plugins-social!87
  • Loading branch information
llewelld committed Feb 5, 2021
2 parents 22aac88 + b05a089 commit b6f3b38
Showing 1 changed file with 21 additions and 5 deletions.
26 changes: 21 additions & 5 deletions src/google/google-calendars/googlecalendarsyncadaptor.cpp
Expand Up @@ -385,8 +385,16 @@ QJsonArray recurrenceArray(KCalendarCore::Event::Ptr event, KCalendarCore::ICalF

QDateTime parseRecurrenceId(const QJsonObject &originalStartTime)
{
QString recurrenceIdStr = originalStartTime.value(QLatin1String("dateTime")).toVariant().toString();
QString recurrenceIdTzStr = originalStartTime.value(QLatin1String("timeZone")).toVariant().toString();
QString recurrenceIdStr;
QString recurrenceIdTzStr;

if (originalStartTime.contains(QLatin1String("date"))) {
recurrenceIdStr = originalStartTime.value(QLatin1String("date")).toVariant().toString();
} else {
recurrenceIdStr = originalStartTime.value(QLatin1String("dateTime")).toVariant().toString();
recurrenceIdTzStr = originalStartTime.value(QLatin1String("timeZone")).toVariant().toString();
}

QDateTime recurrenceId = QDateTime::fromString(recurrenceIdStr, Qt::ISODate);
if (!recurrenceIdTzStr.isEmpty()) {
recurrenceId = recurrenceId.toTimeZone(QTimeZone(recurrenceIdTzStr.toLatin1()));
Expand Down Expand Up @@ -2622,9 +2630,17 @@ bool GoogleCalendarSyncAdaptor::applyRemoteDeleteOccurence(const QString &eventI
SOCIALD_LOG_DEBUG("Occurrence deleted remotely:" << eventId << "for recurrenceId:" << recurrenceId.toString());
KCalendarCore::Event::Ptr event = allLocalEventsMap.value(parentId);
if (event) {
event->startUpdates();
event->recurrence()->addExDateTime(recurrenceId);
event->endUpdates();
if (recurrenceId.isValid()) {
event->startUpdates();
if (event->allDay()) {
event->recurrence()->addExDate(recurrenceId.date());
} else {
event->recurrence()->addExDateTime(recurrenceId);
}
event->endUpdates();
} else {
flagDeleteFailure(event->uid());
}
} else {
// The parent event should never be null by this point, but we guard against it just in case
SOCIALD_LOG_ERROR("Deletion failed as the parent event" << parentId << "couldn't be found");
Expand Down

0 comments on commit b6f3b38

Please sign in to comment.