Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Merge branch 'kf5' into 'master'
[buteo-sync-plugins-social] Port to KF5CalendarCore. JB#47814

See merge request mer-core/buteo-sync-plugins-social!80
  • Loading branch information
blam committed Dec 20, 2020
2 parents 88e70f2 + 3706db1 commit b438da9
Show file tree
Hide file tree
Showing 10 changed files with 255 additions and 294 deletions.
6 changes: 3 additions & 3 deletions rpm/sociald.spec
Expand Up @@ -41,7 +41,7 @@ A Buteo plugin which provides data synchronization with various social services.
%package facebook-calendars
Summary: Provides calendar synchronisation with Facebook
BuildRequires: pkgconfig(libmkcal-qt5)
BuildRequires: pkgconfig(libkcalcoren-qt5)
BuildRequires: pkgconfig(KF5CalendarCore)
Requires: %{name} = %{version}-%{release}

%description facebook-calendars
Expand Down Expand Up @@ -126,7 +126,7 @@ systemctl-user try-restart msyncd.service || :
%package google-calendars
Summary: Provides calendar synchronisation with Google
BuildRequires: pkgconfig(libmkcal-qt5) >= 0.5.9
BuildRequires: pkgconfig(libkcalcoren-qt5)
BuildRequires: pkgconfig(KF5CalendarCore)
Requires: %{name} = %{version}-%{release}

%description google-calendars
Expand Down Expand Up @@ -498,7 +498,7 @@ systemctl-user restart msyncd.service || :
%package vk-calendars
Summary: Provides calendar synchronisation with VK
BuildRequires: pkgconfig(libmkcal-qt5)
BuildRequires: pkgconfig(libkcalcoren-qt5)
BuildRequires: pkgconfig(KF5CalendarCore)
Requires: %{name} = %{version}-%{release}

