File indexing completed on 2024-05-12 05:20:13

0001 /*
0002    SPDX-FileCopyrightText: 2019-2024 Laurent Montel <montel@kde.org>
0003 
0004    SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "refreshsettingscleanuppage.h"
0008 #include <KLocalizedString>
0009 #include <KSharedConfig>
0010 #include <QHBoxLayout>
0011 #include <QPushButton>
0012 #include <QRegularExpression>
0013 
0014 RefreshSettingsCleanupPage::RefreshSettingsCleanupPage(QWidget *parent)
0015     : QWidget(parent)
0016 {
0017     auto mainLayout = new QHBoxLayout(this);
0018     mainLayout->setObjectName(QLatin1StringView("mainLayout"));
0019     mainLayout->setContentsMargins({});
0020     auto button = new QPushButton(i18n("Clean"), this);
0021     button->setObjectName(QLatin1StringView("button"));
0022     mainLayout->addWidget(button);
0023     connect(button, &QPushButton::clicked, this, &RefreshSettingsCleanupPage::cleanSettings);
0024 }
0025 
0026 RefreshSettingsCleanupPage::~RefreshSettingsCleanupPage() = default;
0027 
0028 void RefreshSettingsCleanupPage::cleanSettings()
0029 {
0030     const QStringList configNameFiles{QStringLiteral("kmail2rc"), QStringLiteral("kontactrc")};
0031     for (const QString &configName : configNameFiles) {
0032         initCleanupFolderSettings(configName);
0033         initCleanupFiltersSettings(configName);
0034         initCleanDialogSettings(configName);
0035         initCleanupDialogSettings(configName);
0036         removeTipOfDay(configName);
0037     }
0038     Q_EMIT cleanUpDone();
0039 }
0040 
0041 void RefreshSettingsCleanupPage::removeTipOfDay(const QString &configName)
0042 {
0043     KSharedConfigPtr settingsrc = KSharedConfig::openConfig(configName);
0044 
0045     const QString tipOfDayStr = QStringLiteral("TipOfDay");
0046     if (settingsrc->hasGroup(tipOfDayStr)) {
0047         settingsrc->deleteGroup(tipOfDayStr);
0048     }
0049     settingsrc->sync();
0050     Q_EMIT cleanDoneInfo(i18n("Remove obsolete \"TipOfDay\" settings: Done"));
0051 }
0052 
0053 void RefreshSettingsCleanupPage::initCleanDialogSettings(const QString &configName)
0054 {
0055     KSharedConfigPtr settingsrc = KSharedConfig::openConfig(configName);
0056 
0057     const QStringList dialogList = settingsrc->groupList().filter(QRegularExpression(QStringLiteral(".*Dialog$")));
0058     for (const QString &str : dialogList) {
0059         settingsrc->deleteGroup(str);
0060     }
0061     settingsrc->sync();
0062     Q_EMIT cleanDoneInfo(i18n("Delete Dialog settings in file `%1`: Done", configName));
0063 }
0064 
0065 void RefreshSettingsCleanupPage::initCleanupFiltersSettings(const QString &configName)
0066 {
0067     KSharedConfigPtr settingsrc = KSharedConfig::openConfig(configName);
0068 
0069     const QStringList filterList = settingsrc->groupList().filter(QRegularExpression(QStringLiteral("Filter #\\d+")));
0070     for (const QString &str : filterList) {
0071         settingsrc->deleteGroup(str);
0072     }
0073     settingsrc->sync();
0074     Q_EMIT cleanDoneInfo(i18n("Delete Filters settings in file `%1`: Done", configName));
0075 }
0076 
0077 void RefreshSettingsCleanupPage::initCleanupFolderSettings(const QString &configName)
0078 {
0079     KSharedConfigPtr settingsrc = KSharedConfig::openConfig(configName);
0080 
0081     const QStringList folderList = settingsrc->groupList().filter(QRegularExpression(QStringLiteral("Folder-\\d+")));
0082     for (const QString &str : folderList) {
0083         KConfigGroup oldGroup = settingsrc->group(str);
0084         cleanupFolderSettings(oldGroup);
0085         if (oldGroup.keyList().isEmpty()) {
0086             oldGroup.deleteGroup();
0087         }
0088     }
0089     settingsrc->sync();
0090     Q_EMIT cleanDoneInfo(i18n("Clean Folder Settings in setting file `%1`: Done", configName));
0091 }
0092 
0093 void RefreshSettingsCleanupPage::cleanupFolderSettings(KConfigGroup &oldGroup)
0094 {
0095     const bool mailingListEnabled = oldGroup.readEntry("MailingListEnabled", false);
0096     if (!mailingListEnabled) {
0097         oldGroup.deleteEntry("MailingListEnabled");
0098     }
0099     const int mailingListFeatures = oldGroup.readEntry("MailingListFeatures", 0);
0100     if (mailingListFeatures == 0) {
0101         oldGroup.deleteEntry("MailingListFeatures");
0102     }
0103     const int mailingListHandler = oldGroup.readEntry("MailingListHandler", 0);
0104     if (mailingListHandler == 0) {
0105         oldGroup.deleteEntry("MailingListHandler");
0106     }
0107     const QString mailingListId = oldGroup.readEntry("MailingListId");
0108     if (mailingListId.isEmpty()) {
0109         oldGroup.deleteEntry("MailingListId");
0110     }
0111 
0112     const bool putRepliesInSameFolder = oldGroup.readEntry("PutRepliesInSameFolder", false);
0113     if (!putRepliesInSameFolder) {
0114         oldGroup.deleteEntry("PutRepliesInSameFolder");
0115     }
0116 
0117     const bool folderHtmlLoadExtPreference = oldGroup.readEntry("htmlLoadExternalOverride", false);
0118     if (!folderHtmlLoadExtPreference) {
0119         oldGroup.deleteEntry("htmlLoadExternalOverride");
0120     }
0121     const bool useDefaultIdentity = oldGroup.readEntry("UseDefaultIdentity", false);
0122     if (useDefaultIdentity) {
0123         oldGroup.deleteEntry("UseDefaultIdentity");
0124     }
0125 }
0126 
0127 void RefreshSettingsCleanupPage::initCleanupDialogSettings(const QString &configName)
0128 {
0129     KSharedConfigPtr settingsrc = KSharedConfig::openConfig(configName);
0130 
0131     const QStringList dialogListName{QStringLiteral("AddHostDialog"),
0132                                      QStringLiteral("AuditLogViewer"),
0133                                      QStringLiteral("CollectionPropertiesDialog"),
0134                                      QStringLiteral("MailSourceWebEngineViewer"),
0135                                      QStringLiteral("SelectAddressBookDialog"),
0136                                      QStringLiteral("VCardViewer"),
0137                                      QStringLiteral("MailSourceWebEngineViewer"),
0138                                      QStringLiteral("ConfigurePluginsWidget"),
0139                                      QStringLiteral("ConfigureAgentsWidget"),
0140                                      QStringLiteral("AuditLogViewer")};
0141     for (const QString &str : dialogListName) {
0142         KConfigGroup oldGroup = settingsrc->group(str);
0143         cleanupFolderSettings(oldGroup);
0144     }
0145     settingsrc->sync();
0146     Q_EMIT cleanDoneInfo(i18n("Clean Dialog Size in setting file `%1`: Done", configName));
0147 }
0148 
0149 #include "moc_refreshsettingscleanuppage.cpp"