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"