File indexing completed on 2024-05-12 05:25:24

0001 /*
0002    SPDX-FileCopyrightText: 2015-2024 Laurent Montel <montel@kde.org>
0003 
0004    SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "pimdataexporterconsole.h"
0008 #include "loginfile.h"
0009 #include "loginfo.h"
0010 #include "pimdatabackuprestore.h"
0011 #include "pimdataexportconsole_debug.h"
0012 #include "xml/templateselection.h"
0013 
0014 #include "pimdataexporterkernel.h"
0015 #include <MailCommon/FilterManager>
0016 #include <MailCommon/MailKernel>
0017 #include <QTimer>
0018 
0019 PimDataExporterConsole::PimDataExporterConsole(QObject *parent)
0020     : QObject(parent)
0021     , mPimDataBackupRestore(new PimDataBackupRestore(this))
0022     , mLogInfo(new LogInfo(this))
0023 {
0024     // Initialize filtermanager
0025     (void)MailCommon::FilterManager::instance();
0026     auto kernel = new PimDataExporterKernel(this);
0027     CommonKernel->registerKernelIf(kernel); // register KernelIf early, it is used by the Filter classes
0028     CommonKernel->registerSettingsIf(kernel); // SettingsIf is used in FolderTreeWidget
0029 
0030     initializeLogInFile();
0031     // TODO initialize akonadi server
0032 }
0033 
0034 PimDataExporterConsole::~PimDataExporterConsole() = default;
0035 
0036 void PimDataExporterConsole::initializeLogInFile()
0037 {
0038     connect(mPimDataBackupRestore, &PimDataBackupRestore::addEndLine, this, &PimDataExporterConsole::slotAddEndLine);
0039     connect(mPimDataBackupRestore, &PimDataBackupRestore::addError, this, &PimDataExporterConsole::slotAddError);
0040     connect(mPimDataBackupRestore, &PimDataBackupRestore::addInfo, this, &PimDataExporterConsole::slotAddInfo);
0041     connect(mPimDataBackupRestore, &PimDataBackupRestore::addTitle, this, &PimDataExporterConsole::slotAddTitle);
0042     connect(mPimDataBackupRestore, &PimDataBackupRestore::jobFinished, this, &PimDataExporterConsole::slotJobFinished);
0043     connect(mPimDataBackupRestore, &PimDataBackupRestore::backupDone, this, &PimDataExporterConsole::slotBackupDone);
0044     connect(mPimDataBackupRestore, &PimDataBackupRestore::jobFailed, this, &PimDataExporterConsole::slotJobFailed);
0045     connect(mPimDataBackupRestore, &PimDataBackupRestore::restoreDone, this, &PimDataExporterConsole::slotRestoreDone);
0046 }
0047 
0048 void PimDataExporterConsole::closeLogFile()
0049 {
0050     delete mLogInFile;
0051     mLogInFile = nullptr;
0052 }
0053 
0054 void PimDataExporterConsole::slotRestoreDone()
0055 {
0056     qCDebug(PIMDATAEXPORTERCONSOLE_LOG) << "Restore Done";
0057     closeLogFile();
0058     QTimer::singleShot(0, this, &PimDataExporterConsole::finished);
0059 }
0060 
0061 void PimDataExporterConsole::slotJobFailed()
0062 {
0063     qCWarning(PIMDATAEXPORTERCONSOLE_LOG) << "job failed";
0064     closeLogFile();
0065     mPimDataBackupRestore->closeArchive();
0066 }
0067 
0068 void PimDataExporterConsole::slotBackupDone()
0069 {
0070     qCDebug(PIMDATAEXPORTERCONSOLE_LOG) << "Backup Done";
0071     closeLogFile();
0072     QTimer::singleShot(0, this, &PimDataExporterConsole::finished);
0073 }
0074 
0075 void PimDataExporterConsole::slotJobFinished()
0076 {
0077     qCDebug(PIMDATAEXPORTERCONSOLE_LOG) << "job finished";
0078     mPimDataBackupRestore->nextStep();
0079 }
0080 
0081 void PimDataExporterConsole::slotAddEndLine()
0082 {
0083     if (mLogInFile) {
0084         mLogInFile->addEndLine();
0085     }
0086     mLogInfo->addEndLineLogEntry();
0087 }
0088 
0089 void PimDataExporterConsole::slotAddError(const QString &message)
0090 {
0091     if (mLogInFile) {
0092         mLogInFile->addError(message);
0093     }
0094     mLogInfo->addErrorLogEntry(message);
0095 }
0096 
0097 void PimDataExporterConsole::slotAddInfo(const QString &message)
0098 {
0099     if (mLogInFile) {
0100         mLogInFile->addInfo(message);
0101     }
0102     mLogInfo->addInfoLogEntry(message);
0103 }
0104 
0105 void PimDataExporterConsole::slotAddTitle(const QString &message)
0106 {
0107     if (mLogInFile) {
0108         mLogInFile->addTitle(message);
0109     }
0110     mLogInfo->addTitleLogEntry(message);
0111 }
0112 
0113 QString PimDataExporterConsole::importExportFileName() const
0114 {
0115     return mImportExportFileName;
0116 }
0117 
0118 void PimDataExporterConsole::setImportExportFileName(const QString &filename)
0119 {
0120     if (mInProgress) {
0121         qCDebug(PIMDATAEXPORTERCONSOLE_LOG) << "Already in progress. We can't change it.";
0122         return;
0123     }
0124     mImportExportFileName = filename;
0125 }
0126 
0127 void PimDataExporterConsole::start()
0128 {
0129     // Load template if necessary
0130     if (!mTemplateFileName.isEmpty()) {
0131         TemplateSelection selection;
0132         const QMap<Utils::AppsType, Utils::importExportParameters> templateElements = selection.loadTemplate(mTemplateFileName);
0133         mPimDataBackupRestore->setStoredParameters(templateElements);
0134     }
0135     switch (mMode) {
0136     case Import:
0137         if (!mPimDataBackupRestore->restoreStart(mImportExportFileName)) {
0138             qCDebug(PIMDATAEXPORTERCONSOLE_LOG) << "Unable to start restore.";
0139             QTimer::singleShot(0, this, &PimDataExporterConsole::finished);
0140         }
0141         break;
0142     case Export:
0143         if (!mPimDataBackupRestore->backupStart(mImportExportFileName)) {
0144             qCDebug(PIMDATAEXPORTERCONSOLE_LOG) << "Unable to start backup.";
0145             QTimer::singleShot(0, this, &PimDataExporterConsole::finished);
0146         }
0147         break;
0148     }
0149 }
0150 
0151 PimDataExporterConsole::Mode PimDataExporterConsole::mode() const
0152 {
0153     return mMode;
0154 }
0155 
0156 void PimDataExporterConsole::setMode(Mode mode)
0157 {
0158     if (mInProgress) {
0159         qCDebug(PIMDATAEXPORTERCONSOLE_LOG) << "Already in progress. We can't change it.";
0160         return;
0161     }
0162     mMode = mode;
0163 }
0164 
0165 void PimDataExporterConsole::setLogFileName(const QString &logFileName)
0166 {
0167     if (mInProgress) {
0168         qCDebug(PIMDATAEXPORTERCONSOLE_LOG) << "Already in progress. We can't change it.";
0169         return;
0170     }
0171     if (!mLogInFile) {
0172         mLogInFile = new LogInFile(this);
0173     }
0174     mLogInFile->setFileName(logFileName);
0175 }
0176 
0177 void PimDataExporterConsole::setTemplateFileName(const QString &templateFileName)
0178 {
0179     if (mInProgress) {
0180         qCDebug(PIMDATAEXPORTERCONSOLE_LOG) << "Already in progress. We can't change it.";
0181         return;
0182     }
0183     mTemplateFileName = templateFileName;
0184 }
0185 
0186 #include "moc_pimdataexporterconsole.cpp"