1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
|
/*
SPDX-FileCopyrightText: 2022 Laurent Montel <montel@kde.org>
SPDX-License-Identifier: GPL-2.0-or-later
*/
#include "importmailfolderattributejobimpl.h"
#include "pimdataexportcore_debug.h"
#include <Akonadi/CollectionFetchJob>
#include <Akonadi/CollectionFetchScope>
#include <Akonadi/CollectionModifyJob>
#include <Akonadi/EntityDisplayAttribute>
#include <Akonadi/FavoriteCollectionAttribute>
#include <MailCommon/ExpireCollectionAttribute>
ImportMailFolderAttributeJobImpl::ImportMailFolderAttributeJobImpl(QObject *parent)
: ImportMailFolderAttributeJob{parent}
{
}
ImportMailFolderAttributeJobImpl::~ImportMailFolderAttributeJobImpl() = default;
void ImportMailFolderAttributeJobImpl::applyAttributes(const QMap<Akonadi::Collection::Id, ImportExportMailUtil::AttributeInfo> &map)
{
mIndexMap.reset(new QMapIterator<Akonadi::Collection::Id, ImportExportMailUtil::AttributeInfo>(map));
nextAttribute();
}
void ImportMailFolderAttributeJobImpl::nextAttribute()
{
if (mIndexMap->hasNext()) {
mIndexMap->next();
qDebug() << " restoring folder attribute " << mIndexMap->key();
if (mIndexMap->key() == -1) {
qCWarning(PIMDATAEXPORTERCORE_LOG) << " It's a bug ! restoring folder attribute " << mIndexMap->key();
nextAttribute();
return;
}
auto fetch = new Akonadi::CollectionFetchJob(Akonadi::Collection(mIndexMap->key()), Akonadi::CollectionFetchJob::Base, this);
fetch->fetchScope().fetchAttribute<Akonadi::EntityDisplayAttribute>();
fetch->fetchScope().fetchAttribute<MailCommon::ExpireCollectionAttribute>();
connect(fetch, &Akonadi::CollectionFetchJob::result, this, &ImportMailFolderAttributeJobImpl::collectionFetchResult);
connect(fetch, &Akonadi::CollectionFetchJob::collectionsReceived, this, [this](const Akonadi::Collection::List &cols) {
if (cols.count() != 1) {
nextAttribute();
return;
}
Akonadi::Collection col = cols.first();
if (!mIndexMap->value().expireAttribute.isEmpty()) {
MailCommon::ExpireCollectionAttribute *expireAttribute =
col.attribute<MailCommon::ExpireCollectionAttribute>(Akonadi::Collection::AddIfMissing);
expireAttribute->deserialize(mIndexMap->value().expireAttribute);
}
if (!mIndexMap->value().displayAttribute.isEmpty()) {
Akonadi::EntityDisplayAttribute *entityAttribute = col.attribute<Akonadi::EntityDisplayAttribute>(Akonadi::Collection::AddIfMissing);
entityAttribute->deserialize(mIndexMap->value().displayAttribute);
}
if (!mIndexMap->value().favoriteAttribute.isEmpty()) {
Akonadi::FavoriteCollectionAttribute *favoriteAttribute =
col.attribute<Akonadi::FavoriteCollectionAttribute>(Akonadi::Collection::AddIfMissing);
favoriteAttribute->deserialize(mIndexMap->value().favoriteAttribute);
}
qDebug() << " modify folder attribute " << mIndexMap->key();
auto job = new Akonadi::CollectionModifyJob(col, this);
connect(job, &Akonadi::CollectionModifyJob::result, this, &ImportMailFolderAttributeJobImpl::slotCollectionModifyDone);
});
} else {
// Call it when all is finished!
qDebug() << " restoring folder attribute finished";
restoreFileFolderAttribute();
}
}
void ImportMailFolderAttributeJobImpl::collectionFetchResult(KJob *job)
{
if (job->error()) {
qCWarning(PIMDATAEXPORTERCORE_LOG) << "Error when we fetch collection: " << job->errorString();
nextAttribute();
}
}
void ImportMailFolderAttributeJobImpl::slotCollectionModifyDone(KJob *job)
{
if (job->error()) {
qCWarning(PIMDATAEXPORTERCORE_LOG) << "Error when we modified collection: " << job->errorString();
}
nextAttribute();
}
|