File indexing completed on 2024-05-26 05:27:08
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 "importmailjobinterfaceimpl.h" 0008 #include "archivestorage.h" 0009 #include "resourceconverterimpl.h" 0010 #include "smtpmailtransport.h" 0011 #include <Akonadi/CollectionFetchJob> 0012 #include <KIdentityManagementCore/Identity> 0013 #include <KIdentityManagementCore/IdentityManager> 0014 #include <MailCommon/FilterImporterExporter> 0015 #include <MailCommon/FilterManager> 0016 #include <PimCommonAkonadi/CreateResource> 0017 using namespace Akonadi; 0018 0019 ImportMailJobInterfaceImpl::ImportMailJobInterfaceImpl(QObject *parent, Utils::StoredTypes typeSelected, ArchiveStorage *archiveStorage, int numberOfStep) 0020 : ImportMailJobInterface(parent, typeSelected, archiveStorage, numberOfStep) 0021 , mIdentityManager(KIdentityManagementCore::IdentityManager::self()) 0022 { 0023 } 0024 0025 ImportMailJobInterfaceImpl::~ImportMailJobInterfaceImpl() = default; 0026 0027 QString ImportMailJobInterfaceImpl::configLocation() const 0028 { 0029 return QStandardPaths::writableLocation(QStandardPaths::ConfigLocation) + QLatin1Char('/'); 0030 } 0031 0032 void ImportMailJobInterfaceImpl::importFolderAttributes() 0033 { 0034 #if 0 0035 emitInfo(i18n("Restoring folder attributes...")); 0036 auto job = new ImportMailFolderAttributeJobImpl(this); 0037 job->setArchiveDirectory(mArchiveDirectory); 0038 job->setExportInterface(this); 0039 job->setExtractPath(mTempDirName); 0040 connect(job, &ImportMailFolderAttributeJobImpl::successed, this, [this]() { 0041 emitInfo(i18n("Restoring Folder Attributes done.")); 0042 Q_EMIT jobFinished(); 0043 }); 0044 connect(job, &ImportMailFolderAttributeJobImpl::failed, this, [this]() { 0045 emitError(i18n("Folder Attributes cannot be restored.")); 0046 Q_EMIT jobFinished(); 0047 }); 0048 job->start(); 0049 #else 0050 Q_EMIT jobFinished(); 0051 #endif 0052 } 0053 0054 QString ImportMailJobInterfaceImpl::adaptResourcePath(const KSharedConfigPtr &resourceConfig, const QString &storedData) 0055 { 0056 ResourceConverterImpl converter; 0057 return converter.adaptResourcePath(resourceConfig, storedData); 0058 } 0059 0060 void ImportMailJobInterfaceImpl::registerSpecialCollection(Akonadi::SpecialMailCollections::Type type, qint64 colId) 0061 { 0062 auto fetch = new Akonadi::CollectionFetchJob(Akonadi::Collection(colId), Akonadi::CollectionFetchJob::Base, this); 0063 connect(fetch, &Akonadi::CollectionFetchJob::collectionsReceived, this, [type](const Akonadi::Collection::List &cols) { 0064 if (cols.count() != 1) { 0065 return; 0066 } 0067 Akonadi::SpecialMailCollections::self()->registerCollection(type, cols.first()); 0068 }); 0069 } 0070 0071 QString ImportMailJobInterfaceImpl::createResource(const QString &resources, const QString &name, const QMap<QString, QVariant> &settings, bool synchronizeTree) 0072 { 0073 return mCreateResource->createResource(resources, name, settings, synchronizeTree); 0074 } 0075 0076 void ImportMailJobInterfaceImpl::synchronizeResource(const QStringList &lst) 0077 { 0078 // It's maildir support. Need to add support 0079 startSynchronizeResources(lst); 0080 } 0081 0082 void ImportMailJobInterfaceImpl::importFilters(const QString &filename) 0083 { 0084 bool canceled = false; 0085 MailCommon::FilterImporterExporter exportFilters; 0086 const QList<MailCommon::MailFilter *> lstFilter = exportFilters.importFilters(canceled, MailCommon::FilterImporterExporter::KMailFilter, filename); 0087 if (!canceled) { 0088 MailCommon::FilterManager::instance()->appendFilters(lstFilter); 0089 } 0090 } 0091 0092 Collection::Id ImportMailJobInterfaceImpl::convertFolderPathToCollectionId(const QString &path) 0093 { 0094 ResourceConverterImpl converter; 0095 return converter.convertFolderPathToCollectionId(path); 0096 } 0097 0098 QString ImportMailJobInterfaceImpl::adaptNewResourceUrl(bool overwriteResources, const KSharedConfig::Ptr &resourceConfig, const QString &storePath) 0099 { 0100 ResourceConverterImpl converter; 0101 return converter.adaptNewResourceUrl(overwriteResources, resourceConfig, storePath); 0102 } 0103 0104 void ImportMailJobInterfaceImpl::addNewIdentity(const QString &name, KConfigGroup &group, int defaultIdentity, int oldUid) 0105 { 0106 const QString uniqueName = uniqueIdentityName(name); 0107 KIdentityManagementCore::Identity *identity = &mIdentityManager->newFromScratch(uniqueName); 0108 group.writeEntry(QStringLiteral("Identity"), uniqueName); 0109 group.sync(); 0110 0111 identity->readConfig(group); 0112 0113 if (oldUid != -1) { 0114 mHashIdentity.insert(oldUid, identity->uoid()); 0115 if (oldUid == defaultIdentity) { 0116 mIdentityManager->setAsDefault(identity->uoid()); 0117 } 0118 } 0119 mIdentityManager->commit(); 0120 } 0121 0122 QString ImportMailJobInterfaceImpl::uniqueIdentityName(const QString &name) 0123 { 0124 QString newName(name); 0125 int i = 1; 0126 while (!mIdentityManager->isUnique(newName)) { 0127 newName = QStringLiteral("%1_%2").arg(name).arg(i); 0128 ++i; 0129 } 0130 return newName; 0131 } 0132 0133 void ImportMailJobInterfaceImpl::importCustomMailTransport(const QString &identifierValue, const KConfigGroup &group, int defaultTransport, int transportId) 0134 { 0135 if (!identifierValue.isEmpty()) { 0136 if (identifierValue == QLatin1StringView("sendmail") || identifierValue == QLatin1StringView("akonadi_ewsmta_resource")) { 0137 MailTransport::Transport *mt = MailTransport::TransportManager::self()->createTransport(); 0138 mt->setName(group.readEntry(QStringLiteral("name"))); 0139 const QString hostStr(QStringLiteral("host")); 0140 if (group.hasKey(hostStr)) { 0141 mt->setHost(group.readEntry(hostStr)); 0142 } 0143 mt->setIdentifier(identifierValue); 0144 addMailTransport(mt, defaultTransport, transportId); 0145 } else { 0146 qCWarning(PIMDATAEXPORTERCORE_LOG) << "Unknown identifier type " << identifierValue; 0147 } 0148 } else { 0149 qCWarning(PIMDATAEXPORTERCORE_LOG) << "identifier value is empty"; 0150 } 0151 } 0152 0153 int ImportMailJobInterfaceImpl::convertEncryptionEnum(int val) 0154 { 0155 switch (val) { 0156 case 0: 0157 return MailTransport::Transport::EnumEncryption::None; 0158 case 1: 0159 return MailTransport::Transport::EnumEncryption::TLS; 0160 case 2: 0161 return MailTransport::Transport::EnumEncryption::SSL; 0162 } 0163 return MailTransport::Transport::EnumEncryption::None; 0164 } 0165 0166 void ImportMailJobInterfaceImpl::importSmtpMailTransport(const SmtpMailTransport &smtpMailTransport, int defaultTransport, int transportId) 0167 { 0168 MailTransport::Transport *mt = MailTransport::TransportManager::self()->createTransport(); 0169 mt->setName(smtpMailTransport.name()); 0170 mt->setHost(smtpMailTransport.host()); 0171 mt->setPort(smtpMailTransport.port()); 0172 mt->setUserName(smtpMailTransport.userName()); 0173 mt->setPrecommand(smtpMailTransport.precommand()); 0174 mt->setRequiresAuthentication(smtpMailTransport.requiresAuthentication()); 0175 mt->setSpecifyHostname(smtpMailTransport.specifyHostname()); 0176 mt->setLocalHostname(smtpMailTransport.localHostname()); 0177 mt->setSpecifySenderOverwriteAddress(smtpMailTransport.specifySenderOverwriteAddress()); 0178 mt->setStorePassword(smtpMailTransport.storePassword()); 0179 mt->setSenderOverwriteAddress(smtpMailTransport.senderOverwriteAddress()); 0180 mt->setEncryption(convertEncryptionEnum(smtpMailTransport.encryption())); 0181 mt->setAuthenticationType(smtpMailTransport.authenticationType()); 0182 addMailTransport(mt, defaultTransport, transportId); 0183 } 0184 0185 void ImportMailJobInterfaceImpl::addMailTransport(MailTransport::Transport *mt, int defaultTransport, int transportId) 0186 { 0187 mt->forceUniqueName(); 0188 mt->save(); 0189 MailTransport::TransportManager::self()->addTransport(mt); 0190 if (transportId == defaultTransport) { 0191 MailTransport::TransportManager::self()->setDefaultTransport(mt->id()); 0192 } 0193 mHashTransport.insert(transportId, mt->id()); 0194 // qDebug() << " void ImportMailJobInterface::addMailTransport(MailTransport::Transport *mt, int defaultTransport, int transportId)" << transportId; 0195 } 0196 0197 #include "moc_importmailjobinterfaceimpl.cpp"