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 "sieveactionenclose.h" 0007 #include "autocreatescripts/autocreatescriptutil_p.h" 0008 #include "editor/sieveeditorutil.h" 0009 #include "widgets/multilineedit.h" 0010 0011 #include <KLineEditEventHandler> 0012 #include <KLocalizedString> 0013 #include <QLineEdit> 0014 0015 #include "libksieveui_debug.h" 0016 #include <QGridLayout> 0017 #include <QLabel> 0018 #include <QXmlStreamReader> 0019 0020 using namespace KSieveUi; 0021 SieveActionEnclose::SieveActionEnclose(SieveEditorGraphicalModeWidget *sieveGraphicalModeWidget, QObject *parent) 0022 : SieveAction(sieveGraphicalModeWidget, QStringLiteral("enclose"), i18n("Enclose"), parent) 0023 { 0024 } 0025 0026 QWidget *SieveActionEnclose::createParamWidget(QWidget *parent) const 0027 { 0028 auto w = new QWidget(parent); 0029 auto grid = new QGridLayout; 0030 grid->setContentsMargins({}); 0031 w->setLayout(grid); 0032 0033 auto lab = new QLabel(i18n("Subject:")); 0034 grid->addWidget(lab, 0, 0); 0035 0036 auto subject = new QLineEdit; 0037 KLineEditEventHandler::catchReturnKey(subject); 0038 subject->setObjectName(QLatin1StringView("subject")); 0039 connect(subject, &QLineEdit::textChanged, this, &SieveActionEnclose::valueChanged); 0040 grid->addWidget(subject, 0, 1); 0041 0042 lab = new QLabel(i18n("headers:")); 0043 grid->addWidget(lab, 1, 0); 0044 0045 auto headers = new QLineEdit; 0046 KLineEditEventHandler::catchReturnKey(headers); 0047 headers->setObjectName(QLatin1StringView("headers")); 0048 connect(headers, &QLineEdit::textChanged, this, &SieveActionEnclose::valueChanged); 0049 grid->addWidget(headers, 1, 1); 0050 0051 lab = new QLabel(i18n("text:")); 0052 grid->addWidget(lab, 2, 0); 0053 0054 auto text = new MultiLineEdit; 0055 text->setObjectName(QLatin1StringView("text")); 0056 connect(text, &MultiLineEdit::valueChanged, this, &SieveActionEnclose::valueChanged); 0057 grid->addWidget(text, 2, 1); 0058 0059 return w; 0060 } 0061 0062 void SieveActionEnclose::setParamWidgetValue(QXmlStreamReader &element, QWidget *w, QString &error) 0063 { 0064 while (element.readNextStartElement()) { 0065 const QStringView tagName = element.name(); 0066 if (tagName == QLatin1StringView("tag")) { 0067 const QString tagValue = element.readElementText(); 0068 if (tagValue == QLatin1StringView("headers")) { 0069 const QString strValue = AutoCreateScriptUtil::strValue(element); 0070 if (!strValue.isEmpty()) { 0071 auto subject = w->findChild<QLineEdit *>(QStringLiteral("headers")); 0072 subject->setText(strValue); 0073 } 0074 } else if (tagValue == QLatin1StringView("subject")) { 0075 const QString strValue = AutoCreateScriptUtil::strValue(element); 0076 if (!strValue.isEmpty()) { 0077 auto headers = w->findChild<QLineEdit *>(QStringLiteral("subject")); 0078 headers->setText(strValue); 0079 } 0080 } else { 0081 unknownTagValue(tagValue, error); 0082 qCDebug(LIBKSIEVEUI_LOG) << " SieveActionEnclose::setParamWidgetValue unknown tag value:" << tagValue; 0083 } 0084 } else if (tagName == QLatin1StringView("str")) { 0085 auto edit = w->findChild<MultiLineEdit *>(QStringLiteral("text")); 0086 edit->setPlainText(element.readElementText()); 0087 } else if (tagName == QLatin1StringView("crlf")) { 0088 element.skipCurrentElement(); 0089 // nothing 0090 } else if (tagName == QLatin1StringView("comment")) { 0091 element.skipCurrentElement(); 0092 // implement in the future ? 0093 } else { 0094 unknownTag(tagName, error); 0095 qCDebug(LIBKSIEVEUI_LOG) << " SieveActionEnclose::setParamWidgetValue unknown tagName " << tagName; 0096 } 0097 } 0098 } 0099 0100 QString SieveActionEnclose::code(QWidget *w) const 0101 { 0102 QString result = QStringLiteral("enclose "); 0103 const QLineEdit *subject = w->findChild<QLineEdit *>(QStringLiteral("subject")); 0104 const QString subjectStr = subject->text(); 0105 if (!subjectStr.isEmpty()) { 0106 result += QStringLiteral(":subject \"%1\" ").arg(subjectStr); 0107 } 0108 0109 const QLineEdit *headers = w->findChild<QLineEdit *>(QStringLiteral("headers")); 0110 const QString headersStr = headers->text(); 0111 if (!headersStr.isEmpty()) { 0112 result += QStringLiteral(":headers \"%1\" ").arg(headersStr); 0113 } 0114 0115 const MultiLineEdit *edit = w->findChild<MultiLineEdit *>(QStringLiteral("text")); 0116 const QString text = edit->toPlainText(); 0117 if (!text.isEmpty()) { 0118 result += QStringLiteral("text:%1").arg(AutoCreateScriptUtil::createMultiLine(text)); 0119 } else { 0120 result += QLatin1Char(';'); 0121 } 0122 0123 return result; 0124 } 0125 0126 QStringList SieveActionEnclose::needRequires(QWidget * /*parent*/) const 0127 { 0128 return QStringList() << QStringLiteral("enclose"); 0129 } 0130 0131 bool SieveActionEnclose::needCheckIfServerHasCapability() const 0132 { 0133 return true; 0134 } 0135 0136 QString SieveActionEnclose::serverNeedsCapability() const 0137 { 0138 return QStringLiteral("enclose"); 0139 } 0140 0141 QString SieveActionEnclose::help() const 0142 { 0143 return i18n("Enclose action command is defined to allow an entire message to be enclosed as an attachment to a new message."); 0144 } 0145 0146 QUrl SieveActionEnclose::href() const 0147 { 0148 return SieveEditorUtil::helpUrl(SieveEditorUtil::strToVariableName(name())); 0149 } 0150 0151 #include "moc_sieveactionenclose.cpp"