File indexing completed on 2025-02-16 04:55:56
0001 /* 0002 SPDX-FileCopyrightText: 2013-2024 Laurent Montel <montel@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 #include "sieveactionaddheader.h" 0007 #include "autocreatescripts/autocreatescriptutil_p.h" 0008 #include "widgets/selectaddheaderpositioncombobox.h" 0009 #include <KLineEditEventHandler> 0010 0011 #include <KLocalizedString> 0012 #include <QLineEdit> 0013 0014 #include "libksieveui_debug.h" 0015 #include <QGridLayout> 0016 #include <QLabel> 0017 #include <QUrl> 0018 #include <QWidget> 0019 #include <QXmlStreamReader> 0020 0021 using namespace KSieveUi; 0022 0023 SieveActionAddHeader::SieveActionAddHeader(SieveEditorGraphicalModeWidget *sieveGraphicalModeWidget, QObject *parent) 0024 : SieveActionAbstractEditHeader(sieveGraphicalModeWidget, QStringLiteral("addheader"), i18n("Add header"), parent) 0025 { 0026 } 0027 0028 QWidget *SieveActionAddHeader::createParamWidget(QWidget *parent) const 0029 { 0030 auto w = new QWidget(parent); 0031 auto grid = new QGridLayout; 0032 grid->setContentsMargins({}); 0033 w->setLayout(grid); 0034 0035 auto combo = new SelectAddHeaderPositionCombobox; 0036 combo->setObjectName(QLatin1StringView("selectposition")); 0037 connect(combo, &SelectAddHeaderPositionCombobox::valueChanged, this, &SieveActionAddHeader::valueChanged); 0038 grid->addWidget(combo, 0, 0); 0039 0040 auto lab = new QLabel(i18n("header:")); 0041 grid->addWidget(lab, 0, 1); 0042 0043 auto headerEdit = new QLineEdit; 0044 KLineEditEventHandler::catchReturnKey(headerEdit); 0045 connect(headerEdit, &QLineEdit::textChanged, this, &SieveActionAddHeader::valueChanged); 0046 headerEdit->setObjectName(QLatin1StringView("headeredit")); 0047 grid->addWidget(headerEdit, 0, 2); 0048 0049 lab = new QLabel(i18n("value:")); 0050 grid->addWidget(lab, 1, 1); 0051 0052 auto valueEdit = new QLineEdit; 0053 KLineEditEventHandler::catchReturnKey(valueEdit); 0054 connect(valueEdit, &QLineEdit::textChanged, this, &SieveActionAddHeader::valueChanged); 0055 valueEdit->setObjectName(QLatin1StringView("valueedit")); 0056 grid->addWidget(valueEdit, 1, 2); 0057 0058 return w; 0059 } 0060 0061 void SieveActionAddHeader::setParamWidgetValue(QXmlStreamReader &element, QWidget *w, QString &error) 0062 { 0063 int index = 0; 0064 while (element.readNextStartElement()) { 0065 const QStringView tagName = element.name(); 0066 if (tagName == QLatin1StringView("tag")) { 0067 auto combo = w->findChild<SelectAddHeaderPositionCombobox *>(QStringLiteral("selectposition")); 0068 combo->setCode(AutoCreateScriptUtil::tagValue(element.readElementText()), name(), error); 0069 } else if (tagName == QLatin1StringView("str")) { 0070 if (index == 0) { 0071 auto edit = w->findChild<QLineEdit *>(QStringLiteral("headeredit")); 0072 edit->setText(element.readElementText()); 0073 } else if (index == 1) { 0074 auto value = w->findChild<QLineEdit *>(QStringLiteral("valueedit")); 0075 value->setText(AutoCreateScriptUtil::quoteStr(element.readElementText())); 0076 } else { 0077 tooManyArguments(tagName, index, 2, error); 0078 qCDebug(LIBKSIEVEUI_LOG) << " SieveActionAddHeader::setParamWidgetValue too many argument :" << index; 0079 } 0080 ++index; 0081 } else if (tagName == QLatin1StringView("crlf")) { 0082 element.skipCurrentElement(); 0083 // nothing 0084 } else if (tagName == QLatin1StringView("comment")) { 0085 element.skipCurrentElement(); 0086 // implement in the future ? 0087 } else { 0088 unknownTag(tagName, error); 0089 qCDebug(LIBKSIEVEUI_LOG) << "SieveActionAddHeader::setParamWidgetValue unknown tag " << tagName; 0090 } 0091 } 0092 } 0093 0094 QString SieveActionAddHeader::code(QWidget *w) const 0095 { 0096 const SelectAddHeaderPositionCombobox *combo = w->findChild<SelectAddHeaderPositionCombobox *>(QStringLiteral("selectposition")); 0097 const QString position = combo->code(); 0098 0099 const QLineEdit *edit = w->findChild<QLineEdit *>(QStringLiteral("headeredit")); 0100 const QString headerStr = edit->text(); 0101 0102 const QLineEdit *value = w->findChild<QLineEdit *>(QStringLiteral("valueedit")); 0103 const QString valueStr = value->text(); 0104 0105 if (position.isEmpty()) { 0106 return QStringLiteral("addheader \"%1\" \"%2\";").arg(headerStr, valueStr); 0107 } else { 0108 return QStringLiteral("addheader %1 \"%2\" \"%3\";").arg(position, headerStr, valueStr); 0109 } 0110 } 0111 0112 QString SieveActionAddHeader::help() const 0113 { 0114 return i18n("The addheader action adds a header field to the existing message header."); 0115 } 0116 0117 QUrl SieveActionAddHeader::href() const 0118 { 0119 return QUrl(QStringLiteral("https://tools.ietf.org/html/rfc5293")); 0120 } 0121 0122 #include "moc_sieveactionaddheader.cpp"