Skip to content

Commit

Permalink
[nemo-qml-plugin-calendar] Add possibility to use a reminder at a giv…
Browse files Browse the repository at this point in the history
…en time and day.
  • Loading branch information
dcaliste committed Jan 28, 2021
1 parent 31bd515 commit 34bfe1b
Show file tree
Hide file tree
Showing 11 changed files with 59 additions and 6 deletions.
1 change: 1 addition & 0 deletions src/calendardata.h
Expand Up @@ -69,6 +69,7 @@ struct Event {
QDate recurEndDate;
CalendarEvent::Days recurWeeklyDays;
int reminder; // seconds; 15 minutes before event = +900, at time of event = 0, no reminder = negative value.
QDateTime reminderDateTime; // Valid when reminder is at a given date and time.
QString uniqueId;
QDateTime recurrenceId;
QString location;
Expand Down
5 changes: 5 additions & 0 deletions src/calendarevent.cpp
Expand Up @@ -137,6 +137,11 @@ int CalendarEvent::reminder() const
return mManager->getEvent(mUniqueId, mRecurrenceId).reminder;
}

QDateTime CalendarEvent::reminderDateTime() const
{
return mManager->getEvent(mUniqueId, mRecurrenceId).reminderDateTime;
}

QString CalendarEvent::uniqueId() const
{
return mUniqueId;
Expand Down
3 changes: 3 additions & 0 deletions src/calendarevent.h
Expand Up @@ -59,6 +59,7 @@ class CalendarEvent : public QObject
Q_PROPERTY(bool hasRecurEndDate READ hasRecurEndDate NOTIFY hasRecurEndDateChanged)
Q_PROPERTY(CalendarEvent::Days recurWeeklyDays READ recurWeeklyDays NOTIFY recurWeeklyDaysChanged)
Q_PROPERTY(int reminder READ reminder NOTIFY reminderChanged)
Q_PROPERTY(QDateTime reminderDateTime READ reminderDateTime NOTIFY reminderDateTimeChanged)
Q_PROPERTY(QString uniqueId READ uniqueId NOTIFY uniqueIdChanged)
Q_PROPERTY(QString recurrenceId READ recurrenceIdString CONSTANT)
Q_PROPERTY(QString color READ color NOTIFY colorChanged)
Expand Down Expand Up @@ -137,6 +138,7 @@ class CalendarEvent : public QObject
bool hasRecurEndDate() const;
Days recurWeeklyDays() const;
int reminder() const;
QDateTime reminderDateTime() const;
QString uniqueId() const;
QString color() const;
bool readOnly() const;
Expand Down Expand Up @@ -166,6 +168,7 @@ private slots:
void allDayChanged();
void recurChanged();
void reminderChanged();
void reminderDateTimeChanged();
void uniqueIdChanged();
void colorChanged();
void calendarUidChanged();
Expand Down
13 changes: 13 additions & 0 deletions src/calendareventmodification.cpp
Expand Up @@ -220,6 +220,19 @@ void CalendarEventModification::setReminder(int seconds)
}
}

QDateTime CalendarEventModification::reminderDateTime() const
{
return m_event.reminderDateTime;
}

void CalendarEventModification::setReminderDateTime(const QDateTime &dateTime)
{
if (dateTime != m_event.reminderDateTime) {
m_event.reminderDateTime = dateTime;
emit reminderDateTimeChanged();
}
}

