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"