void NemoCalendarApi::remove(const QString &uid, const QDateTime &time) { mKCal::ExtendedCalendar::Ptr calendar = NemoCalendarDb::calendar(); KCalCore::Event::Ptr event = calendar->event(uid); if (!event) return; if (event->recurs()) event->recurrence()->addExDateTime(KDateTime(time, KDateTime::Spec(KDateTime::LocalZone))); else calendar->deleteEvent(event); // TODO: this sucks NemoCalendarDb::storage()->save(); }
void NemoCalendarEventQuery::refresh() { if (!mIsComplete) return; mKCal::ExtendedCalendar::Ptr calendar = NemoCalendarDb::calendar(); KCalCore::Event::Ptr event = mUid.isEmpty()?KCalCore::Event::Ptr():calendar->event(mUid); if (event) { if (mOccurrence) { delete mOccurrence; mOccurrence = 0; } mKCal::ExtendedCalendar::ExpandedIncidenceValidity eiv = { event->dtStart().toLocalZone().dateTime(), event->dtEnd().toLocalZone().dateTime() }; if (!mStartTime.isNull() && event->recurs()) { KDateTime startTime = KDateTime(mStartTime, KDateTime::Spec(KDateTime::LocalZone)); KCalCore::Recurrence *recurrence = event->recurrence(); if (recurrence->recursAt(startTime)) { eiv.dtStart = startTime.toLocalZone().dateTime(); eiv.dtEnd = KCalCore::Duration(event->dtStart(), event->dtEnd()).end(startTime).toLocalZone().dateTime(); } else { KDateTime match = recurrence->getNextDateTime(startTime); if (match.isNull()) match = recurrence->getPreviousDateTime(startTime); if (!match.isNull()) { eiv.dtStart = match.toLocalZone().dateTime(); eiv.dtEnd = KCalCore::Duration(event->dtStart(), event->dtEnd()).end(match).toLocalZone().dateTime(); } } } mOccurrence = new NemoCalendarEventOccurrence(qMakePair(eiv, event.dynamicCast<KCalCore::Incidence>()), this); emit occurrenceChanged(); emit eventChanged(); } else { if (mOccurrence) { delete mOccurrence; mOccurrence = 0; emit occurrenceChanged(); emit eventChanged(); } } }