QString CalendarEventModification::location() const
{
return m_event.location;
Expand Down
5 changes: 5 additions & 0 deletions src/calendareventmodification.h
Expand Up @@ -55,6 +55,7 @@ class CalendarEventModification : public QObject
Q_PROPERTY(bool hasRecurEndDate READ hasRecurEndDate NOTIFY hasRecurEndDateChanged)
Q_PROPERTY(QString recurrenceId READ recurrenceIdString CONSTANT)
Q_PROPERTY(int reminder READ reminder WRITE setReminder NOTIFY reminderChanged)
Q_PROPERTY(QDateTime reminderDateTime READ reminderDateTime WRITE setReminderDateTime NOTIFY reminderDateTimeChanged)
Q_PROPERTY(QString location READ location WRITE setLocation NOTIFY locationChanged)
Q_PROPERTY(QString calendarUid READ calendarUid WRITE setCalendarUid NOTIFY calendarUidChanged)

Expand Down Expand Up @@ -94,6 +95,9 @@ class CalendarEventModification : public QObject
int reminder() const;
void setReminder(int seconds);

QDateTime reminderDateTime() const;
void setReminderDateTime(const QDateTime &dateTime);

QString location() const;
void setLocation(const QString &newLocation);

Expand All @@ -114,6 +118,7 @@ class CalendarEventModification : public QObject
void recurChanged();
void recurWeeklyDaysChanged();
void reminderChanged();
void reminderDateTimeChanged();
void locationChanged();
void recurEndDateChanged();
void hasRecurEndDateChanged();
Expand Down
5 changes: 5 additions & 0 deletions src/calendarimportevent.cpp
Expand Up @@ -109,6 +109,11 @@ int CalendarImportEvent::reminder() const
return CalendarUtils::getReminder(mEvent);
}

QDateTime CalendarImportEvent::reminderDateTime() const
{
return mEvent ? CalendarUtils::getReminderDateTime(mEvent) : QDateTime();
}

