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 ¤tKey, const QString &prefixCollection) 0044 { 0045 ResourceConverterImpl converter; 0046 converter.convertCollectionIdsToRealPath(group, currentKey, prefixCollection); 0047 } 0048 0049 void ExportMailJobInterfaceImpl::convertCollectionToRealPath(KConfigGroup &group, const QString ¤tKey) 0050 { 0051 ResourceConverterImpl converter; 0052 converter.convertCollectionToRealPath(group, currentKey); 0053 } 0054 0055 void ExportMailJobInterfaceImpl::convertCollectionListToRealPath(KConfigGroup &group, const QString ¤tKey) 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"