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"