File indexing completed on 2024-11-17 04:44:56
0001 /* 0002 SPDX-FileCopyrightText: 2015-2016 Krzysztof Nowicki <krissn@op.pl> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "ewscreateitemjob.h" 0008 0009 #include "ewsresource.h" 0010 #include "tags/ewsakonaditagssyncjob.h" 0011 #include "tags/ewstagstore.h" 0012 0013 EwsCreateItemJob::EwsCreateItemJob(EwsClient &client, 0014 const Akonadi::Item &item, 0015 const Akonadi::Collection &collection, 0016 EwsTagStore *tagStore, 0017 EwsResource *parent) 0018 : EwsJob(parent) 0019 , mItem(item) 0020 , mCollection(collection) // never use 0021 , mClient(client) 0022 , mTagStore(tagStore) 0023 { 0024 } 0025 0026 EwsCreateItemJob::~EwsCreateItemJob() = default; 0027 0028 const Akonadi::Item &EwsCreateItemJob::item() const 0029 { 0030 return mItem; 0031 } 0032 0033 void EwsCreateItemJob::start() 0034 { 0035 /* Before starting check if all Akonadi tags are known to the tag store */ 0036 bool syncNeeded = false; 0037 const auto tags{mItem.tags()}; 0038 for (const Akonadi::Tag &tag : tags) { 0039 if (!mTagStore->containsId(tag.id())) { 0040 syncNeeded = true; 0041 break; 0042 } 0043 } 0044 0045 if (syncNeeded) { 0046 auto job = new EwsAkonadiTagsSyncJob(mTagStore, mClient, qobject_cast<EwsResource *>(parent())->rootCollection(), this); 0047 connect(job, &EwsAkonadiTagsSyncJob::result, this, &EwsCreateItemJob::tagSyncFinished); 0048 job->start(); 0049 } else { 0050 doStart(); 0051 } 0052 } 0053 0054 void EwsCreateItemJob::populateCommonProperties(EwsItem &item) 0055 { 0056 if (!mTagStore->writeEwsProperties(mItem, item)) { 0057 setErrorMsg(QStringLiteral("Failed to write tags despite an earlier sync")); 0058 } 0059 } 0060 0061 void EwsCreateItemJob::tagSyncFinished(KJob *job) 0062 { 0063 if (job->error()) { 0064 setErrorMsg(job->errorText()); 0065 emitResult(); 0066 } else { 0067 doStart(); 0068 } 0069 } 0070 0071 #include "moc_ewscreateitemjob.cpp"