%description vk-calendars
Expand Down
2 changes: 1 addition & 1 deletion src/facebook/facebook-calendars/facebook-calendars.pri
@@ -1,5 +1,5 @@
CONFIG += link_pkgconfig
PKGCONFIG += libmkcal-qt5 libkcalcoren-qt5
PKGCONFIG += libmkcal-qt5 KF5CalendarCore
SOURCES += $$PWD/facebookcalendarsyncadaptor.cpp
HEADERS += $$PWD/facebookcalendarsyncadaptor.h
INCLUDEPATH += $$PWD
Expand Down
46 changes: 14 additions & 32 deletions src/facebook/facebook-calendars/facebookcalendarsyncadaptor.cpp
Expand Up @@ -81,7 +81,7 @@ namespace {

FacebookCalendarSyncAdaptor::FacebookCalendarSyncAdaptor(QObject *parent)
: FacebookDataTypeSyncAdaptor(SocialNetworkSyncAdaptor::Calendars, parent)
, m_calendar(mKCal::ExtendedCalendar::Ptr(new mKCal::ExtendedCalendar(QLatin1String("UTC"))))
, m_calendar(mKCal::ExtendedCalendar::Ptr(new mKCal::ExtendedCalendar(QTimeZone::utc())))
, m_storage(mKCal::ExtendedCalendar::defaultStorage(m_calendar))
, m_storageNeedsSave(false)
{
Expand Down Expand Up @@ -140,17 +140,17 @@ void FacebookCalendarSyncAdaptor::finalCleanup()
// given incidence belongs to, so we have to instead load
// everything and then find the ones which are ophaned.
m_storage->load();
KCalCore::Incidence::List allIncidences = m_calendar->incidences();
KCalendarCore::Incidence::List allIncidences = m_calendar->incidences();
mKCal::Notebook::List allNotebooks = m_storage->notebooks();
QSet<QString> notebookIncidenceUids;
foreach (mKCal::Notebook::Ptr notebook, allNotebooks) {
KCalCore::Incidence::List currNbIncidences;
KCalendarCore::Incidence::List currNbIncidences;
m_storage->allIncidences(&currNbIncidences, notebook->uid());
foreach (KCalCore::Incidence::Ptr incidence, currNbIncidences) {
foreach (KCalendarCore::Incidence::Ptr incidence, currNbIncidences) {
notebookIncidenceUids.insert(incidence->uid());
}
}
foreach (const KCalCore::Incidence::Ptr incidence, allIncidences) {
foreach (const KCalendarCore::Incidence::Ptr incidence, allIncidences) {
if (!notebookIncidenceUids.contains(incidence->uid())) {
// orphan/ghost incidence. must be deleted.
SOCIALD_LOG_DEBUG("deleting orphan event with uid:" << incidence->uid());
Expand Down Expand Up @@ -355,23 +355,11 @@ void FacebookCalendarSyncAdaptor::finishedHandler()
endTimeString = startTimeString;
}

KDateTime parsedStartTime = KDateTime::fromString(startTimeString);
KDateTime parsedEndTime = KDateTime::fromString(endTimeString);
QDateTime parsedStartTime = QDateTime::fromString(startTimeString, Qt::ISODate);
QDateTime parsedEndTime = QDateTime::fromString(endTimeString, Qt::ISODate);

// Sometimes KDateTime cannot parse the timezone
// even if it should support it
// We are then doing it manually
if (parsedStartTime.isNull()) {
parsedStartTime = KDateTime::fromString(startTimeString,
QLatin1String("%Y-%m-%dT%H:%M:%S%z"));
}
if (parsedEndTime.isNull()) {
parsedEndTime = KDateTime::fromString(endTimeString,
QLatin1String("%Y-%m-%dT%H:%M:%S%z"));
}

parsedEvent.m_startTime = parsedStartTime.toLocalZone();
parsedEvent.m_endTime = parsedEndTime.toLocalZone();
parsedEvent.m_startTime = parsedStartTime.toTimeZone(QTimeZone::systemTimeZone());
parsedEvent.m_endTime = parsedEndTime.toTimeZone(QTimeZone::systemTimeZone());
parsedEvent.m_summary = dataMap.value(QLatin1String("name")).toString();
parsedEvent.m_description = dataMap.value(QLatin1String("description")).toString();
parsedEvent.m_location = dataMap.value(QLatin1String("place")).toObject().toVariantMap().value("name").toString();
Expand Down Expand Up @@ -445,7 +433,7 @@ void FacebookCalendarSyncAdaptor::processParsedEvents(int accountId)
fbNotebook->setIsReadOnly(false);

// We load incidences that are associated to Facebook into memory
KCalCore::Incidence::List dbEvents;
KCalendarCore::Incidence::List dbEvents;
m_storage->loadNotebookIncidences(fbNotebook->uid());
if (!m_storage->allIncidences(&dbEvents, fbNotebook->uid())) {
SOCIALD_LOG_ERROR("unable to load Facebook events from database");
Expand All @@ -458,9 +446,9 @@ void FacebookCalendarSyncAdaptor::processParsedEvents(int accountId)
// find the local event associated with this event.
bool foundLocal = false;
const FacebookParsedEvent &parsedEvent = m_parsedEvents[fbId];
Q_FOREACH (KCalCore::Incidence::Ptr incidence, dbEvents) {
Q_FOREACH (KCalendarCore::Incidence::Ptr incidence, dbEvents) {
if (incidence->uid().endsWith(QStringLiteral(":%1").arg(fbId))) {
KCalCore::Event::Ptr event = m_calendar->event(incidence->uid());
KCalendarCore::Event::Ptr event = m_calendar->event(incidence->uid());
if (!event) continue; // not a valid event incidence.
// found. If it has been modified remotely, then modify locally.
foundLocal = true;
Expand All @@ -478,9 +466,6 @@ void FacebookCalendarSyncAdaptor::processParsedEvents(int accountId)
event->setDtStart(parsedEvent.m_startTime);
if (parsedEvent.m_endExists) {
event->setDtEnd(parsedEvent.m_endTime);
event->setHasEndDate(true);
} else {
event->setHasEndDate(false);
}
if (parsedEvent.m_isDateOnly) {
event->setAllDay(true);
Expand All @@ -497,7 +482,7 @@ void FacebookCalendarSyncAdaptor::processParsedEvents(int accountId)

// if not found locally, it must be a new addition.
if (!foundLocal) {
KCalCore::Event::Ptr event = KCalCore::Event::Ptr(new KCalCore::Event);
KCalendarCore::Event::Ptr event = KCalendarCore::Event::Ptr(new KCalendarCore::Event);
QString eventUid = QUuid::createUuid().toString();
eventUid = eventUid.mid(1); // remove leading {
eventUid.chop(1); // remove trailing }
Expand All @@ -509,9 +494,6 @@ void FacebookCalendarSyncAdaptor::processParsedEvents(int accountId)
event->setDtStart(parsedEvent.m_startTime);
if (parsedEvent.m_endExists) {
event->setDtEnd(parsedEvent.m_endTime);
event->setHasEndDate(true);
} else {
event->setHasEndDate(false);
}
if (parsedEvent.m_isDateOnly) {
event->setAllDay(true);
Expand All @@ -524,7 +506,7 @@ void FacebookCalendarSyncAdaptor::processParsedEvents(int accountId)
}

// Any local events which were not seen, must have been removed remotely.
Q_FOREACH (KCalCore::Incidence::Ptr incidence, dbEvents) {
Q_FOREACH (KCalendarCore::Incidence::Ptr incidence, dbEvents) {
if (!seenLocalEvents.contains(incidence->uid())) {
// note: have to delete from calendar after loaded from calendar.
m_calendar->deleteIncidence(m_calendar->incidence(incidence->uid()));
Expand Down
4 changes: 2 additions & 2 deletions src/facebook/facebook-calendars/facebookcalendarsyncadaptor.h
Expand Up @@ -37,8 +37,8 @@ class FacebookParsedEvent
QString m_id;
bool m_isDateOnly;
bool m_endExists;
KDateTime m_startTime;
KDateTime m_endTime;
QDateTime m_startTime;
QDateTime m_endTime;
QString m_summary;
QString m_description;
QString m_location;
Expand Down
2 changes: 1 addition & 1 deletion src/google/google-calendars/google-calendars.pri
@@ -1,5 +1,5 @@
CONFIG += link_pkgconfig
PKGCONFIG += libmkcal-qt5 libkcalcoren-qt5
PKGCONFIG += libmkcal-qt5 KF5CalendarCore
SOURCES += \
$$PWD/googlecalendarsyncadaptor.cpp
HEADERS += \
Expand Down
48 changes: 24 additions & 24 deletions src/google/google-calendars/googlecalendarincidencecomparator.h
Expand Up @@ -24,16 +24,16 @@

#include <QtDebug>

#include <memorycalendar.h>
#include <extendedcalendar.h>
#include <extendedstorage.h>
#include <icalformat.h>
#include <incidence.h>
#include <event.h>
#include <todo.h>
#include <journal.h>
#include <attendee.h>
#include <kdatetime.h>

#include <KCalendarCore/ICalFormat>
#include <KCalendarCore/MemoryCalendar>
#include <KCalendarCore/Incidence>
#include <KCalendarCore/Event>
#include <KCalendarCore/Todo>
#include <KCalendarCore/Journal>
#include <KCalendarCore/Attendee>

#include "trace.h"

Expand All @@ -54,7 +54,7 @@
}

namespace GoogleCalendarIncidenceComparator {
void normalizePersonEmail(KCalCore::Person *p)
void normalizePersonEmail(KCalendarCore::Person *p)
{
QString email = p->email().replace(QStringLiteral("mailto:"), QString(), Qt::CaseInsensitive);
if (email != p->email()) {
Expand All @@ -76,7 +76,7 @@ namespace GoogleCalendarIncidenceComparator {
return true;
}

bool eventsEqual(const KCalCore::Event::Ptr &a, const KCalCore::Event::Ptr &b, bool printDebug)
bool eventsEqual(const KCalendarCore::Event::Ptr &a, const KCalendarCore::Event::Ptr &b, bool printDebug)
{
GIC_RETURN_FALSE_IF_NOT_EQUAL_CUSTOM(a->dateEnd() != b->dateEnd(), "dateEnd", (a->dateEnd().toString() + " != " + b->dateEnd().toString()));
GIC_RETURN_FALSE_IF_NOT_EQUAL(a, b, transparency(), "transparency");
Expand Down Expand Up @@ -107,7 +107,7 @@ namespace GoogleCalendarIncidenceComparator {
return true;
}

bool todosEqual(const KCalCore::Todo::Ptr &a, const KCalCore::Todo::Ptr &b, bool printDebug)
bool todosEqual(const KCalendarCore::Todo::Ptr &a, const KCalendarCore::Todo::Ptr &b, bool printDebug)
{
GIC_RETURN_FALSE_IF_NOT_EQUAL(a, b, hasCompletedDate(), "hasCompletedDate");
GIC_RETURN_FALSE_IF_NOT_EQUAL_CUSTOM(a->dtRecurrence() != b->dtRecurrence(), "dtRecurrence", (a->dtRecurrence().toString() + " != " + b->dtRecurrence().toString()));
Expand All @@ -121,14 +121,14 @@ namespace GoogleCalendarIncidenceComparator {
return true;
}

bool journalsEqual(const KCalCore::Journal::Ptr &, const KCalCore::Journal::Ptr &, bool)
bool journalsEqual(const KCalendarCore::Journal::Ptr &, const KCalendarCore::Journal::Ptr &, bool)
{
// no journal-specific properties; it only uses the base incidence properties
return true;
}

// Checks whether a specific set of properties are equal.
bool incidencesEqual(const KCalCore::Incidence::Ptr &a, const KCalCore::Incidence::Ptr &b, bool printDebug)
bool incidencesEqual(const KCalendarCore::Incidence::Ptr &a, const KCalendarCore::Incidence::Ptr &b, bool printDebug)
{
if (!a || !b) {
qWarning() << "Invalid paramters! a:" << a << "b:" << b;
Expand All @@ -138,7 +138,7 @@ namespace GoogleCalendarIncidenceComparator {
// Do not compare created() or lastModified() because we don't update these fields when
// an incidence is updated by copyIncidenceProperties(), so they are guaranteed to be unequal.
// TODO compare deref alarms and attachment lists to compare them also.
// Don't compare resources() for now because KCalCore may insert QStringList("") as the resources
// Don't compare resources() for now because KCalendarCore may insert QStringList("") as the resources
// when in fact it should be QStringList(), which causes the comparison to fail.
GIC_RETURN_FALSE_IF_NOT_EQUAL(a, b, type(), "type");
GIC_RETURN_FALSE_IF_NOT_EQUAL(a, b, duration(), "duration");
Expand Down Expand Up @@ -170,8 +170,8 @@ namespace GoogleCalendarIncidenceComparator {
}

// Some servers insert a mailto: in the organizer email address, so ignore this when comparing organizers
KCalCore::Person personA(*a->organizer().data());
KCalCore::Person personB(*b->organizer().data());
KCalendarCore::Person personA(a->organizer());
KCalendarCore::Person personB(b->organizer());
normalizePersonEmail(&personA);
normalizePersonEmail(&personB);
const QString aEmail = personA.email();
Expand All @@ -185,23 +185,23 @@ namespace GoogleCalendarIncidenceComparator {
}

switch (a->type()) {
case KCalCore::IncidenceBase::TypeEvent:
if (!eventsEqual(a.staticCast<KCalCore::Event>(), b.staticCast<KCalCore::Event>(), printDebug)) {
case KCalendarCore::IncidenceBase::TypeEvent:
if (!eventsEqual(a.staticCast<KCalendarCore::Event>(), b.staticCast<KCalendarCore::Event>(), printDebug)) {
return false;
}
break;
case KCalCore::IncidenceBase::TypeTodo:
if (!todosEqual(a.staticCast<KCalCore::Todo>(), b.staticCast<KCalCore::Todo>(), printDebug)) {
case KCalendarCore::IncidenceBase::TypeTodo:
if (!todosEqual(a.staticCast<KCalendarCore::Todo>(), b.staticCast<KCalendarCore::Todo>(), printDebug)) {
return false;
}
break;
case KCalCore::IncidenceBase::TypeJournal:
if (!journalsEqual(a.staticCast<KCalCore::Journal>(), b.staticCast<KCalCore::Journal>(), printDebug)) {
case KCalendarCore::IncidenceBase::TypeJournal:
if (!journalsEqual(a.staticCast<KCalendarCore::Journal>(), b.staticCast<KCalendarCore::Journal>(), printDebug)) {
return false;
}
break;
case KCalCore::IncidenceBase::TypeFreeBusy:
case KCalCore::IncidenceBase::TypeUnknown:
case KCalendarCore::IncidenceBase::TypeFreeBusy:
case KCalendarCore::IncidenceBase::TypeUnknown:
SOCIALD_LOG_DEBUG_MAYBE("Unable to compare FreeBusy or Unknown incidence, assuming equal");
break;
}
Expand Down

0 comments on commit b438da9

Please sign in to comment.