File indexing completed on 2025-05-04 04:54:54
0001 /* 0002 SPDX-FileCopyrightText: 2014-2024 Laurent Montel <montel@kde.org> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "followupreminderfinishtaskjob.h" 0008 #include "followupreminderagent_debug.h" 0009 0010 #include <Akonadi/ItemFetchJob> 0011 #include <Akonadi/ItemModifyJob> 0012 #include <KCalendarCore/Todo> 0013 0014 FollowUpReminderFinishTaskJob::FollowUpReminderFinishTaskJob(Akonadi::Item::Id id, QObject *parent) 0015 : QObject(parent) 0016 , mTodoId(id) 0017 { 0018 } 0019 0020 FollowUpReminderFinishTaskJob::~FollowUpReminderFinishTaskJob() = default; 0021 0022 void FollowUpReminderFinishTaskJob::start() 0023 { 0024 if (mTodoId != -1) { 0025 closeTodo(); 0026 } else { 0027 qCWarning(FOLLOWUPREMINDERAGENT_LOG) << "Failed to FollowUpReminderFinishTaskJob::start"; 0028 Q_EMIT finishTaskFailed(); 0029 deleteLater(); 0030 } 0031 } 0032 0033 void FollowUpReminderFinishTaskJob::closeTodo() 0034 { 0035 Akonadi::Item item(mTodoId); 0036 auto job = new Akonadi::ItemFetchJob(item, this); 0037 connect(job, &Akonadi::ItemFetchJob::result, this, &FollowUpReminderFinishTaskJob::slotItemFetchJobDone); 0038 } 0039 0040 void FollowUpReminderFinishTaskJob::slotItemFetchJobDone(KJob *job) 0041 { 0042 if (job->error()) { 0043 qCWarning(FOLLOWUPREMINDERAGENT_LOG) << "Failed to fetch item in FollowUpReminderFinishTaskJob : " << job->errorString(); 0044 Q_EMIT finishTaskFailed(); 0045 deleteLater(); 0046 return; 0047 } 0048 0049 const Akonadi::Item::List lst = qobject_cast<Akonadi::ItemFetchJob *>(job)->items(); 0050 if (lst.count() == 1) { 0051 const Akonadi::Item item = lst.first(); 0052 if (!item.hasPayload<KCalendarCore::Todo::Ptr>()) { 0053 qCDebug(FOLLOWUPREMINDERAGENT_LOG) << "FollowUpReminderFinishTaskJob::slotItemFetchJobDone: item is not a todo."; 0054 Q_EMIT finishTaskFailed(); 0055 deleteLater(); 0056 return; 0057 } 0058 auto todo = item.payload<KCalendarCore::Todo::Ptr>(); 0059 todo->setCompleted(true); 0060 Akonadi::Item updateItem = item; 0061 updateItem.setPayload<KCalendarCore::Todo::Ptr>(todo); 0062 0063 auto job = new Akonadi::ItemModifyJob(updateItem); 0064 connect(job, &Akonadi::ItemModifyJob::result, this, &FollowUpReminderFinishTaskJob::slotItemModifiedResult); 0065 } else { 0066 qCWarning(FOLLOWUPREMINDERAGENT_LOG) << " Found item different from 1: " << lst.count(); 0067 Q_EMIT finishTaskFailed(); 0068 deleteLater(); 0069 return; 0070 } 0071 } 0072 0073 void FollowUpReminderFinishTaskJob::slotItemModifiedResult(KJob *job) 0074 { 0075 if (job->error()) { 0076 qCWarning(FOLLOWUPREMINDERAGENT_LOG) << "FollowUpReminderFinishTaskJob::slotItemModifiedResult: Error during modified item: " << job->errorString(); 0077 Q_EMIT finishTaskFailed(); 0078 } else { 0079 Q_EMIT finishTaskDone(); 0080 } 0081 deleteLater(); 0082 } 0083 0084 #include "moc_followupreminderfinishtaskjob.cpp"