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 23, 2021
1 parent da5cf5b commit 94d3a24
Showing 1 changed file with 19 additions and 50 deletions.
69 changes: 19 additions & 50 deletions src/extendedcalendar.cpp
Expand Up @@ -169,69 +169,38 @@ 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;
const Incidence::List exceptions = instances(incidence);
for (const Incidence::Ptr &exception : exceptions) {
if (exception->recurrenceId() == dateTime) {
qCWarning(lcMkcal) << "Exception already exists, cannot dissociate.";
return Incidence::Ptr();
}
} 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));
}

// 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);
Incidence::Ptr newInc = Calendar::createException(incidence, recId);
if (newInc) {
newInc->setSchedulingID(QString());
incidence->setLastModified(newInc->created());
}

return newInc;
}
Expand Down

0 comments on commit 94d3a24

Please sign in to comment.