File indexing completed on 2025-03-09 04:54:30

0001 /*
0002    SPDX-FileCopyrightText: 2019-2024 Laurent Montel <montel@kde.org>
0003 
0004    SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "dkimmanagerulesdialog.h"
0008 #include "dkimmanagerrules.h"
0009 #include "dkimmanageruleswidget.h"
0010 
0011 #include <KConfigGroup>
0012 #include <KLocalizedString>
0013 #include <KMessageBox>
0014 #include <KSharedConfig>
0015 #include <QDialogButtonBox>
0016 #include <QFileDialog>
0017 #include <QPushButton>
0018 #include <QVBoxLayout>
0019 
0020 namespace
0021 {
0022 static const char myDKIMManageRulesDialogGroupName[] = "DKIMManageRulesDialog";
0023 }
0024 using namespace MessageViewer;
0025 
0026 DKIMManageRulesDialog::DKIMManageRulesDialog(QWidget *parent)
0027     : QDialog(parent)
0028     , mRulesWidget(new DKIMManageRulesWidget(this))
0029     , mExportButton(new QPushButton(i18n("Export..."), this))
0030 {
0031     setWindowTitle(i18nc("@title:window", "Configure Rule"));
0032     auto mainLayout = new QVBoxLayout(this);
0033     mainLayout->setObjectName(QLatin1StringView("mainlayout"));
0034 
0035     mRulesWidget->setObjectName(QLatin1StringView("mRulesWidget"));
0036     mainLayout->addWidget(mRulesWidget);
0037 
0038     auto buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, this);
0039     buttonBox->setObjectName(QLatin1StringView("buttonBox"));
0040     mainLayout->addWidget(buttonBox);
0041 
0042     auto addButton = new QPushButton(i18n("Add Rule..."), this);
0043     addButton->setObjectName(QLatin1StringView("addButton"));
0044     buttonBox->addButton(addButton, QDialogButtonBox::ActionRole);
0045     connect(addButton, &QPushButton::clicked, mRulesWidget, &DKIMManageRulesWidget::addRule);
0046 
0047     auto importButton = new QPushButton(i18n("Import..."), this);
0048     importButton->setObjectName(QLatin1StringView("importButton"));
0049     buttonBox->addButton(importButton, QDialogButtonBox::ActionRole);
0050     connect(importButton, &QPushButton::clicked, this, &DKIMManageRulesDialog::slotImport);
0051 
0052     mExportButton->setObjectName(QLatin1StringView("mExportButton"));
0053     buttonBox->addButton(mExportButton, QDialogButtonBox::ActionRole);
0054     connect(mExportButton, &QPushButton::clicked, this, &DKIMManageRulesDialog::slotExport);
0055 
0056     connect(buttonBox, &QDialogButtonBox::accepted, this, &DKIMManageRulesDialog::slotAccepted);
0057     connect(buttonBox, &QDialogButtonBox::rejected, this, &DKIMManageRulesDialog::reject);
0058     connect(mRulesWidget, &DKIMManageRulesWidget::updateExportButton, mExportButton, &QPushButton::setEnabled);
0059     mExportButton->setEnabled(false);
0060     mRulesWidget->loadSettings();
0061     readConfig();
0062 }
0063 
0064 DKIMManageRulesDialog::~DKIMManageRulesDialog()
0065 {
0066     writeConfig();
0067 }
0068 
0069 void DKIMManageRulesDialog::slotAccepted()
0070 {
0071     mRulesWidget->saveSettings();
0072     accept();
0073 }
0074 
0075 void DKIMManageRulesDialog::slotExport()
0076 {
0077     const auto rules = mRulesWidget->rules();
0078     if (rules.isEmpty()) {
0079         KMessageBox::error(this, i18n("No rules found"), i18nc("@title:window", "Export Rules"));
0080         return;
0081     }
0082     const QString fileName = QFileDialog::getSaveFileName(this, i18n("Export Rules"));
0083     if (!fileName.isEmpty()) {
0084         MessageViewer::DKIMManagerRules::self()->exportRules(fileName, rules);
0085     }
0086 }
0087 
0088 void DKIMManageRulesDialog::slotImport()
0089 {
0090     const QString fileName = QFileDialog::getOpenFileName(this, i18n("Import Rules"));
0091     if (!fileName.isEmpty()) {
0092         if (MessageViewer::DKIMManagerRules::self()->importRules(fileName) == 0) {
0093             KMessageBox::error(this, i18n("No rules imported."), i18nc("@title:window", "Import Rules"));
0094         } else {
0095             mRulesWidget->updateRules();
0096         }
0097     }
0098 }
0099 
0100 void DKIMManageRulesDialog::readConfig()
0101 {
0102     KConfigGroup group(KSharedConfig::openStateConfig(), QLatin1StringView(myDKIMManageRulesDialogGroupName));
0103     const QSize size = group.readEntry("Size", QSize(600, 400));
0104     mRulesWidget->restoreHeaders(group.readEntry("Header", QByteArray()));
0105     if (size.isValid()) {
0106         resize(size);
0107     }
0108 }
0109 
0110 void DKIMManageRulesDialog::writeConfig()
0111 {
0112     KConfigGroup group(KSharedConfig::openStateConfig(), QLatin1StringView(myDKIMManageRulesDialogGroupName));
0113     group.writeEntry("Header", mRulesWidget->saveHeaders());
0114     group.writeEntry("Size", size());
0115     group.sync();
0116 }
0117 
0118 #include "moc_dkimmanagerulesdialog.cpp"