7#include "filterimporterprocmail.h"
8#include "filter/mailfilter.h"
9#include "mailcommon_debug.h"
10#include <KLocalizedString>
17FilterImporterProcmail::FilterImporterProcmail(
QFile *file)
18 : FilterImporterAbstract()
24FilterImporterProcmail::FilterImporterProcmail(
QString string)
25 : FilterImporterAbstract()
31FilterImporterProcmail::~FilterImporterProcmail() =
default;
33void FilterImporterProcmail::readStream(
QTextStream &stream)
35 MailFilter *
filter =
nullptr;
36 while (!stream.
atEnd()) {
38 qCDebug(MAILCOMMON_LOG) <<
" line :" << line <<
" filter " <<
filter;
39 filter = parseLine(stream, line, filter);
45QString FilterImporterProcmail::defaultFiltersSettingsPath()
50QString FilterImporterProcmail::createUniqFilterName()
52 return i18n(
"Procmail filter %1", ++mFilterCount);
55MailCommon::MailFilter *FilterImporterProcmail::parseLine(QTextStream &stream, QString line, MailCommon::MailFilter *filter)
61 }
else if (line.
startsWith(QLatin1Char(
'#'))) {
64 }
else if (line.
startsWith(QLatin1StringView(
":0"))) {
67 const QString uniqName = createUniqFilterName();
68 filter->pattern()->setName(uniqName);
69 filter->setToolbarName(uniqName);
70 }
else if (line.
startsWith(QLatin1StringView(
"* "))) {
74 if (line.
startsWith(QLatin1StringView(
"^From:"))) {
75 line.
remove(QStringLiteral(
"^From:"));
77 }
else if (line.
startsWith(QLatin1StringView(
"^Subject:"))) {
78 line.
remove(QStringLiteral(
"^Subject:"));
79 fieldName =
"subject";
80 }
else if (line.
startsWith(QLatin1StringView(
"^Sender:"))) {
81 line.
remove(QStringLiteral(
"^Sender:"));
82 }
else if (line.
startsWith(QLatin1StringView(
"^(To|Cc):"))) {
83 line.
remove(QStringLiteral(
"^(To|Cc):"));
84 fieldName =
"<recipients>";
86 qCDebug(MAILCOMMON_LOG) <<
" line condition not parsed :" << line;
89 filter->pattern()->append(rule);
91 }
else if (line.
startsWith(QLatin1Char(
'!'))) {
92 line.
remove(QLatin1Char(
'!'));
94 }
else if (line.
startsWith(QLatin1Char(
'|'))) {
96 const QString actionName(QStringLiteral(
"execute"));
97 const QString value(line);
98 createFilterAction(filter, actionName, value);
99 }
else if (line.
startsWith(QLatin1Char(
'{'))) {
101 }
else if (line.
startsWith(QLatin1Char(
'}'))) {
104 const QString actionName(QStringLiteral(
"transfer"));
105 const QString value(line);
106 createFilterAction(filter, actionName, value);
std::shared_ptr< SearchRule > Ptr
Defines a pointer to a search rule.
Function
Describes operators for comparison of field and contents.
static SearchRule::Ptr createInstance(const QByteArray &field=QByteArray(), Function function=FuncContains, const QString &contents=QString())
Creates a new search rule of a certain type by instantiating the appropriate subclass depending on th...
QString i18n(const char *text, const TYPE &arg...)
bool isEmpty() const const
QString & remove(QChar ch, Qt::CaseSensitivity cs)
bool startsWith(QChar c, Qt::CaseSensitivity cs) const const
QFuture< void > filter(QThreadPool *pool, Sequence &sequence, KeepFunctor &&filterFunction)
QString readLine(qint64 maxlen)