00001
00002
00003
00004
00005
00006
#ifndef _kmsearchpattern_h_
00007
#define _kmsearchpattern_h_
00008
00009
#include <klocale.h>
00010
#include <qptrlist.h>
00011
#include <qstring.h>
00012
#include <qcstring.h>
00013
#include "kmmsgbase.h"
00014
00015
class KMMessage;
00016
class KConfig;
00017
class DwBoyerMoore;
00018
class DwString;
00019
00020
00021
00022
const int FILTER_MAX_RULES=8;
00023
00031 class KMSearchRule
00032 {
00033
public:
00041 enum Function { FuncNone = -1,
00042 FuncContains=0, FuncContainsNot,
00043 FuncEquals, FuncNotEqual,
00044 FuncRegExp, FuncNotRegExp,
00045 FuncIsGreater, FuncIsLessOrEqual,
00046 FuncIsLess, FuncIsGreaterOrEqual,
00047 FuncIsInAddressbook, FuncIsNotInAddressbook,
00048 FuncIsInCategory, FuncIsNotInCategory,
00049 FuncHasAttachment, FuncHasNoAttachment};
00050
KMSearchRule (
const QCString & field=0, Function=FuncContains,
00051
const QString &contents=QString::null );
00052
KMSearchRule (
const KMSearchRule &other );
00053
00054
const KMSearchRule & operator=(
const KMSearchRule & other );
00055
00058
static KMSearchRule* createInstance(
const QCString & field=0,
00059 Function function=FuncContains,
00060
const QString & contents=QString::null );
00061
00062
static KMSearchRule* createInstance(
const QCString & field,
00063
const char * function,
00064
const QString & contents );
00065
00066
static KMSearchRule * createInstance(
const KMSearchRule & other );
00067
00073
static KMSearchRule* createInstanceFromConfig(
const KConfig * config,
int aIdx );
00074
00075
virtual ~
KMSearchRule() {};
00076
00081
virtual bool matches(
const KMMessage * msg )
const = 0;
00082
00087
virtual bool matches(
const DwString & str, KMMessage & msg,
00088
const DwBoyerMoore * headerField=0,
00089
int headerLen=-1 )
const;
00090
00095
virtual bool isEmpty() const = 0;
00096
00099 virtual
bool requiresBody()
const {
return true; }
00100
00101
00107
void writeConfig( KConfig * config,
int aIdx )
const;
00108
00111 Function function()
const {
return mFunction; }
00112
00114 void setFunction( Function aFunction ) { mFunction = aFunction; }
00115
00126 QCString field()
const {
return mField; }
00127
00130 void setField(
const QCString & field ) { mField = field; }
00131
00134 QString contents()
const {
return mContents; }
00136 void setContents(
const QString & aContents ) { mContents = aContents; }
00137
00139
const QString asString() const;
00140
00141 private:
00142 static Function configValueToFunc( const
char * str );
00143 static
QString functionToString( Function function );
00144
00145
QCString mField;
00146 Function mFunction;
00147
QString mContents;
00148 };
00149
00150
00151
00152
00159 class
KMSearchRuleString : public
KMSearchRule
00160 {
00161
public:
00162
KMSearchRuleString(
const QCString & field=0, Function function=FuncContains,
00163
const QString & contents=QString::null );
00164
KMSearchRuleString(
const KMSearchRuleString & other );
00165
const KMSearchRuleString & operator=(
const KMSearchRuleString & other );
00166
00167
virtual ~
KMSearchRuleString();
00168
virtual bool isEmpty()
const ;
00169
virtual bool requiresBody()
const;
00170
00171
virtual bool matches(
const KMMessage * msg )
const;
00172
00176
virtual bool matches(
const DwString & str, KMMessage & msg,
00177
const DwBoyerMoore * headerField=0,
00178
int headerLen=-1 )
const;
00179
00181
bool matchesInternal(
const QString & msgContents )
const;
00182
00183
private:
00184
const DwBoyerMoore *mBmHeaderField;
00185 };
00186
00187
00194 class KMSearchRuleNumerical :
public KMSearchRule
00195 {
00196
public:
00197
KMSearchRuleNumerical(
const QCString & field=0, Function function=FuncContains,
00198
const QString & contents=QString::null );
00199
virtual bool isEmpty()
const ;
00200
00201
virtual bool matches(
const KMMessage * msg )
const;
00202
00204
bool matchesInternal(
long numericalValue,
long numericalMsgContents,
00205
const QString & msgContents )
const;
00206 };
00207
00208
00214
namespace KMail {
00215
00216
static const char *
const StatusValues[] = {
00217 I18N_NOOP(
"important" ),
00218 I18N_NOOP(
"new" ),
00219 I18N_NOOP(
"unread" ),
00220 I18N_NOOP(
"read" ),
00221 I18N_NOOP(
"old" ),
00222 I18N_NOOP(
"deleted" ),
00223 I18N_NOOP(
"replied" ),
00224 I18N_NOOP(
"forwarded" ),
00225 I18N_NOOP(
"queued" ),
00226 I18N_NOOP(
"sent" ),
00227 I18N_NOOP(
"watched" ),
00228 I18N_NOOP(
"ignored" ),
00229 I18N_NOOP(
"spam" ),
00230 I18N_NOOP(
"ham" ),
00231 I18N_NOOP(
"has an attachment"),
00232 I18N_NOOP(
"todo" )
00233 };
00234
static const int StatusValueCount =
00235
sizeof( StatusValues ) /
sizeof( *StatusValues ) -1 ;
00236
00237
00238
00239
00240
static const int StatusValueCountWithoutHidden = StatusValueCount - 2;
00241 }
00242
00243
class KMSearchRuleStatus :
public KMSearchRule
00244 {
00245
public:
00246 KMSearchRuleStatus(
const QCString & field=0, Function function=FuncContains,
00247
const QString & contents=QString::null );
00248
virtual bool isEmpty() const ;
00249 virtual
bool matches( const KMMessage * msg ) const;
00250
00251 virtual
bool matches( const DwString &, KMMessage &,
00252 const DwBoyerMoore *,
00253
int ) const;
00254 static KMMsgStatus statusFromEnglishName(const
QString&);
00255 private:
00256 KMMsgStatus mStatus;
00257 };
00258
00259
00260
00280 class
KMSearchPattern : public
QPtrList<
KMSearchRule>
00281 {
00282
00283
public:
00288 enum Operator { OpAnd, OpOr };
00297
KMSearchPattern(
const KConfig * config=0 );
00298
00300 ~
KMSearchPattern();
00301
00311
bool matches(
const KMMessage * msg )
const;
00312
bool matches(
const DwString & str )
const;
00313
bool matches( Q_UINT32 sernum )
const;
00314
00317
bool requiresBody() const;
00318
00324
void purify();
00325
00339
void readConfig( const KConfig * config );
00346
void writeConfig( KConfig * config ) const;
00347
00349 QString name()
const {
return mName; }
00352 void setName(
const QString & newName ) { mName = newName ; }
00353
00355 KMSearchPattern::Operator op()
const {
return mOperator; }
00357 void setOp( KMSearchPattern::Operator aOp ) { mOperator = aOp; }
00358
00360 QString
asString() const;
00361
00363 const
KMSearchPattern & operator=( const
KMSearchPattern & aPattern );
00364
00365 private:
00372
void importLegacyConfig( const KConfig * config );
00375
void init();
00376
00377 QString mName;
00378 Operator mOperator;
00379 };
00380
00381 #endif