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"