QString CalendarImportEvent::uniqueId() const
{
if (!mEvent)
Expand Down
2 changes: 2 additions & 0 deletions src/calendarimportevent.h
Expand Up @@ -51,6 +51,7 @@ class CalendarImportEvent : public QObject
Q_PROPERTY(CalendarEvent::Recur recur READ recur CONSTANT)
Q_PROPERTY(CalendarEvent::Days recurWeeklyDays READ recurWeeklyDays CONSTANT)
Q_PROPERTY(int reminder READ reminder CONSTANT)
Q_PROPERTY(QDateTime reminderDateTime READ reminderDateTime CONSTANT)
Q_PROPERTY(QString uniqueId READ uniqueId CONSTANT)
Q_PROPERTY(QString color READ color WRITE setColor NOTIFY colorChanged)
Q_PROPERTY(QString location READ location CONSTANT)
Expand All @@ -73,6 +74,7 @@ class CalendarImportEvent : public QObject
CalendarEvent::Recur recur();
CalendarEvent::Days recurWeeklyDays();
int reminder() const;
QDateTime reminderDateTime() const;
QString uniqueId() const;
QString color() const;
bool readOnly() const;
Expand Down
15 changes: 13 additions & 2 deletions src/calendarutils.cpp
Expand Up @@ -138,12 +138,12 @@ int CalendarUtils::getReminder(const KCalendarCore::Event::Ptr &event)

KCalendarCore::Alarm::Ptr alarm;

int seconds = -1;
int seconds = -1; // Any negative values means "no reminder"
for (int ii = 0; ii < alarms.count(); ++ii) {
if (alarms.at(ii)->type() == KCalendarCore::Alarm::Procedure)
continue;
alarm = alarms.at(ii);
if (alarm) {
if (alarm && !alarm->hasTime()) {
KCalendarCore::Duration d = alarm->startOffset();
seconds = d.asSeconds() * -1; // backend stores as "offset in seconds to dtStart", we return "seconds before"
if (seconds >= 0) {
Expand All @@ -156,6 +156,17 @@ int CalendarUtils::getReminder(const KCalendarCore::Event::Ptr &event)
return seconds;
}

QDateTime CalendarUtils::getReminderDateTime(const KCalendarCore::Event::Ptr &event)
{
for (const KCalendarCore::Alarm::Ptr &alarm : event->alarms()) {
if (alarm && alarm->type() == KCalendarCore::Alarm::Display && alarm->hasTime()) {
return alarm->time();
}
}

return QDateTime();
}

QList<CalendarData::Attendee> CalendarUtils::getEventAttendees(const KCalendarCore::Event::Ptr &event)
{
QList<CalendarData::Attendee> result;
Expand Down
1 change: 1 addition & 0 deletions src/calendarutils.h
Expand Up @@ -48,6 +48,7 @@ CalendarEvent::Recur convertRecurrence(const KCalendarCore::Event::Ptr &event);
CalendarEvent::Days convertDayPositions(const KCalendarCore::Event::Ptr &event);
CalendarEvent::Secrecy convertSecrecy(const KCalendarCore::Event::Ptr &event);
int getReminder(const KCalendarCore::Event::Ptr &event);
QDateTime getReminderDateTime(const KCalendarCore::Event::Ptr &event);
QList<CalendarData::Attendee> getEventAttendees(const KCalendarCore::Event::Ptr &event);
QList<QObject*> convertAttendeeList(const QList<CalendarData::Attendee> &list);
CalendarData::EventOccurrence getNextOccurrence(const KCalendarCore::Event::Ptr &event,
Expand Down
13 changes: 10 additions & 3 deletions src/calendarworker.cpp
Expand Up @@ -281,7 +281,7 @@ void CalendarWorker::setEventData(KCalendarCore::Event::Ptr &event, const Calend
event->setDtEnd(eventData.endTime);
event->setAllDay(eventData.allDay);
event->setLocation(eventData.location);
setReminder(event, eventData.reminder);
setReminder(event, eventData.reminder, eventData.reminderDateTime);
setRecurrence(event, eventData.recur, eventData.recurWeeklyDays);

if (eventData.recur != CalendarEvent::RecurOnce) {
Expand Down Expand Up @@ -416,12 +416,13 @@ bool CalendarWorker::setRecurrence(KCalendarCore::Event::Ptr &event, CalendarEve
return false;
}

bool CalendarWorker::setReminder(KCalendarCore::Event::Ptr &event, int seconds)
bool CalendarWorker::setReminder(KCalendarCore::Event::Ptr &event, int seconds, const QDateTime &dateTime)
{
if (!event)
return false;

if (CalendarUtils::getReminder(event) == seconds)
if (CalendarUtils::getReminder(event) == seconds
&& CalendarUtils::getReminderDateTime(event) == dateTime)
return false;

KCalendarCore::Alarm::List alarms = event->alarms();
Expand All @@ -439,6 +440,11 @@ bool CalendarWorker::setReminder(KCalendarCore::Event::Ptr &event, int seconds)
// backend stores as "offset to dtStart", i.e negative if reminder before event.
alarm->setStartOffset(-1 * seconds);
alarm->setType(KCalendarCore::Alarm::Display);
} else if (dateTime.isValid()) {
KCalendarCore::Alarm::Ptr alarm = event->newAlarm();
alarm->setEnabled(true);
alarm->setTime(dateTime);
alarm->setType(KCalendarCore::Alarm::Display);
}

return true;
Expand Down Expand Up @@ -888,6 +894,7 @@ CalendarData::Event CalendarWorker::createEventStruct(const KCalendarCore::Event
event.recurEndDate = defaultRule->endDt().date();
}
event.reminder = CalendarUtils::getReminder(e);
event.reminderDateTime = CalendarUtils::getReminderDateTime(e);
event.startTime = e->dtStart();
return event;
}
Expand Down
2 changes: 1 addition & 1 deletion src/calendarworker.h
Expand Up @@ -119,7 +119,7 @@ public slots:
bool saveExcludeNotebook(const QString &notebookUid, bool exclude);

bool setRecurrence(KCalendarCore::Event::Ptr &event, CalendarEvent::Recur recur, CalendarEvent::Days days);
bool setReminder(KCalendarCore::Event::Ptr &event, int reminderSeconds);
bool setReminder(KCalendarCore::Event::Ptr &event, int seconds, const QDateTime &dateTime);
bool needSendCancellation(KCalendarCore::Event::Ptr &event) const;
void updateEventAttendees(KCalendarCore::Event::Ptr event, bool newEvent,
const QList<CalendarData::EmailContact> &required,
Expand Down

0 comments on commit 34bfe1b

Please sign in to comment.