File indexing completed on 2025-02-16 04:55:57

0001 /*
0002    SPDX-FileCopyrightText: 2013-2024 Laurent Montel <montel@kde.org>
0003 
0004    SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 #include "sieveactionextracttext.h"
0007 #include "editor/sieveeditorutil.h"
0008 
0009 #include <KLineEditEventHandler>
0010 #include <KLocalizedString>
0011 #include <QLineEdit>
0012 
0013 #include "libksieveui_debug.h"
0014 #include <QGridLayout>
0015 #include <QLabel>
0016 #include <QSpinBox>
0017 #include <QXmlStreamReader>
0018 
0019 using namespace KSieveUi;
0020 SieveActionExtractText::SieveActionExtractText(SieveEditorGraphicalModeWidget *sieveGraphicalModeWidget, QObject *parent)
0021     : SieveAction(sieveGraphicalModeWidget, QStringLiteral("extracttext"), i18n("Extract Text"), parent)
0022 {
0023 }
0024 
0025 QWidget *SieveActionExtractText::createParamWidget(QWidget *parent) const
0026 {
0027     auto w = new QWidget(parent);
0028     auto grid = new QGridLayout;
0029     grid->setContentsMargins({});
0030     w->setLayout(grid);
0031 
0032     auto lab = new QLabel(i18n("Number of characters:"));
0033     grid->addWidget(lab, 0, 0);
0034 
0035     auto nbCharacters = new QSpinBox;
0036     nbCharacters->setMinimum(1);
0037     nbCharacters->setMaximum(99999);
0038     nbCharacters->setObjectName(QLatin1StringView("numberOfCharacters"));
0039     grid->addWidget(nbCharacters, 0, 1);
0040     connect(nbCharacters, &QSpinBox::valueChanged, this, &SieveActionExtractText::valueChanged);
0041 
0042     lab = new QLabel(i18n("Stored in variable name:"));
0043     grid->addWidget(lab, 1, 0);
0044 
0045     auto variableName = new QLineEdit;
0046     KLineEditEventHandler::catchReturnKey(variableName);
0047     connect(variableName, &QLineEdit::textChanged, this, &SieveActionExtractText::valueChanged);
0048     variableName->setObjectName(QLatin1StringView("variablename"));
0049     grid->addWidget(variableName, 1, 1);
0050 
0051     return w;
0052 }
0053 
0054 void SieveActionExtractText::setParamWidgetValue(QXmlStreamReader &element, QWidget *w, QString &error)
0055 {
0056     while (element.readNextStartElement()) {
0057         const QStringView tagName = element.name();
0058 
0059         if (tagName == QLatin1StringView("tag")) {
0060             element.skipCurrentElement();
0061             // TODO ?
0062         } else if (tagName == QLatin1StringView("num")) {
0063             auto numberOfCharacters = w->findChild<QSpinBox *>(QStringLiteral("numberOfCharacters"));
0064             numberOfCharacters->setValue(element.readElementText().toInt());
0065         } else if (tagName == QLatin1StringView("str")) {
0066             auto variableName = w->findChild<QLineEdit *>(QStringLiteral("variablename"));
0067             variableName->setText(element.readElementText());
0068         } else if (tagName == QLatin1StringView("crlf")) {
0069             element.skipCurrentElement();
0070             // nothing
0071         } else if (tagName == QLatin1StringView("comment")) {
0072             element.skipCurrentElement();
0073             // implement in the future ?
0074         } else {
0075             unknownTag(tagName, error);
0076             qCDebug(LIBKSIEVEUI_LOG) << " SieveActionExtractText::setParamWidgetValue unknown tagName " << tagName;
0077         }
0078     }
0079 }
0080 
0081 QString SieveActionExtractText::code(QWidget *w) const
0082 {
0083     const QSpinBox *numberOfCharacters = w->findChild<QSpinBox *>(QStringLiteral("numberOfCharacters"));
0084     const QString numberOfCharactersStr = QString::number(numberOfCharacters->value());
0085 
0086     const QLineEdit *variableName = w->findChild<QLineEdit *>(QStringLiteral("variablename"));
0087     const QString variableNameStr = variableName->text();
0088 
0089     const QString result = QStringLiteral("extracttext :first %1 \"%2\";").arg(numberOfCharactersStr, variableNameStr);
0090     return result;
0091 }
0092 
0093 QStringList SieveActionExtractText::needRequires(QWidget * /*parent*/) const
0094 {
0095     return QStringList() << QStringLiteral("extracttext");
0096 }
0097 
0098 bool SieveActionExtractText::needCheckIfServerHasCapability() const
0099 {
0100     return true;
0101 }
0102 
0103 QString SieveActionExtractText::serverNeedsCapability() const
0104 {
0105     return QStringLiteral("extracttext");
0106 }
0107 
0108 QString SieveActionExtractText::help() const
0109 {
0110     return i18n("The \"extracttext\" action may be used within the context of a \"foreverypart\" loop and is used to store text into a variable");
0111 }
0112 
0113 QUrl SieveActionExtractText::href() const
0114 {
0115     return SieveEditorUtil::helpUrl(SieveEditorUtil::strToVariableName(name()));
0116 }
0117 
0118 #include "moc_sieveactionextracttext.cpp"