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"