Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Merge branch 'jb33108' into 'master'
[nemo-qml-plugin-calendar] Show the first of N reminders. Contributes to JB#33108

See merge request mer-core/nemo-qml-plugin-calendar!34
  • Loading branch information
chriadam committed Jan 14, 2019
2 parents 34f9d2f + 3e3d190 commit 39d248a
Show file tree
Hide file tree
Showing 14 changed files with 42 additions and 147 deletions.
2 changes: 1 addition & 1 deletion src/calendardata.h
Expand Up @@ -32,7 +32,7 @@ struct Event {
bool allDay;
NemoCalendarEvent::Recur recur;
QDate recurEndDate;
NemoCalendarEvent::Reminder reminder;
int reminder; // seconds; 15 minutes before event = +900, at time of event = 0, no reminder = negative value.
QString uniqueId;
KDateTime recurrenceId;
bool readonly;
Expand Down
2 changes: 1 addition & 1 deletion src/calendarevent.cpp
Expand Up @@ -92,7 +92,7 @@ bool NemoCalendarEvent::hasRecurEndDate() const
return mManager->getEvent(mUniqueId, mRecurrenceId).recurEndDate.isValid();
}

NemoCalendarEvent::Reminder NemoCalendarEvent::reminder() const
int NemoCalendarEvent::reminder() const
{
return mManager->getEvent(mUniqueId, mRecurrenceId).reminder;
}
Expand Down
16 changes: 2 additions & 14 deletions src/calendarevent.h
Expand Up @@ -59,7 +59,7 @@ class NemoCalendarEvent : public QObject
Q_PROPERTY(NemoCalendarEvent::Recur recur READ recur NOTIFY recurChanged)
Q_PROPERTY(QDateTime recurEndDate READ recurEndDate NOTIFY recurEndDateChanged)
Q_PROPERTY(bool hasRecurEndDate READ hasRecurEndDate NOTIFY hasRecurEndDateChanged)
Q_PROPERTY(NemoCalendarEvent::Reminder reminder READ reminder NOTIFY reminderChanged)
Q_PROPERTY(int reminder READ reminder NOTIFY reminderChanged)
Q_PROPERTY(QString uniqueId READ uniqueId NOTIFY uniqueIdChanged)
Q_PROPERTY(QString recurrenceId READ recurrenceIdString CONSTANT)
Q_PROPERTY(QString color READ color NOTIFY colorChanged)
Expand All @@ -81,18 +81,6 @@ class NemoCalendarEvent : public QObject
RecurCustom
};

enum Reminder {
ReminderNone,
ReminderTime,
Reminder5Min,
Reminder15Min,
Reminder30Min,
Reminder1Hour,
Reminder2Hour,
Reminder1Day,
Reminder2Day
};

enum TimeSpec {
SpecLocalZone,
SpecClockTime
Expand Down Expand Up @@ -137,7 +125,7 @@ class NemoCalendarEvent : public QObject
Recur recur() const;
QDateTime recurEndDate() const;
bool hasRecurEndDate() const;
Reminder reminder() const;
int reminder() const;
QString uniqueId() const;
QString color() const;
bool readonly() const;
Expand Down
10 changes: 5 additions & 5 deletions src/calendareventmodification.cpp
Expand Up @@ -10,7 +10,7 @@ NemoCalendarEventModification::NemoCalendarEventModification(QObject *parent) :
QObject(parent)
{
m_event.recur = NemoCalendarEvent::RecurOnce;
m_event.reminder = NemoCalendarEvent::ReminderNone;
m_event.reminder = -1; // ReminderNone
m_event.allDay = false;
m_event.readonly = false;
m_event.startTime = KDateTime(QDateTime(), KDateTime::LocalZone);
Expand Down Expand Up @@ -150,15 +150,15 @@ QString NemoCalendarEventModification::recurrenceIdString() const
}
}

NemoCalendarEvent::Reminder NemoCalendarEventModification::reminder() const
int NemoCalendarEventModification::reminder() const
{
return m_event.reminder;
}

