File indexing completed on 2024-05-12 05:25:34

0001 /*
0002    SPDX-FileCopyrightText: 2013-2024 Laurent Montel <montel@kde.org>
0003 
0004    SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "synchronizeresourcejob.h"
0008 
0009 #include <Akonadi/AgentInstance>
0010 #include <Akonadi/AgentManager>
0011 #include <Akonadi/ResourceSynchronizationJob>
0012 
0013 #include "pimdataexportcore_debug.h"
0014 #include <QTimer>
0015 
0016 SynchronizeResourceJob::SynchronizeResourceJob(QObject *parent)
0017     : QObject(parent)
0018 {
0019 }
0020 
0021 SynchronizeResourceJob::~SynchronizeResourceJob() = default;
0022 
0023 void SynchronizeResourceJob::start()
0024 {
0025     if (mListResources.isEmpty()) {
0026         Q_EMIT synchronizationFinished();
0027     } else {
0028         QTimer::singleShot(0, this, &SynchronizeResourceJob::slotNextSync);
0029     }
0030 }
0031 
0032 void SynchronizeResourceJob::slotNextSync()
0033 {
0034     if (mIndex < mListResources.count()) {
0035         const Akonadi::AgentInstance resource = Akonadi::AgentManager::self()->instance(mListResources.at(mIndex));
0036         qCDebug(PIMDATAEXPORTERCORE_LOG) << " resource.name" << resource.name();
0037         auto job = new Akonadi::ResourceSynchronizationJob(resource);
0038         job->setTimeoutCountLimit(10);
0039         job->setCollectionTreeOnly(mOnlyCollection);
0040         connect(job, &Akonadi::ResourceSynchronizationJob::result, this, &SynchronizeResourceJob::slotSynchronizationFinished);
0041         job->start();
0042     } else {
0043         Q_EMIT synchronizationFinished();
0044     }
0045 }
0046 
0047 void SynchronizeResourceJob::slotSynchronizationFinished(KJob *job)
0048 {
0049     auto resourceSync = qobject_cast<Akonadi::ResourceSynchronizationJob *>(job);
0050     const QString instanceName = resourceSync->resource().name();
0051     if (job->error()) {
0052         qCWarning(PIMDATAEXPORTERCORE_LOG) << " Failed to synchronize :" << job->errorString();
0053         Q_EMIT synchronizationInstanceFailed(instanceName);
0054     } else {
0055         Q_EMIT synchronizationInstanceDone(instanceName, resourceSync->resource().identifier());
0056     }
0057     ++mIndex;
0058     QTimer::singleShot(0, this, &SynchronizeResourceJob::slotNextSync);
0059 }
0060 
0061 void SynchronizeResourceJob::setListResources(const QStringList &resources)
0062 {
0063     mListResources = resources;
0064 }
0065 
0066 void SynchronizeResourceJob::setSynchronizeOnlyCollection(bool onlyCollection)
0067 {
0068     mOnlyCollection = onlyCollection;
0069 }
0070 
0071 #include "moc_synchronizeresourcejob.cpp"