Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[nemo-qml-plugin-calendar] Upgrade sharing format to iCalendar. Contr…
…ibutes to JB#36906

Vcalendar has been deprecated some 20 years already. In addition
export wouldn't be supported by newer versions of kcalcore even
as much as the current hack. Let's move forward.

As of now didn't address the event exception case with different
recurrence id.
  • Loading branch information
pvuorela committed Feb 10, 2020
1 parent 8b6b4c1 commit e998eaa
Show file tree
Hide file tree
Showing 6 changed files with 18 additions and 40 deletions.
10 changes: 5 additions & 5 deletions src/calendarevent.cpp
Expand Up @@ -161,16 +161,16 @@ QString CalendarEvent::recurrenceIdString() const
}
}

// Returns the event as a VCalendar string
QString CalendarEvent::vCalendar(const QString &prodId) const
// Returns the event as a iCalendar string
QString CalendarEvent::iCalendar(const QString &prodId) const
{
if (mUniqueId.isEmpty()) {
qWarning() << "Event has no uid, returning empty VCalendar string."
qWarning() << "Event has no uid, returning empty iCalendar string."
<< "Save event before calling this function";
return "";
return QString();
}

return mManager->convertEventToVCalendarSync(mUniqueId, prodId);
return mManager->convertEventToICalendarSync(mUniqueId, prodId);
}

void CalendarEvent::notebookColorChanged(QString notebookUid)
Expand Down
2 changes: 1 addition & 1 deletion src/calendarevent.h
Expand Up @@ -123,7 +123,7 @@ class CalendarEvent : public QObject
bool externalInvitation() const;

Q_INVOKABLE bool sendResponse(int response);
Q_INVOKABLE QString vCalendar(const QString &prodId = QString()) const;
Q_INVOKABLE QString iCalendar(const QString &prodId = QString()) const;

private slots:
void notebookColorChanged(QString notebookUid);
Expand Down
4 changes: 2 additions & 2 deletions src/calendarmanager.cpp
Expand Up @@ -538,10 +538,10 @@ void CalendarManager::save()
QMetaObject::invokeMethod(mCalendarWorker, "save", Qt::QueuedConnection);
}

QString CalendarManager::convertEventToVCalendarSync(const QString &uid, const QString &prodId)
QString CalendarManager::convertEventToICalendarSync(const QString &uid, const QString &prodId)
{
QString vEvent;
QMetaObject::invokeMethod(mCalendarWorker, "convertEventToVCalendar", Qt::BlockingQueuedConnection,
QMetaObject::invokeMethod(mCalendarWorker, "convertEventToICalendar", Qt::BlockingQueuedConnection,
Q_RETURN_ARG(QString, vEvent),
Q_ARG(QString, uid),
Q_ARG(QString, prodId));
Expand Down
2 changes: 1 addition & 1 deletion src/calendarmanager.h
Expand Up @@ -77,7 +77,7 @@ class CalendarManager : public QObject
void save();

// Synchronous DB thread access
QString convertEventToVCalendarSync(const QString &uid, const QString &prodId);
QString convertEventToICalendarSync(const QString &uid, const QString &prodId);

// Event
CalendarData::Event getEvent(const QString& uid, const KDateTime &recurrenceId);
Expand Down
38 changes: 8 additions & 30 deletions src/calendarworker.cpp
Expand Up @@ -46,7 +46,7 @@
#include <attendee.h>
#include <event.h>
#include <calformat.h>
#include <vcalformat.h>
#include <icalformat.h>
#include <recurrence.h>
#include <recurrencerule.h>
#include <memorycalendar.h>
Expand Down Expand Up @@ -148,41 +148,19 @@ bool CalendarWorker::sendResponse(const CalendarData::Event &eventData, const Ca
return mKCal::ServiceHandler::instance().sendResponse(event, eventData.description, mCalendar, mStorage);
}

// eventToVEvent() is protected
class CalendarVCalFormat : public KCalCore::VCalFormat
QString CalendarWorker::convertEventToICalendar(const QString &uid, const QString &prodId) const
{
public:
QString convertEventToVCalendar(const KCalCore::Event::Ptr &event, const QString &prodId)
{
VObject *vCalObj = vcsCreateVCal(
QDateTime::currentDateTime().toString(Qt::ISODate).toLatin1().data(),
NULL,
prodId.toLatin1().data(),
NULL,
(char *) "1.0");
VObject *vEventObj = eventToVEvent(event);
addVObjectProp(vCalObj, vEventObj);
char *memVObject = writeMemVObject(0, 0, vCalObj);
QString retn = QLatin1String(memVObject);
free(memVObject);
cleanVObject(vCalObj);
return retn;
}
};

QString CalendarWorker::convertEventToVCalendar(const QString &uid, const QString &prodId) const
{
// NOTE: not fetching eventInstances() with different recurrenceId for VCalendar.
// NOTE: not fetching eventInstances() with different recurrenceId
KCalCore::Event::Ptr event = mCalendar->event(uid);
if (event.isNull()) {
qWarning() << "No event with uid " << uid << ", unable to create VCalendar";
qWarning() << "No event with uid " << uid << ", unable to create iCalendar";
return QString();
}

CalendarVCalFormat fmt;
return fmt.convertEventToVCalendar(event,
prodId.isEmpty() ? QLatin1String("-//NemoMobile.org/Nemo//NONSGML v1.0//EN")
: prodId);
KCalCore::ICalFormat fmt;
fmt.setApplication(fmt.application(),
prodId.isEmpty() ? QLatin1String("-//sailfishos.org/Sailfish//NONSGML v1.0//EN") : prodId);
return fmt.toICalString(event);
}

void CalendarWorker::save()
Expand Down
2 changes: 1 addition & 1 deletion src/calendarworker.h
Expand Up @@ -72,7 +72,7 @@ public slots:
void deleteEvent(const QString &uid, const KDateTime &recurrenceId, const QDateTime &dateTime);
void deleteAll(const QString &uid);
bool sendResponse(const CalendarData::Event &eventData, const CalendarEvent::Response response);
QString convertEventToVCalendar(const QString &uid, const QString &prodId) const;
QString convertEventToICalendar(const QString &uid, const QString &prodId) const;

QList<CalendarData::Notebook> notebooks() const;
void setNotebookColor(const QString &notebookUid, const QString &color);
Expand Down

0 comments on commit e998eaa

Please sign in to comment.