File indexing completed on 2024-06-16 05:00:33

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 "exportmailfolderattributejobimpl.h"
0008 #include "exportmailjobinterface.h"
0009 #include "pimdataexportcore_debug.h"
0010 #include <Akonadi/CollectionFetchJob>
0011 #include <Akonadi/CollectionFetchScope>
0012 #include <Akonadi/EntityDisplayAttribute>
0013 #include <Akonadi/FavoriteCollectionAttribute>
0014 #include <Akonadi/MessageFolderAttribute>
0015 #include <MailCommon/ExpireCollectionAttribute>
0016 
0017 ExportMailFolderAttributeJobImpl::ExportMailFolderAttributeJobImpl(QObject *parent)
0018     : ExportMailFolderAttributeJob{parent}
0019 {
0020 }
0021 
0022 ExportMailFolderAttributeJobImpl::~ExportMailFolderAttributeJobImpl() = default;
0023 
0024 void ExportMailFolderAttributeJobImpl::fetchAttributes()
0025 {
0026     auto job = new Akonadi::CollectionFetchJob(Akonadi::Collection::root(), Akonadi::CollectionFetchJob::Recursive, this);
0027     job->fetchScope().fetchAttribute<MailCommon::ExpireCollectionAttribute>();
0028     job->fetchScope().fetchAttribute<Akonadi::EntityDisplayAttribute>();
0029     job->fetchScope().fetchAttribute<Akonadi::FavoriteCollectionAttribute>();
0030     job->fetchScope().fetchAttribute<Akonadi::MessageFolderAttribute>();
0031     job->fetchScope().setContentMimeTypes({QStringLiteral("message/rfc822")});
0032     connect(job, &Akonadi::CollectionFetchJob::result, this, &ExportMailFolderAttributeJobImpl::slotFetchFinished);
0033 }
0034 
0035 void ExportMailFolderAttributeJobImpl::slotFetchFinished(KJob *job)
0036 {
0037     if (job->error()) {
0038         Q_EMIT failed();
0039         deleteLater();
0040         return;
0041     }
0042 
0043     auto list = static_cast<Akonadi::CollectionFetchJob *>(job);
0044     const Akonadi::Collection::List cols = list->collections();
0045     if (cols.isEmpty()) {
0046         Q_EMIT successed();
0047         qCWarning(PIMDATAEXPORTERCORE_LOG) << "It seems wierd that there is not collection.";
0048         deleteLater();
0049         return;
0050     }
0051     QMap<QString, ImportExportMailUtil::AttributeInfo> lstAttributeInfo;
0052     for (const auto &col : cols) {
0053         ImportExportMailUtil::AttributeInfo info;
0054 
0055         const auto *attr = col.attribute<MailCommon::ExpireCollectionAttribute>();
0056         if (attr) {
0057             info.expireAttribute = attr->serialized();
0058         }
0059         const auto *attrDisplay = col.attribute<Akonadi::EntityDisplayAttribute>();
0060         if (attrDisplay) {
0061             info.expireAttribute = attrDisplay->serialized();
0062         }
0063         const auto *attrFavorite = col.attribute<Akonadi::FavoriteCollectionAttribute>();
0064         if (attrFavorite) {
0065             info.favoriteAttribute = attrFavorite->serialized();
0066         }
0067         const auto *attrFolder = col.attribute<Akonadi::MessageFolderAttribute>();
0068         if (attrFolder) {
0069             info.folderAttribute = attrFolder->serialized();
0070         }
0071         if (info.isValid()) {
0072             lstAttributeInfo.insert(mInterface->convertToFullCollectionPath(col.id()), info);
0073         }
0074     }
0075     storeFileFolderAttribute(lstAttributeInfo);
0076 }
0077 
0078 #include "moc_exportmailfolderattributejobimpl.cpp"