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"