void NemoCalendarEventModification::setReminder(NemoCalendarEvent::Reminder reminder)
void NemoCalendarEventModification::setReminder(int seconds)
{
if (reminder != m_event.reminder) {
m_event.reminder = reminder;
if (seconds != m_event.reminder) {
m_event.reminder = seconds;
emit reminderChanged();
}
}
Expand Down
6 changes: 3 additions & 3 deletions src/calendareventmodification.h
Expand Up @@ -20,7 +20,7 @@ class NemoCalendarEventModification : public QObject
Q_PROPERTY(QDateTime recurEndDate READ recurEndDate NOTIFY recurEndDateChanged)
Q_PROPERTY(bool hasRecurEndDate READ hasRecurEndDate NOTIFY hasRecurEndDateChanged)
Q_PROPERTY(QString recurrenceId READ recurrenceIdString CONSTANT)
Q_PROPERTY(NemoCalendarEvent::Reminder reminder READ reminder WRITE setReminder NOTIFY reminderChanged)
Q_PROPERTY(int reminder READ reminder WRITE setReminder NOTIFY reminderChanged)
Q_PROPERTY(QString location READ location WRITE setLocation NOTIFY locationChanged)
Q_PROPERTY(QString calendarUid READ calendarUid WRITE setCalendarUid NOTIFY calendarUidChanged)

Expand Down Expand Up @@ -54,8 +54,8 @@ class NemoCalendarEventModification : public QObject

QString recurrenceIdString() const;

NemoCalendarEvent::Reminder reminder() const;
void setReminder(NemoCalendarEvent::Reminder);
int reminder() const;
void setReminder(int seconds);

QString location() const;
void setLocation(const QString &newLocation);
Expand Down
18 changes: 4 additions & 14 deletions src/calendarimportevent.cpp
Expand Up @@ -93,24 +93,14 @@ NemoCalendarEvent::Recur CalendarImportEvent::recur()
return NemoCalendarUtils::convertRecurrence(mEvent);
}

NemoCalendarEvent::Reminder CalendarImportEvent::reminder() const
int CalendarImportEvent::reminder() const
{
if (!mEvent)
return NemoCalendarEvent::ReminderNone;

// note: returns seconds before event, so 15 minutes before = 900.
// zero value means "reminder at time of the event".
// negative value means "no reminder".
return NemoCalendarUtils::getReminder(mEvent);
}

int CalendarImportEvent::reminderSeconds() const
{
// FIXME: this doesn't know how to say "no reminder".
if (!mEvent)
return 0;

bool hasReminder = false;
return NemoCalendarUtils::getReminderSeconds(mEvent, &hasReminder);
}

