Skip to content

Commit

Permalink
[mkcal] Simplify dissociateSingleOccurrence by using upstream method.
Browse files Browse the repository at this point in the history
  • Loading branch information
dcaliste committed Jun 9, 2021
1 parent b02a2fb commit 55c147f
Showing 1 changed file with 13 additions and 51 deletions.
64 changes: 13 additions & 51 deletions src/extendedcalendar.cpp
Expand Up @@ -169,70 +169,32 @@ void ExtendedCalendar::close()
Incidence::Ptr ExtendedCalendar::dissociateSingleOccurrence(const Incidence::Ptr &incidence,
const QDateTime &dateTime)
{
if (!incidence || !incidence->recurs()) {
if (!incidence) {
return Incidence::Ptr();
}

// Don't save milliseconds
QDateTime recId(dateTime);
recId.setTime(QTime(recId.time().hour(),
recId.time().minute(),
recId.time().second()));

if (!incidence->allDay()) {
if (!incidence->recursAt(dateTime)) {
if (!incidence->recursAt(recId)) {
return Incidence::Ptr();
}
} else {
if (!incidence->recursOn(dateTime.date(), dateTime.timeZone())) {
if (!incidence->recursOn(recId.date(), recId.timeZone())) {
return Incidence::Ptr();
}
}

Incidence::Ptr newInc = Incidence::Ptr(incidence->clone());
QDateTime nowUTC = QDateTime::currentDateTimeUtc();
newInc->setCreated(nowUTC);
newInc->setSchedulingID(QString());
incidence->setLastModified(nowUTC);

Recurrence *recur = newInc->recurrence();
if (recur)
newInc->clearRecurrence();

// Adjust the date of the incidence
if (incidence->type() == Incidence::TypeEvent) {
Event::Ptr ev = newInc.staticCast<Event>();
QDateTime start(ev->dtStart());
qint64 secsTo = start.secsTo(dateTime);
ev->setDtStart(start.addSecs(secsTo));
ev->setDtEnd(ev->dtEnd().addSecs(secsTo));
} else if (incidence->type() == Incidence::TypeTodo) {
Todo::Ptr td = newInc.staticCast<Todo>();
bool haveOffset = false;
qint64 secsTo = 0;
if (td->hasDueDate()) {
QDateTime due(td->dtDue());
secsTo = due.secsTo(dateTime);
td->setDtDue(due.addSecs(secsTo), true);
haveOffset = true;
}
if (td->hasStartDate()) {
QDateTime start(td->dtStart());
if (!haveOffset) {
secsTo = start.secsTo(dateTime);
}
td->setDtStart(start.addSecs(secsTo));
haveOffset = true;
}
} else if (incidence->type() == Incidence::TypeJournal) {
Journal::Ptr jr = newInc.staticCast<Journal>();
QDateTime start(jr->dtStart());
qint64 secsTo = start.secsTo(dateTime);
jr->setDtStart(start.addSecs(secsTo));
Incidence::Ptr newInc = Calendar::createException(incidence, recId);
if (newInc) {
newInc->setSchedulingID(QString());
incidence->setLastModified(newInc->created());
}

// set recurrenceId for new incidence
// Don't save milliseconds
QDateTime recId(dateTime);
recId.setTime(QTime(recId.time().hour(),
recId.time().minute(),
recId.time().second()));
newInc->setRecurrenceId(recId);

return newInc;
}

Expand Down

0 comments on commit 55c147f

Please sign in to comment.