void CalendarResource::itemAdded(const Akonadi::Item &item, const Akonadi::Collection &collection) { if ((!collection.contentMimeTypes().contains(KCalCore::Event::eventMimeType()) && !collection.contentMimeTypes().contains(KCalCore::Todo::todoMimeType())) || (!canPerformTask<KCalCore::Event::Ptr>(item, KCalCore::Event::eventMimeType()) && !canPerformTask<KCalCore::Todo::Ptr>(item, KCalCore::Todo::todoMimeType()))) { return; } if (collection.parentCollection() == Akonadi::Collection::root()) { cancelTask(i18n("The top-level collection cannot contain any tasks or events")); return; } KGAPI2::Job *job = Q_NULLPTR; if (item.hasPayload<KCalCore::Event::Ptr>()) { KCalCore::Event::Ptr event = item.payload<KCalCore::Event::Ptr>(); EventPtr kevent(new Event(*event)); kevent->setUid(QLatin1String("")); job = new EventCreateJob(kevent, collection.remoteId(), account(), this); } else if (item.hasPayload<KCalCore::Todo::Ptr>()) { KCalCore::Todo::Ptr todo = item.payload<KCalCore::Todo::Ptr>(); TaskPtr ktodo(new Task(*todo)); ktodo->setUid(QLatin1String("")); if (!ktodo->relatedTo(KCalCore::Incidence::RelTypeParent).isEmpty()) { Akonadi::Item parentItem; parentItem.setGid(ktodo->relatedTo(KCalCore::Incidence::RelTypeParent)); ItemFetchJob *fetchJob = new ItemFetchJob(parentItem, this); fetchJob->setProperty(ITEM_PROPERTY, QVariant::fromValue(item)); fetchJob->setProperty(TASK_PROPERTY, QVariant::fromValue(ktodo)); connect(fetchJob, &ItemFetchJob::finished, this, &CalendarResource::slotTaskAddedSearchFinished); return; } else { job = new TaskCreateJob(ktodo, collection.remoteId(), account(), this); } } else { cancelTask(i18n("Invalid payload type")); return; } job->setProperty(ITEM_PROPERTY, QVariant::fromValue(item)); connect(job, &EventCreateJob::finished, this, &CalendarResource::slotCreateJobFinished); }
void TransportResourceBasePrivate::send(Item::Id id) { ItemFetchJob *job = new ItemFetchJob(Item(id)); job->fetchScope().fetchFullPayload(); job->setProperty("id", QVariant(id)); connect(job, &KJob::result, this, &TransportResourceBasePrivate::fetchResult); }
void CalendarResource::itemRemoved(const Akonadi::Item &item) { if (!canPerformTask()) { return; } if (item.mimeType() == KCalCore::Event::eventMimeType()) { KGAPI2::Job *job = new EventDeleteJob(item.remoteId(), item.parentCollection().remoteId(), account(), this); job->setProperty(ITEM_PROPERTY, QVariant::fromValue(item)); connect(job, &EventCreateJob::finished, this, &CalendarResource::slotGenericJobFinished); } else if (item.mimeType() == KCalCore::Todo::todoMimeType()) { /* Google always automatically removes tasks with all their subtasks. In KOrganizer * by default we only remove the item we are given. For this reason we have to first * fetch all tasks, find all sub-tasks for the task being removed and detach them * from the task. Only then the task can be safely removed. */ ItemFetchJob *fetchJob = new ItemFetchJob(item.parentCollection()); fetchJob->setAutoDelete(true); fetchJob->fetchScope().fetchFullPayload(true); fetchJob->setProperty(ITEM_PROPERTY, qVariantFromValue(item)); connect(fetchJob, &ItemFetchJob::finished, this, &CalendarResource::slotRemoveTaskFetchJobFinished); fetchJob->start(); } else { cancelTask(i18n("Invalid payload type. Expected event or todo, got %1", item.mimeType())); } }