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

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 "importmailfolderattributejob.h"
0008 #include "importmailjobinterface.h"
0009 #include "pimdataexportcore_debug.h"
0010 #include "utils.h"
0011 
0012 #include <KArchive>
0013 #include <KArchiveDirectory>
0014 #include <KArchiveFile>
0015 #include <KConfigGroup>
0016 
0017 ImportMailFolderAttributeJob::ImportMailFolderAttributeJob(QObject *parent)
0018     : QObject{parent}
0019 {
0020 }
0021 
0022 ImportMailFolderAttributeJob::~ImportMailFolderAttributeJob()
0023 {
0024 }
0025 
0026 bool ImportMailFolderAttributeJob::canStart() const
0027 {
0028     return (mArchiveDirectory != nullptr) && !mExtractPath.isEmpty();
0029 }
0030 
0031 void ImportMailFolderAttributeJob::setArchiveDirectory(const KArchiveDirectory *zip)
0032 {
0033     mArchiveDirectory = zip;
0034 }
0035 
0036 void ImportMailFolderAttributeJob::setExportInterface(ImportMailJobInterface *interface)
0037 {
0038     mInterface = interface;
0039 }
0040 
0041 void ImportMailFolderAttributeJob::setExtractPath(const QString &extractPath)
0042 {
0043     mExtractPath = extractPath;
0044 }
0045 
0046 void ImportMailFolderAttributeJob::start()
0047 {
0048     if (!canStart()) {
0049         Q_EMIT failed();
0050         qCWarning(PIMDATAEXPORTERCORE_LOG) << " Impossible to start job";
0051         deleteLater();
0052         return;
0053     }
0054     const KArchiveEntry *mailFolderAttributeFile = mArchiveDirectory->entry(Utils::configsPath() + QStringLiteral("mailfolderattributes"));
0055     QMap<Akonadi::Collection::Id, ImportExportMailUtil::AttributeInfo> mapAttributeInfo;
0056     if (mailFolderAttributeFile && mailFolderAttributeFile->isFile()) {
0057         const auto file = static_cast<const KArchiveFile *>(mailFolderAttributeFile);
0058         const QString destDirectory = mExtractPath + QLatin1Char('/') + Utils::resourcesPath();
0059         // qDebug() << " destDirectory " << destDirectory;
0060         mInterface->copyArchiveFileTo(file, destDirectory);
0061         const QString filename(file->name());
0062         const QString mailFolderAttributesFileName = destDirectory + QLatin1Char('/') + filename;
0063         KConfig conf(mailFolderAttributesFileName, KConfig::SimpleConfig);
0064 
0065         const QStringList groupList = conf.groupList();
0066         for (const QString &groupStr : groupList) {
0067             ImportExportMailUtil::AttributeInfo info;
0068             KConfigGroup group = conf.group(groupStr);
0069             // qDebug() << "groupStr  " << groupStr;
0070             const Akonadi::Collection::Id id = mInterface->convertPathToId(groupStr);
0071             const QString displayStr(QStringLiteral("Display"));
0072             if (group.hasKey(displayStr)) {
0073                 info.displayAttribute = group.readEntry(displayStr, QByteArray());
0074             }
0075             const QString expireStr(QStringLiteral("Expire"));
0076             if (group.hasKey(expireStr)) {
0077                 info.expireAttribute = group.readEntry(expireStr, QByteArray());
0078             }
0079             const QString favoriteStr(QStringLiteral("Favorite"));
0080             if (group.hasKey(favoriteStr)) {
0081                 info.favoriteAttribute = group.readEntry(favoriteStr, QByteArray());
0082             }
0083             const QString folderStr(QStringLiteral("Folder"));
0084             if (group.hasKey(folderStr)) {
0085                 info.folderAttribute = group.readEntry(folderStr, QByteArray());
0086             }
0087             // qDebug() << " identifier " << id << " info.expireAttribute " << info.expireAttribute << " info.displayAttribute " << info.displayAttribute;
0088             mapAttributeInfo.insert(id, info);
0089         }
0090     }
0091     applyAttributes(mapAttributeInfo);
0092 }
0093 
0094 void ImportMailFolderAttributeJob::restoreFileFolderAttribute()
0095 {
0096     Q_EMIT successed();
0097     deleteLater();
0098 }
0099 
0100 #include "moc_importmailfolderattributejob.cpp"