Warning, file /pim/pim-data-exporter/core/alarm/exportalarmjobinterface.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

0001 /*
0002    SPDX-FileCopyrightText: 2012-2024 Laurent Montel <montel@kde.org>
0003 
0004    SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "exportalarmjobinterface.h"
0008 
0009 #include <KLocalizedString>
0010 
0011 #include <KConfigGroup>
0012 #include <QTemporaryFile>
0013 #include <QTimer>
0014 
0015 #include <QFile>
0016 #include <QFileInfo>
0017 #include <QStandardPaths>
0018 
0019 ExportAlarmJobInterface::ExportAlarmJobInterface(QObject *parent, Utils::StoredTypes typeSelected, ArchiveStorage *archiveStorage, int numberOfStep)
0020     : AbstractImportExportJob(parent, archiveStorage, typeSelected, numberOfStep)
0021 {
0022 }
0023 
0024 ExportAlarmJobInterface::~ExportAlarmJobInterface() = default;
0025 
0026 void ExportAlarmJobInterface::start()
0027 {
0028     Q_EMIT title(i18n("Start export KAlarm settings..."));
0029     createProgressDialog(i18n("Export KAlarm settings"));
0030     if (mTypeSelected & Utils::Resources) {
0031         QTimer::singleShot(0, this, &ExportAlarmJobInterface::slotCheckBackupResource);
0032     } else if (mTypeSelected & Utils::Config) {
0033         QTimer::singleShot(0, this, &ExportAlarmJobInterface::slotCheckBackupConfig);
0034     } else {
0035         Q_EMIT jobFinished();
0036     }
0037 }
0038 
0039 void ExportAlarmJobInterface::slotAlarmJobTerminated()
0040 {
0041     if (wasCanceled()) {
0042         Q_EMIT jobFinished();
0043         return;
0044     }
0045     mIndexIdentifier++;
0046     QTimer::singleShot(0, this, &ExportAlarmJobInterface::slotWriteNextArchiveResource);
0047 }
0048 
0049 void ExportAlarmJobInterface::slotWriteNextArchiveResource()
0050 {
0051     if (mIndexIdentifier < mAkonadiInstanceInfo.count()) {
0052         const Utils::AkonadiInstanceInfo agent = mAkonadiInstanceInfo.at(mIndexIdentifier);
0053         const QString identifier = agent.identifier;
0054         if (identifier.contains(QLatin1StringView("akonadi_kalarm_dir_resource_"))) {
0055             const QString archivePath = Utils::alarmPath() + identifier + QLatin1Char('/');
0056 
0057             const QString url = resourcePath(identifier);
0058             if (!mAgentPaths.contains(url)) {
0059                 if (!url.isEmpty()) {
0060                     mAgentPaths << url;
0061                     exportResourceToArchive(archivePath, url, identifier);
0062                 } else {
0063                     qCDebug(PIMDATAEXPORTERCORE_LOG) << "Url is empty for " << identifier;
0064                     QTimer::singleShot(0, this, &ExportAlarmJobInterface::slotAlarmJobTerminated);
0065                 }
0066             } else {
0067                 QTimer::singleShot(0, this, &ExportAlarmJobInterface::slotAlarmJobTerminated);
0068             }
0069         } else if (identifier.contains(QLatin1StringView("akonadi_kalarm_resource_"))) {
0070             backupAlarmResourceFile(identifier, Utils::alarmPath());
0071             QTimer::singleShot(0, this, &ExportAlarmJobInterface::slotAlarmJobTerminated);
0072         } else {
0073             QTimer::singleShot(0, this, &ExportAlarmJobInterface::slotAlarmJobTerminated);
0074         }
0075     } else {
0076         emitInfo(i18n("Resources backup done."));
0077         QTimer::singleShot(0, this, &ExportAlarmJobInterface::slotCheckBackupConfig);
0078     }
0079 }
0080 
0081 void ExportAlarmJobInterface::slotCheckBackupResource()
0082 {
0083     mAkonadiInstanceInfo = listOfResource();
0084     setProgressDialogLabel(i18n("Backing up resources..."));
0085     increaseProgressDialog();
0086     QTimer::singleShot(0, this, &ExportAlarmJobInterface::slotWriteNextArchiveResource);
0087 }
0088 
0089 void ExportAlarmJobInterface::slotCheckBackupConfig()
0090 {
0091     if (mTypeSelected & Utils::Config) {
0092         backupConfig();
0093         increaseProgressDialog();
0094         if (wasCanceled()) {
0095             Q_EMIT jobFinished();
0096             return;
0097         }
0098     }
0099     Q_EMIT jobFinished();
0100 }
0101 
0102 QString ExportAlarmJobInterface::applicationName() const
0103 {
0104     return QStringLiteral("[Alarm]");
0105 }
0106 
0107 void ExportAlarmJobInterface::backupConfig()
0108 {
0109     setProgressDialogLabel(i18n("Backing up config..."));
0110 
0111     const QString kalarmStr(QStringLiteral("kalarmrc"));
0112     const QString kalarmrc = QStandardPaths::writableLocation(QStandardPaths::ConfigLocation) + QLatin1Char('/') + kalarmStr;
0113     if (QFileInfo::exists(kalarmrc)) {
0114         KSharedConfigPtr kalarm = KSharedConfig::openConfig(kalarmrc);
0115 
0116         QTemporaryFile tmp;
0117         tmp.open();
0118 
0119         KConfig *kalarmConfig = kalarm->copyTo(tmp.fileName());
0120 
0121         const QString collectionsStr(QStringLiteral("Collections"));
0122         if (kalarmConfig->hasGroup(collectionsStr)) {
0123             KConfigGroup group = kalarmConfig->group(collectionsStr);
0124             const QString selectionKey(QStringLiteral("FavoriteCollectionIds"));
0125             convertCollectionIdsToRealPath(group, selectionKey);
0126         }
0127 
0128         kalarmConfig->sync();
0129         backupFile(tmp.fileName(), Utils::configsPath(), kalarmStr);
0130         delete kalarmConfig;
0131     }
0132 
0133     backupUiRcFile(QStringLiteral("kalarmui.rc"), QStringLiteral("kalarm"));
0134 
0135     emitInfo(i18n("Config backup done."));
0136 }
0137 
0138 #include "moc_exportalarmjobinterface.cpp"