QString CalendarImportEvent::uniqueId() const
{
if (!mEvent)
Expand Down
6 changes: 2 additions & 4 deletions src/calendarimportevent.h
Expand Up @@ -49,8 +49,7 @@ class CalendarImportEvent : public QObject
Q_PROPERTY(QDateTime endTime READ endTime CONSTANT)
Q_PROPERTY(bool allDay READ allDay CONSTANT)
Q_PROPERTY(NemoCalendarEvent::Recur recur READ recur CONSTANT)
Q_PROPERTY(int reminderSeconds READ reminderSeconds CONSTANT)
Q_PROPERTY(NemoCalendarEvent::Reminder reminder READ reminder CONSTANT)
Q_PROPERTY(int reminder READ reminder 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 @@ -71,8 +70,7 @@ class CalendarImportEvent : public QObject
QDateTime endTime() const;
bool allDay() const;
NemoCalendarEvent::Recur recur();
int reminderSeconds() const;
NemoCalendarEvent::Reminder reminder() const;
int reminder() const;
QString uniqueId() const;
QString color() const;
QString location() const;
Expand Down
1 change: 0 additions & 1 deletion src/calendarmanager.cpp
Expand Up @@ -51,7 +51,6 @@ NemoCalendarManager::NemoCalendarManager() :
qRegisterMetaType<KDateTime>("KDateTime");
qRegisterMetaType<QList<KDateTime> >("QList<KDateTime>");
qRegisterMetaType<NemoCalendarEvent::Recur>("NemoCalendarEvent::Recur");
qRegisterMetaType<NemoCalendarEvent::Reminder>("NemoCalendarEvent::Reminder");
qRegisterMetaType<QHash<QString,NemoCalendarData::EventOccurrence> >("QHash<QString,NemoCalendarData::EventOccurrence>");
qRegisterMetaType<NemoCalendarData::Event>("NemoCalendarData::Event");
qRegisterMetaType<QMultiHash<QString,NemoCalendarData::Event> >("QMultiHash<QString,NemoCalendarData::Event>");
Expand Down
55 changes: 10 additions & 45 deletions src/calendarutils.cpp
Expand Up @@ -88,63 +88,28 @@ NemoCalendarEvent::Secrecy NemoCalendarUtils::convertSecrecy(const KCalCore::Eve
}
}

int NemoCalendarUtils::getReminderSeconds(const KCalCore::Event::Ptr &event, bool *hasReminder)
int NemoCalendarUtils::getReminder(const KCalCore::Event::Ptr &event)
{
KCalCore::Alarm::List alarms = event->alarms();

KCalCore::Alarm::Ptr alarm;

int seconds = -1;
for (int ii = 0; ii < alarms.count(); ++ii) {
if (alarms.at(ii)->type() == KCalCore::Alarm::Procedure)
continue;

alarm = alarms.at(ii);
if (alarm) {
*hasReminder = false;
return 0;
} else {
alarm = alarms.at(ii);
KCalCore::Duration d = alarm->startOffset();
seconds = d.asSeconds() * -1; // backend stores as "offset in seconds to dtStart", we return "seconds before"
if (seconds >= 0) {
break;
}
}
break;
}

if (!alarm) {
*hasReminder = false;
return 0;
}

KCalCore::Duration d = alarm->startOffset();
*hasReminder = true;
return d.asSeconds();
}

NemoCalendarEvent::Reminder NemoCalendarUtils::getReminder(const KCalCore::Event::Ptr &event)
{
bool hasReminder = false;
int sec = getReminderSeconds(event, &hasReminder);

if (!hasReminder) {
return NemoCalendarEvent::ReminderNone;
}

switch (sec) {
case 0:
return NemoCalendarEvent::ReminderTime;
case -5 * 60:
return NemoCalendarEvent::Reminder5Min;
case -15 * 60:
return NemoCalendarEvent::Reminder15Min;
case -30 * 60:
return NemoCalendarEvent::Reminder30Min;
case -60 * 60:
return NemoCalendarEvent::Reminder1Hour;
case -2 * 60 * 60:
return NemoCalendarEvent::Reminder2Hour;
case -24 * 60 * 60:
return NemoCalendarEvent::Reminder1Day;
case -2 * 24 * 60 * 60:
return NemoCalendarEvent::Reminder2Day;
default:
return NemoCalendarEvent::ReminderNone;
}
return seconds;
}

QList<NemoCalendarData::Attendee> NemoCalendarUtils::getEventAttendees(const KCalCore::Event::Ptr &event, const QString &ownerEmail)
Expand Down
3 changes: 1 addition & 2 deletions src/calendarutils.h
Expand Up @@ -44,8 +44,7 @@ namespace NemoCalendarUtils {

NemoCalendarEvent::Recur convertRecurrence(const KCalCore::Event::Ptr &event);
NemoCalendarEvent::Secrecy convertSecrecy(const KCalCore::Event::Ptr &event);
int getReminderSeconds(const KCalCore::Event::Ptr &event, bool *hasReminder);
NemoCalendarEvent::Reminder getReminder(const KCalCore::Event::Ptr &event);
int getReminder(const KCalCore::Event::Ptr &event);
QList<NemoCalendarData::Attendee> getEventAttendees(const KCalCore::Event::Ptr &event, const QString &ownerEmail);
QList<QObject*> convertAttendeeList(const QList<NemoCalendarData::Attendee> &list);
NemoCalendarData::EventOccurrence getNextOccurrence(const KCalCore::Event::Ptr &event,
Expand Down
44 changes: 7 additions & 37 deletions src/calendarworker.cpp
Expand Up @@ -378,45 +378,12 @@ bool NemoCalendarWorker::setRecurrence(KCalCore::Event::Ptr &event, NemoCalendar
return false;
}

KCalCore::Duration NemoCalendarWorker::reminderToDuration(NemoCalendarEvent::Reminder reminder) const
{
KCalCore::Duration offset(0);
switch (reminder) {
default:
case NemoCalendarEvent::ReminderNone:
case NemoCalendarEvent::ReminderTime:
break;
case NemoCalendarEvent::Reminder5Min:
offset = KCalCore::Duration(-5 * 60);
break;
case NemoCalendarEvent::Reminder15Min:
offset = KCalCore::Duration(-15 * 60);
break;
case NemoCalendarEvent::Reminder30Min:
offset = KCalCore::Duration(-30 * 60);
break;
case NemoCalendarEvent::Reminder1Hour:
offset = KCalCore::Duration(-60 * 60);
break;
case NemoCalendarEvent::Reminder2Hour:
offset = KCalCore::Duration(-2 * 60 * 60);
break;
case NemoCalendarEvent::Reminder1Day:
offset = KCalCore::Duration(-24 * 60 * 60);
break;
case NemoCalendarEvent::Reminder2Day:
offset = KCalCore::Duration(-2 * 24 * 60 * 60);
break;
}
return offset;
}

bool NemoCalendarWorker::setReminder(KCalCore::Event::Ptr &event, NemoCalendarEvent::Reminder reminder)
bool NemoCalendarWorker::setReminder(KCalCore::Event::Ptr &event, int seconds)
{
if (!event)
return false;

if (NemoCalendarUtils::getReminder(event) == reminder)
if (NemoCalendarUtils::getReminder(event) == seconds)
return false;

KCalCore::Alarm::List alarms = event->alarms();
Expand All @@ -426,10 +393,13 @@ bool NemoCalendarWorker::setReminder(KCalCore::Event::Ptr &event, NemoCalendarEv
event->removeAlarm(alarms.at(ii));
}

if (reminder != NemoCalendarEvent::ReminderNone) {
// negative reminder seconds means "no reminder", so only
// deal with positive (or zero = at time of event) reminders.
if (seconds >= 0) {
KCalCore::Alarm::Ptr alarm = event->newAlarm();
alarm->setEnabled(true);
alarm->setStartOffset(reminderToDuration(reminder));
// backend stores as "offset to dtStart", i.e negative if reminder before event.
alarm->setStartOffset(-1 * seconds);
alarm->setType(KCalCore::Alarm::Display);
}

Expand Down
3 changes: 1 addition & 2 deletions src/calendarworker.h
Expand Up @@ -114,10 +114,9 @@ public slots:
bool saveExcludeNotebook(const QString &notebookUid, bool exclude);

bool setRecurrence(KCalCore::Event::Ptr &event, NemoCalendarEvent::Recur recur);
bool setReminder(KCalCore::Event::Ptr &event, NemoCalendarEvent::Reminder reminder);
bool setReminder(KCalCore::Event::Ptr &event, int reminderSeconds);
bool needSendCancellation(KCalCore::Event::Ptr &event) const;

KCalCore::Duration reminderToDuration(NemoCalendarEvent::Reminder reminder) const;
NemoCalendarData::Event createEventStruct(const KCalCore::Event::Ptr &event) const;
QHash<QString, NemoCalendarData::EventOccurrence> eventOccurrences(const QList<NemoCalendarData::Range> &ranges) const;
QHash<QDate, QStringList> dailyEventOccurrences(const QList<NemoCalendarData::Range> &ranges,
Expand Down
18 changes: 2 additions & 16 deletions src/plugins.qmltypes
Expand Up @@ -103,20 +103,6 @@ Module {
"RecurCustom": 6
}
}
Enum {
name: "Reminder"
values: {
"ReminderNone": 0,
"ReminderTime": 1,
"Reminder5Min": 2,
"Reminder15Min": 3,
"Reminder30Min": 4,
"Reminder1Hour": 5,
"Reminder2Hour": 6,
"Reminder1Day": 7,
"Reminder2Day": 8
}
}
Enum {
name: "TimeSpec"
values: {
Expand Down Expand Up @@ -168,7 +154,7 @@ Module {
Property { name: "recur"; type: "NemoCalendarEvent::Recur"; isReadonly: true }
Property { name: "recurEndDate"; type: "QDateTime"; isReadonly: true }
Property { name: "hasRecurEndDate"; type: "bool"; isReadonly: true }
Property { name: "reminder"; type: "NemoCalendarEvent::Reminder"; isReadonly: true }
Property { name: "reminder"; type: "int"; isReadonly: true }
Property { name: "uniqueId"; type: "string"; isReadonly: true }
Property { name: "recurrenceId"; type: "string"; isReadonly: true }
Property { name: "color"; type: "string"; isReadonly: true }
Expand Down Expand Up @@ -205,7 +191,7 @@ Module {
Property { name: "recurEndDate"; type: "QDateTime"; isReadonly: true }
Property { name: "hasRecurEndDate"; type: "bool"; isReadonly: true }
Property { name: "recurrenceId"; type: "string"; isReadonly: true }
Property { name: "reminder"; type: "NemoCalendarEvent::Reminder" }
Property { name: "reminder"; type: "int" }
Property { name: "location"; type: "string" }
Property { name: "calendarUid"; type: "string" }
Method {
Expand Down
5 changes: 3 additions & 2 deletions tests/tst_calendarevent/tst_calendarevent.cpp
Expand Up @@ -98,7 +98,8 @@ void tst_CalendarEvent::modSetters()
QCOMPARE(eventMod->recurEndDate(), QDateTime(recurEnd.date())); // day precision

QSignalSpy reminderSpy(eventMod, SIGNAL(reminderChanged()));
NemoCalendarEvent::Reminder reminder = NemoCalendarEvent::ReminderTime; // default is ReminderNone
QVERIFY(eventMod->reminder() < 0); // default is ReminderNone == negative reminder.
int reminder = 900; // 15 minutes before
eventMod->setReminder(reminder);
QCOMPARE(reminderSpy.count(), 1);
QCOMPARE(eventMod->reminder(), reminder);
Expand Down Expand Up @@ -145,7 +146,7 @@ void tst_CalendarEvent::testSave()
eventMod->setRecurEndDate(recurEnd);
QCOMPARE(eventMod->recurEndDate(), QDateTime(recurEnd.date()));

NemoCalendarEvent::Reminder reminder = NemoCalendarEvent::ReminderTime;
int reminder = 0; // at the time of the event
eventMod->setReminder(reminder);
QCOMPARE(eventMod->reminder(), reminder);

Expand Down

0 comments on commit 39d248a

Please sign in to comment.