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

0001 /*
0002    SPDX-FileCopyrightText: 2020-2024 Laurent Montel <montel@kde.org>
0003 
0004    SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "exportmailjobinterfaceimpl.h"
0008 #include "exportmailfolderattributejobimpl.h"
0009 #include <KIdentityManagementCore/IdentityManager>
0010 #include <MailCommon/FilterImporterExporter>
0011 #include <MailCommon/FilterManager>
0012 #include <MailCommon/MailUtil>
0013 
0014 #include <Akonadi/Collection>
0015 
0016 #include <MailTransport/TransportManager>
0017 
0018 #include <KLocalizedString>
0019 #include <KZip>
0020 #include <QTemporaryFile>
0021 
0022 #include "exportresourcearchivejob.h"
0023 #include "resourceconverterimpl.h"
0024 #include <QStandardPaths>
0025 
0026 #include <KIdentityManagementCore/Identity>
0027 #include <KIdentityManagementCore/IdentityManager>
0028 
0029 ExportMailJobInterfaceImpl::ExportMailJobInterfaceImpl(QObject *parent, Utils::StoredTypes typeSelected, ArchiveStorage *archiveStorage, int numberOfStep)
0030     : ExportMailJobInterface(parent, typeSelected, archiveStorage, numberOfStep)
0031     , mIdentityManager(KIdentityManagementCore::IdentityManager::self())
0032 {
0033 }
0034 
0035 ExportMailJobInterfaceImpl::~ExportMailJobInterfaceImpl() = default;
0036 
0037 Akonadi::Collection::Id ExportMailJobInterfaceImpl::convertFolderPathToCollectionId(const QString &path)
0038 {
0039     ResourceConverterImpl converter;
0040     return converter.convertFolderPathToCollectionId(path);
0041 }
0042 
0043 void ExportMailJobInterfaceImpl::convertCollectionIdsToRealPath(KConfigGroup &group, const QString &currentKey, const QString &prefixCollection)
0044 {
0045     ResourceConverterImpl converter;
0046     converter.convertCollectionIdsToRealPath(group, currentKey, prefixCollection);
0047 }
0048 
0049 void ExportMailJobInterfaceImpl::convertCollectionToRealPath(KConfigGroup &group, const QString &currentKey)
0050 {
0051     ResourceConverterImpl converter;
0052     converter.convertCollectionToRealPath(group, currentKey);
0053 }
0054 
0055 void ExportMailJobInterfaceImpl::convertCollectionListToRealPath(KConfigGroup &group, const QString &currentKey)
0056 {
0057     ResourceConverterImpl converter;
0058     converter.convertCollectionListToRealPath(group, currentKey);
0059 }
0060 
0061 QList<MailCommon::MailFilter *> ExportMailJobInterfaceImpl::filters()
0062 {
0063     return MailCommon::FilterManager::instance()->filters();
0064 }
0065 
0066 QString ExportMailJobInterfaceImpl::convertToFullCollectionPath(const qlonglong collectionValue)
0067 {
0068     ResourceConverterImpl converter;
0069     return converter.convertToFullCollectionPath(collectionValue);
0070 }
0071 
0072 QList<Utils::AkonadiInstanceInfo> ExportMailJobInterfaceImpl::listOfResource()
0073 {
0074     return Utils::listOfResource();
0075 }
0076 
0077 void ExportMailJobInterfaceImpl::exportResourceToArchive(const QString &archivePath, const QString &url, const QString &identifier)
0078 {
0079     auto resourceJob = new ExportResourceArchiveJob(this);
0080     resourceJob->setArchivePath(archivePath);
0081     resourceJob->setUrl(url);
0082     resourceJob->setIdentifier(identifier);
0083     resourceJob->setArchive(archive());
0084     resourceJob->setArchiveName(Utils::resourceMailArchiveName());
0085     connect(resourceJob, &ExportResourceArchiveJob::error, this, &ExportMailJobInterfaceImpl::emitError);
0086     connect(resourceJob, &ExportResourceArchiveJob::info, this, &ExportMailJobInterfaceImpl::emitInfo);
0087     connect(resourceJob, &ExportResourceArchiveJob::terminated, this, &ExportMailJobInterfaceImpl::slotMailsJobTerminated);
0088     connect(this, &ExportMailJobInterfaceImpl::taskCanceled, resourceJob, &ExportResourceArchiveJob::slotTaskCanceled);
0089     resourceJob->start();
0090 }
0091 
0092 QString ExportMailJobInterfaceImpl::storeResources(KZip *archive, const QString &identifier, const QString &path)
0093 {
0094     ResourceConverterImpl converter;
0095     return converter.storeResources(archive, identifier, path);
0096 }
0097 
0098 QString ExportMailJobInterfaceImpl::resourcePath(const QString &identifier) const
0099 {
0100     ResourceConverterImpl converter;
0101     const QString url = converter.resourcePath(identifier, QStringLiteral("$HOME/.local/share/local-mail/"));
0102     return url;
0103 }
0104 
0105 void ExportMailJobInterfaceImpl::backupMailResourceFile(const QString &agentIdentifier, const QString &defaultPath)
0106 {
0107     backupResourceFile(agentIdentifier, defaultPath);
0108 }
0109 
0110 QString ExportMailJobInterfaceImpl::adaptNewResourceUrl(bool overwriteResources, const KSharedConfig::Ptr &resourceConfig, const QString &storePath)
0111 {
0112     ResourceConverterImpl converter;
0113     return converter.adaptNewResourceUrl(overwriteResources, resourceConfig, storePath);
0114 }
0115 
0116 QString ExportMailJobInterfaceImpl::createResource(const QString &resources, const QString &name, const QMap<QString, QVariant> &settings, bool synchronizeTree)
0117 {
0118     Q_UNUSED(resources);
0119     Q_UNUSED(name);
0120     Q_UNUSED(settings);
0121     Q_UNUSED(synchronizeTree);
0122 
0123     Q_UNREACHABLE();
0124     return {};
0125 }
0126 
0127 void ExportMailJobInterfaceImpl::exportFilters()
0128 {
0129     const QList<MailCommon::MailFilter *> lstFilter = filters();
0130     if (!lstFilter.isEmpty()) {
0131         QTemporaryFile tmp;
0132         tmp.open();
0133         const QUrl url = QUrl::fromLocalFile(tmp.fileName());
0134         MailCommon::FilterImporterExporter mailCommonExportFilters;
0135         mailCommonExportFilters.exportFilters(lstFilter, url, true);
0136         tmp.close();
0137         const bool fileAdded = archive()->addLocalFile(tmp.fileName(), Utils::configsPath() + QStringLiteral("filters"));
0138         if (fileAdded) {
0139             emitInfo(i18n("Filters backup done."));
0140         } else {
0141             emitError(i18n("Filters cannot be exported."));
0142         }
0143     }
0144 }
0145 
0146 QList<uint> ExportMailJobInterfaceImpl::listIdentityUoid() const
0147 {
0148     QList<uint> listUiod;
0149     KIdentityManagementCore::IdentityManager::ConstIterator end = mIdentityManager->end();
0150     for (KIdentityManagementCore::IdentityManager::ConstIterator it = mIdentityManager->begin(); it != end; ++it) {
0151         const uint identityUoid = (*it).uoid();
0152         listUiod << identityUoid;
0153     }
0154     return listUiod;
0155 }
0156 
0157 void ExportMailJobInterfaceImpl::exportFolderAttributes()
0158 {
0159     auto job = new ExportMailFolderAttributeJobImpl(this);
0160     job->setArchive(archive());
0161     job->setExportInterface(this);
0162     connect(job, &ExportMailFolderAttributeJobImpl::successed, this, [this]() {
0163         emitInfo(i18n("Backing up Folder Attributes done."));
0164         Q_EMIT exportAttributeDone();
0165     });
0166     connect(job, &ExportMailFolderAttributeJobImpl::failed, this, [this]() {
0167         emitError(i18n("Folder Attributes cannot be exported."));
0168         Q_EMIT exportAttributeDone();
0169     });
0170     job->start();
0171 }
0172 
0173 #include "moc_exportmailjobinterfaceimpl.cpp"