File indexing completed on 2024-05-12 05:25:33
0001 /* 0002 SPDX-FileCopyrightText: 2012-2024 Laurent Montel <montel@kde.org> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #pragma once 0008 0009 #include "pimdataexporter_export.h" 0010 #include "utils.h" 0011 #include <Akonadi/Collection> 0012 #include <QObject> 0013 #include <QStringList> 0014 0015 class ArchiveStorage; 0016 class KArchiveDirectory; 0017 class QTemporaryDir; 0018 class KZip; 0019 class KArchiveFile; 0020 class KArchiveEntry; 0021 0022 namespace PimCommon 0023 { 0024 class CreateResource; 0025 } 0026 class ImportExportProgressIndicatorBase; 0027 class PIMDATAEXPORTER_EXPORT AbstractImportExportJob : public QObject 0028 { 0029 Q_OBJECT 0030 public: 0031 friend class ImportMailFolderAttributeJob; 0032 explicit AbstractImportExportJob(QObject *parent, ArchiveStorage *archiveStorage, Utils::StoredTypes typeSelected, int numberOfStep); 0033 ~AbstractImportExportJob() override; 0034 0035 virtual void start() = 0; 0036 0037 [[nodiscard]] bool wasCanceled() const; 0038 0039 static int archiveVersion(); 0040 static void setArchiveVersion(int version); 0041 0042 void setImportExportProgressIndicator(ImportExportProgressIndicatorBase *importExportProgressIndicator); 0043 0044 ImportExportProgressIndicatorBase *importExportProgressIndicator() const; 0045 0046 // Only for test 0047 void setTempDirName(const QString &tempDirName); 0048 0049 Q_SIGNALS: 0050 void info(const QString &); 0051 void error(const QString &); 0052 void title(const QString &); 0053 void endLine(); 0054 void needSynchronizeResource(const QString &name, const QString &identifier); 0055 void jobFinished(); 0056 void exportAttributeDone(); 0057 0058 protected: 0059 virtual void slotNextStep(); 0060 0061 protected: 0062 void emitInfo(const QString &str); 0063 void emitError(const QString &str); 0064 virtual QString applicationName() const = 0; 0065 [[nodiscard]] QString generateInfo(const QString &info); 0066 void initializeListStep(); 0067 virtual void startSynchronizeResources(const QStringList &listResourceToSync); 0068 void infoAboutNewResource(const QString &resourceName); 0069 void copyToDirectory(const KArchiveEntry *entry, const QString &dest); 0070 void extractZipFile(const KArchiveFile *file, const QString &source, const QString &destination, bool isStoredAsZippedArchive = true); 0071 0072 qint64 convertRealPathToCollection(KConfigGroup &group, const QString ¤tKey, bool addCollectionPrefix = false); 0073 void copyToFile(const KArchiveFile *archivefile, const QString &dest, const QString &filename, const QString &prefix); 0074 void initializeImportJob(); 0075 void backupFile(const QString &filename, const QString &path, const QString &storedName); 0076 void backupConfigFile(const QString &configFileName); 0077 void backupUiRcFile(const QString &configFileName, const QString &applicationName); 0078 void restoreUiRcFile(const QString &configNameStr, const QString &applicationName); 0079 0080 [[nodiscard]] int mergeConfigMessageBox(const QString &configName) const; 0081 [[nodiscard]] bool overwriteConfigMessageBox(const QString &configName) const; 0082 0083 void backupResourceFile(const QString &agentIdentifier, const QString &defaultPath); 0084 0085 [[nodiscard]] QStringList 0086 restoreResourceFile(const QString &resourceName, const QString &defaultPath, const QString &storePath, bool overwriteResources = false); 0087 virtual void addSpecificResourceSettings(const KSharedConfig::Ptr &resourceConfig, const QString &resourceName, QMap<QString, QVariant> &settings); 0088 void restoreConfigFile(const QString &configNameStr); 0089 [[nodiscard]] bool overwriteDirectoryMessageBox(const QString &directory) const; 0090 void overwriteDirectory(const QString &path, const KArchiveEntry *entry); 0091 virtual bool isAConfigFile(const QString &name) const; 0092 void searchAllFiles(const KArchiveDirectory *dir, const QString &prefix, const QString &searchEntryName); 0093 void storeArchiveInfoResources(const KArchiveDirectory *dir, const QString &prefix); 0094 0095 bool copyArchiveFileTo(const KArchiveFile *file, const QString &destination); 0096 [[nodiscard]] Akonadi::Collection::Id convertPathToId(const QString &path); 0097 0098 [[nodiscard]] KZip *archive() const; 0099 0100 void increaseProgressDialog(); 0101 void createProgressDialog(const QString &title = QString()); 0102 0103 void setProgressDialogLabel(const QString &text); 0104 void storeDirectory(const QString &subDirectory); 0105 void importDataSubdirectory(const QString &subdirectoryRelativePath); 0106 0107 void convertCollectionListStrToAkonadiId(const KSharedConfig::Ptr &config, const QString &groupName, const QString &key, bool addCollectionPrefix); 0108 void convertRealPathToCollectionList(KConfigGroup &group, const QString ¤tKey, bool addCollectionPrefix = true); 0109 [[nodiscard]] virtual Akonadi::Collection::Id convertFolderPathToCollectionId(const QString &path) = 0; 0110 virtual QString adaptNewResourceUrl(bool overwriteResources, const KSharedConfig::Ptr &resourceConfig, const QString &storePath) = 0; 0111 [[nodiscard]] virtual QString 0112 createResource(const QString &resources, const QString &name, const QMap<QString, QVariant> &settings, bool synchronizeTree) = 0; 0113 0114 QHash<QString, Akonadi::Collection::Id> mHashConvertPathCollectionId; 0115 QList<ResourceFiles> mListResourceFile; 0116 0117 QString mTempDirName; 0118 const Utils::StoredTypes mTypeSelected; 0119 ArchiveStorage *const mArchiveStorage; 0120 QTemporaryDir *mTempDir = nullptr; 0121 const KArchiveDirectory *mArchiveDirectory = nullptr; 0122 const int mNumberOfStep = -1; 0123 PimCommon::CreateResource *mCreateResource = nullptr; 0124 QStringList mAgentPaths; 0125 QList<Utils::StoredType> mListStep; 0126 QList<Utils::AkonadiInstanceInfo> mAkonadiInstanceInfo; 0127 int mIndex = -1; 0128 static int sArchiveVersion; 0129 0130 private: 0131 void slotAllResourceSynchronized(); 0132 void slotSynchronizeInstanceDone(const QString &, const QString &identifier); 0133 void slotSynchronizeInstanceFailed(const QString &instance); 0134 void slotTaskCanceled(); 0135 0136 ImportExportProgressIndicatorBase *mImportExportProgressIndicator = nullptr; 0137 };