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"