2
Copyright (c) 2012 Montel Laurent <montel@kde.org>
4
This program is free software; you can redistribute it and/or modify it
5
under the terms of the GNU General Public License, version 2, as
6
published by the Free Software Foundation.
8
This program is distributed in the hope that it will be useful, but
9
WITHOUT ANY WARRANTY; without even the implied warranty of
10
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11
General Public License for more details.
13
You should have received a copy of the GNU General Public License along
14
with this program; if not, write to the Free Software Foundation, Inc.,
15
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18
#include "filterimporterbalsa_p.h"
19
#include "filtermanager.h"
20
#include "mailfilter.h"
23
#include <KConfigGroup>
29
using namespace MailCommon;
31
FilterImporterBalsa::FilterImporterBalsa( QFile *file )
32
:FilterImporterAbstract()
34
KConfig config( file->fileName() );
35
const QStringList filterList = config.groupList().filter( QRegExp( "filter-\\d+" ) );
36
Q_FOREACH(const QString &filter, filterList) {
37
KConfigGroup grp = config.group(filter);
42
FilterImporterBalsa::~FilterImporterBalsa()
46
QString FilterImporterBalsa::defaultFiltersSettingsPath()
48
return QString::fromLatin1( "%1/.balsa/config" ).arg( QDir::homePath() );
52
void FilterImporterBalsa::addFilter(const KConfigGroup &grp)
54
MailCommon::MailFilter *filter = new MailCommon::MailFilter();
55
const QString name = grp.readEntry(QLatin1String("Name"));
56
filter->pattern()->setName( name );
57
filter->setToolbarName( name );
60
const QString popupText = grp.readEntry(QLatin1String("Popup-text"));
63
const QString sound = grp.readEntry(QLatin1String("Sound"));
64
if(!sound.isEmpty()) {
65
const QString actionName = QLatin1String( "play sound" );
66
createFilterAction( filter, actionName, sound );
69
const int actionType = grp.readEntry(QLatin1String("Action-type"),-1);
70
const QString actionStr = grp.readEntry(QLatin1String("Action-string"));
71
parseAction(actionType,actionStr,filter);
73
const QString condition = grp.readEntry(QLatin1String("Condition"));
74
parseCondition(condition,filter);
79
void FilterImporterBalsa::parseCondition(const QString& condition,MailCommon::MailFilter *filter )
81
QStringList conditionList;
82
if(condition.startsWith(QLatin1String("OR "))) {
83
conditionList = condition.split(QLatin1String("OR"));
84
filter->pattern()->setOp( SearchPattern::OpOr );
85
} else if(condition.startsWith(QLatin1String("AND "))) {
86
conditionList = condition.split(QLatin1String("AND"));
87
filter->pattern()->setOp( SearchPattern::OpAnd );
90
conditionList<< condition;
92
Q_FOREACH(QString cond, conditionList) {
93
cond = cond.trimmed();
94
bool negative = false;
95
if(cond.startsWith(QLatin1String("NOT"))) {
96
cond = cond.right(cond.length()-3);
98
cond = cond.trimmed();
100
qDebug()<<" cond"<<cond;
103
QByteArray fieldName;
104
if(cond.startsWith(QLatin1String("DATE"))) {
105
fieldName = "<date>";
106
cond = cond.right(cond.length()-4);
107
cond = cond.trimmed();
108
QStringList splitDate = cond.split(QLatin1Char(' '));
109
qDebug()<<" splitDate "<<splitDate;
110
} else if(cond.startsWith(QLatin1String("FLAG"))) {
112
} else if(cond.startsWith(QLatin1String("STRING"))) {
115
qDebug()<<" condition not implemented :"<<cond;
118
//SearchRule::Ptr rule = SearchRule::createInstance( fieldName, functionName, line );
119
//filter->pattern()->append( rule );
123
void FilterImporterBalsa::parseAction(int actionType, const QString& action,MailCommon::MailFilter *filter)
126
QString actionStr(action);
132
actionName = QLatin1String( "copy" );
136
actionName = QLatin1String( "transfer" );
143
actionName = QLatin1String( "execute" );
147
actionName = QLatin1String( "transfer" );
154
qDebug()<<" unknown parse action type "<<actionType;
157
if(!actionName.isEmpty()) {
158
//TODO adapt actionStr
159
createFilterAction( filter, actionName, actionStr );