File indexing completed on 2024-06-16 05:00:34
0001 /* 0002 SPDX-FileCopyrightText: 2022-2024 Laurent Montel <montel@kde.org> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "importmailfolderattributejobimpl.h" 0008 #include "pimdataexportcore_debug.h" 0009 #include <Akonadi/CollectionFetchJob> 0010 #include <Akonadi/CollectionFetchScope> 0011 #include <Akonadi/CollectionModifyJob> 0012 #include <Akonadi/EntityDisplayAttribute> 0013 #include <Akonadi/FavoriteCollectionAttribute> 0014 #include <MailCommon/ExpireCollectionAttribute> 0015 0016 ImportMailFolderAttributeJobImpl::ImportMailFolderAttributeJobImpl(QObject *parent) 0017 : ImportMailFolderAttributeJob{parent} 0018 { 0019 } 0020 0021 ImportMailFolderAttributeJobImpl::~ImportMailFolderAttributeJobImpl() = default; 0022 0023 void ImportMailFolderAttributeJobImpl::applyAttributes(const QMap<Akonadi::Collection::Id, ImportExportMailUtil::AttributeInfo> &map) 0024 { 0025 mIndexMap.reset(new QMapIterator<Akonadi::Collection::Id, ImportExportMailUtil::AttributeInfo>(map)); 0026 nextAttribute(); 0027 } 0028 0029 void ImportMailFolderAttributeJobImpl::nextAttribute() 0030 { 0031 if (mIndexMap->hasNext()) { 0032 mIndexMap->next(); 0033 qDebug() << " restoring folder attribute " << mIndexMap->key(); 0034 if (mIndexMap->key() == -1) { 0035 qCWarning(PIMDATAEXPORTERCORE_LOG) << " It's a bug ! restoring folder attribute " << mIndexMap->key(); 0036 nextAttribute(); 0037 return; 0038 } 0039 auto fetch = new Akonadi::CollectionFetchJob(Akonadi::Collection(mIndexMap->key()), Akonadi::CollectionFetchJob::Base, this); 0040 fetch->fetchScope().fetchAttribute<Akonadi::EntityDisplayAttribute>(); 0041 fetch->fetchScope().fetchAttribute<MailCommon::ExpireCollectionAttribute>(); 0042 connect(fetch, &Akonadi::CollectionFetchJob::result, this, &ImportMailFolderAttributeJobImpl::collectionFetchResult); 0043 connect(fetch, &Akonadi::CollectionFetchJob::collectionsReceived, this, [this](const Akonadi::Collection::List &cols) { 0044 if (cols.count() != 1) { 0045 nextAttribute(); 0046 return; 0047 } 0048 Akonadi::Collection col = cols.first(); 0049 if (!mIndexMap->value().expireAttribute.isEmpty()) { 0050 MailCommon::ExpireCollectionAttribute *expireAttribute = 0051 col.attribute<MailCommon::ExpireCollectionAttribute>(Akonadi::Collection::AddIfMissing); 0052 expireAttribute->deserialize(mIndexMap->value().expireAttribute); 0053 } 0054 if (!mIndexMap->value().displayAttribute.isEmpty()) { 0055 Akonadi::EntityDisplayAttribute *entityAttribute = col.attribute<Akonadi::EntityDisplayAttribute>(Akonadi::Collection::AddIfMissing); 0056 entityAttribute->deserialize(mIndexMap->value().displayAttribute); 0057 } 0058 if (!mIndexMap->value().favoriteAttribute.isEmpty()) { 0059 Akonadi::FavoriteCollectionAttribute *favoriteAttribute = 0060 col.attribute<Akonadi::FavoriteCollectionAttribute>(Akonadi::Collection::AddIfMissing); 0061 favoriteAttribute->deserialize(mIndexMap->value().favoriteAttribute); 0062 } 0063 0064 qDebug() << " modify folder attribute " << mIndexMap->key(); 0065 auto job = new Akonadi::CollectionModifyJob(col, this); 0066 connect(job, &Akonadi::CollectionModifyJob::result, this, &ImportMailFolderAttributeJobImpl::slotCollectionModifyDone); 0067 }); 0068 } else { 0069 // Call it when all is finished! 0070 qDebug() << " restoring folder attribute finished"; 0071 restoreFileFolderAttribute(); 0072 } 0073 } 0074 0075 void ImportMailFolderAttributeJobImpl::collectionFetchResult(KJob *job) 0076 { 0077 if (job->error()) { 0078 qCWarning(PIMDATAEXPORTERCORE_LOG) << "Error when we fetch collection: " << job->errorString(); 0079 nextAttribute(); 0080 } 0081 } 0082 0083 void ImportMailFolderAttributeJobImpl::slotCollectionModifyDone(KJob *job) 0084 { 0085 if (job->error()) { 0086 qCWarning(PIMDATAEXPORTERCORE_LOG) << "Error when we modified collection: " << job->errorString(); 0087 } 0088 nextAttribute(); 0089 } 0090 0091 #include "moc_importmailfolderattributejobimpl.cpp"