7#include "filterimporterbalsa.h"
8#include "filter/mailfilter.h"
9#include "mailcommon_debug.h"
12#include <KConfigGroup>
16#include <QRegularExpression>
20FilterImporterBalsa::FilterImporterBalsa(
QFile *file)
21 : FilterImporterAbstract()
27FilterImporterBalsa::FilterImporterBalsa()
28 : FilterImporterAbstract()
32FilterImporterBalsa::~FilterImporterBalsa() =
default;
34QString FilterImporterBalsa::defaultFiltersSettingsPath()
39void FilterImporterBalsa::readConfig(KConfig *config)
41 const QStringList filterList = config->
groupList().
filter(QRegularExpression(QStringLiteral(
"filter-\\d+")));
42 for (
const QString &filter : filterList) {
43 KConfigGroup grp = config->
group(filter);
48void FilterImporterBalsa::parseFilter(
const KConfigGroup &grp)
50 auto filter =
new MailCommon::MailFilter();
52 filter->pattern()->setName(name);
53 filter->setToolbarName(name);
58 const QString sound = grp.
readEntry(QStringLiteral(
"Sound"));
60 const QString actionName = QStringLiteral(
"play sound");
61 createFilterAction(filter, actionName, sound);
64 const int actionType = grp.
readEntry(QStringLiteral(
"Action-type"), -1);
65 const QString actionStr = grp.
readEntry(QStringLiteral(
"Action-string"));
66 parseAction(actionType, actionStr, filter);
68 const QString condition = grp.
readEntry(QStringLiteral(
"Condition"));
69 parseCondition(condition, filter);
74void FilterImporterBalsa::parseCondition(
const QString &condition, MailCommon::MailFilter *filter)
76 QStringList conditionList;
77 if (condition.
startsWith(QLatin1StringView(
"OR "))) {
78 conditionList = condition.
split(QStringLiteral(
"OR"));
79 filter->pattern()->setOp(SearchPattern::OpOr);
80 }
else if (condition.
startsWith(QLatin1StringView(
"AND "))) {
81 conditionList = condition.
split(QStringLiteral(
"AND"));
82 filter->pattern()->setOp(SearchPattern::OpAnd);
85 conditionList << condition;
87 for (QString cond : std::as_const(conditionList)) {
88 cond = cond.trimmed();
89 if (cond.startsWith(QLatin1StringView(
"NOT"))) {
90 cond = cond.right(cond.length() - 3);
91 cond = cond.trimmed();
93 qCDebug(MAILCOMMON_LOG) <<
" cond" << cond;
97 if (cond.startsWith(QLatin1StringView(
"DATE"))) {
99 cond = cond.
right(cond.length() - 4);
101 QStringList splitDate = cond.
split(QLatin1Char(
' '));
102 qCDebug(MAILCOMMON_LOG) <<
" splitDate " << splitDate;
103 }
else if (cond.startsWith(QLatin1StringView(
"FLAG"))) {
104 qCDebug(MAILCOMMON_LOG) <<
" FLAG :";
105 }
else if (cond.startsWith(QLatin1StringView(
"STRING"))) {
106 qCDebug(MAILCOMMON_LOG) <<
" STRING";
108 qCDebug(MAILCOMMON_LOG) <<
" condition not implemented :" << cond;
116void FilterImporterBalsa::parseAction(
int actionType,
const QString &action, MailCommon::MailFilter *filter)
119 QString actionStr(action);
120 switch (actionType) {
125 actionName = QStringLiteral(
"copy");
129 actionName = QStringLiteral(
"transfer");
137 actionName = QStringLiteral(
"execute");
141 actionName = QStringLiteral(
"transfer");
148 qCDebug(MAILCOMMON_LOG) <<
" unknown parse action type " << actionType;
153 createFilterAction(filter, actionName, actionStr);
KConfigGroup group(const QString &group)
QString readEntry(const char *key, const char *aDefault=nullptr) const
QStringList groupList() const override
QString name(StandardAction id)
QByteArray right(qsizetype len) const const
QList< QByteArray > split(char sep) const const
QByteArray trimmed() const const
virtual QString fileName() const const override
QString arg(Args &&... args) const const
bool isEmpty() const const
QStringList split(QChar sep, Qt::SplitBehavior behavior, Qt::CaseSensitivity cs) const const
bool startsWith(QChar c, Qt::CaseSensitivity cs) const const
QStringList filter(QStringView str, Qt::CaseSensitivity cs) const const
QFuture< void > filter(QThreadPool *pool, Sequence &sequence, KeepFunctor &&filterFunction)