Skip to content

Commit

Permalink
Merge branch 'jb38165' into 'master'
Browse files Browse the repository at this point in the history
[buteo-sync-plugins-social] Store GCal ID in custom property. Contributes to JB#38165

See merge request !22
  • Loading branch information
chriadam committed Jul 5, 2017
2 parents 002c4ce + b8cf34d commit 0140fd1
Showing 1 changed file with 61 additions and 0 deletions.
61 changes: 61 additions & 0 deletions src/google/google-calendars/googlecalendarsyncadaptor.cpp
Expand Up @@ -146,6 +146,23 @@ void setGCalEventId(KCalCore::Incidence::Ptr event, const QString &id)
event->addComment(QStringLiteral("jolla-sociald:gcal-id:%1").arg(id));
}

void setRemoteUidCustomField(KCalCore::Incidence::Ptr event, const QString &uid, const QString &id)
{
// store it also in a custom property purely for invitation lookup purposes.
if (!uid.isEmpty()) {
event->setNonKDECustomProperty("X-SAILFISHOS-REMOTE-UID", uid.toUtf8());
} else {
// Google Calendar invites are sent as invitations with uid suffixed with @google.com.
if (id.endsWith(QLatin1String("@google.com"), Qt::CaseInsensitive)) {
event->setNonKDECustomProperty("X-SAILFISHOS-REMOTE-UID", id.toUtf8());
} else {
QString suffixedId = id;
suffixedId.append(QLatin1String("@google.com"));
event->setNonKDECustomProperty("X-SAILFISHOS-REMOTE-UID", suffixedId.toUtf8());
}
}
}

QString gCalETag(KCalCore::Incidence::Ptr event)
{
return event->customProperty("jolla-sociald", "gcal-etag");
Expand Down Expand Up @@ -592,6 +609,47 @@ void extractRecurrence(const QJsonArray &recurrence, KCalCore::Event::Ptr event,
}
}

void extractOrganizer(const QJsonObject &creatorObj, const QJsonObject &organizerObj, KCalCore::Event::Ptr event)
{
if (!creatorObj.value(QLatin1String("displayName")).toVariant().toString().isEmpty()
|| !creatorObj.value(QLatin1String("email")).toVariant().toString().isEmpty()) {
KCalCore::Person::Ptr organizer(new KCalCore::Person(
creatorObj.value(QLatin1String("displayName")).toVariant().toString(),
creatorObj.value(QLatin1String("email")).toVariant().toString()));
event->setOrganizer(organizer);
} else if (!organizerObj.value(QLatin1String("displayName")).toVariant().toString().isEmpty()
|| !organizerObj.value(QLatin1String("email")).toVariant().toString().isEmpty()) {
KCalCore::Person::Ptr organizer(new KCalCore::Person(
organizerObj.value(QLatin1String("displayName")).toVariant().toString(),
organizerObj.value(QLatin1String("email")).toVariant().toString()));
event->setOrganizer(organizer);
} else {
KCalCore::Person::Ptr organizer(new KCalCore::Person);
event->setOrganizer(organizer);
}
}

void extractAttendees(const QJsonArray &attendees, KCalCore::Event::Ptr event)
{
event->clearAttendees();
for (int i = 0; i < attendees.size(); ++i) {
QJsonObject attendeeObj = attendees.at(i).toObject();
if (!attendeeObj.value(QLatin1String("organizer")).toVariant().toBool()) {
KCalCore::Attendee::Ptr attendee(new KCalCore::Attendee(
attendeeObj.value(QLatin1String("displayName")).toVariant().toString(),
attendeeObj.value(QLatin1String("email")).toVariant().toString()));
if (attendeeObj.find(QLatin1String("optional")) != attendeeObj.end()) {
if (attendeeObj.value(QLatin1String("optional")).toVariant().toBool()) {
attendee->setRole(KCalCore::Attendee::OptParticipant);
} else {
attendee->setRole(KCalCore::Attendee::ReqParticipant);
}
}
event->addAttendee(attendee);
}
}
}

int nearestNemoReminderStartOffset(int googleStartOffset)
{
// Google supports arbitrary start offsets, whereas in Nemo's UI
Expand Down Expand Up @@ -731,7 +789,10 @@ void jsonToKCal(const QJsonObject &json, KCalCore::Event::Ptr event, int default
START_EVENT_UPDATES_IF_REQUIRED(event, changed);
setGCalETag(event, json.value(QLatin1String("etag")).toVariant().toString());
}
setRemoteUidCustomField(event, json.value(QLatin1String("iCalUID")).toVariant().toString(), json.value(QLatin1String("id")).toVariant().toString());
extractRecurrence(json.value(QLatin1String("recurrence")).toArray(), event, icalFormat);
extractOrganizer(json.value(QLatin1String("creator")).toObject(), json.value(QLatin1String("organizer")).toObject(), event);
extractAttendees(json.value(QLatin1String("attendees")).toArray(), event);
UPDATE_EVENT_PROPERTY_IF_REQUIRED(event, isReadOnly, setReadOnly, json.value(QLatin1String("locked")).toVariant().toBool(), changed)
UPDATE_EVENT_PROPERTY_IF_REQUIRED(event, summary, setSummary, json.value(QLatin1String("summary")).toVariant().toString(), changed)
UPDATE_EVENT_PROPERTY_IF_REQUIRED(event, description, setDescription, json.value(QLatin1String("description")).toVariant().toString(), changed)
Expand Down

0 comments on commit 0140fd1

Please sign in to comment.