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
|
/*
SPDX-FileCopyrightText: 2022 Laurent Montel <montel@kde.org>
SPDX-License-Identifier: GPL-2.0-or-later
*/
#include "exportmailfolderattributejobimpl.h"
#include "exportmailjobinterface.h"
#include "pimdataexportcore_debug.h"
#include <Akonadi/CollectionFetchJob>
#include <Akonadi/CollectionFetchScope>
#include <Akonadi/EntityDisplayAttribute>
#include <Akonadi/FavoriteCollectionAttribute>
#include <Akonadi/MessageFolderAttribute>
#include <MailCommon/ExpireCollectionAttribute>
ExportMailFolderAttributeJobImpl::ExportMailFolderAttributeJobImpl(QObject *parent)
: ExportMailFolderAttributeJob{parent}
{
}
ExportMailFolderAttributeJobImpl::~ExportMailFolderAttributeJobImpl() = default;
void ExportMailFolderAttributeJobImpl::fetchAttributes()
{
auto job = new Akonadi::CollectionFetchJob(Akonadi::Collection::root(), Akonadi::CollectionFetchJob::Recursive, this);
job->fetchScope().fetchAttribute<MailCommon::ExpireCollectionAttribute>();
job->fetchScope().fetchAttribute<Akonadi::EntityDisplayAttribute>();
job->fetchScope().fetchAttribute<Akonadi::FavoriteCollectionAttribute>();
job->fetchScope().fetchAttribute<Akonadi::MessageFolderAttribute>();
job->fetchScope().setContentMimeTypes({QStringLiteral("message/rfc822")});
connect(job, &Akonadi::CollectionFetchJob::result, this, &ExportMailFolderAttributeJobImpl::slotFetchFinished);
}
void ExportMailFolderAttributeJobImpl::slotFetchFinished(KJob *job)
{
if (job->error()) {
Q_EMIT failed();
deleteLater();
return;
}
auto list = static_cast<Akonadi::CollectionFetchJob *>(job);
const Akonadi::Collection::List cols = list->collections();
if (cols.isEmpty()) {
Q_EMIT successed();
qCWarning(PIMDATAEXPORTERCORE_LOG) << "It seems wierd that there is not collection.";
deleteLater();
return;
}
QMap<QString, ImportExportMailUtil::AttributeInfo> lstAttributeInfo;
for (const auto &col : cols) {
ImportExportMailUtil::AttributeInfo info;
const auto *attr = col.attribute<MailCommon::ExpireCollectionAttribute>();
if (attr) {
info.expireAttribute = attr->serialized();
}
const auto *attrDisplay = col.attribute<Akonadi::EntityDisplayAttribute>();
if (attrDisplay) {
info.expireAttribute = attrDisplay->serialized();
}
const auto *attrFavorite = col.attribute<Akonadi::FavoriteCollectionAttribute>();
if (attrFavorite) {
info.favoriteAttribute = attrFavorite->serialized();
}
const auto *attrFolder = col.attribute<Akonadi::MessageFolderAttribute>();
if (attrFolder) {
info.folderAttribute = attrFolder->serialized();
}
if (info.isValid()) {
lstAttributeInfo.insert(mInterface->convertToFullCollectionPath(col.id()), info);
}
}
storeFileFolderAttribute(lstAttributeInfo);
}
|