kmsearchpattern.h
00001
00002
00003
00004
00005 #ifndef _kmsearchpattern_h_
00006 #define _kmsearchpattern_h_
00007
00008 #include <qptrlist.h>
00009 #include <qstring.h>
00010 #include <qcstring.h>
00011 #include "kmmsgbase.h"
00012
00013 class KMMessage;
00014 class KConfig;
00015 class DwBoyerMoore;
00016 class DwString;
00017
00018
00019
00020 const int FILTER_MAX_RULES=8;
00021
00029 class KMSearchRule
00030 {
00031 public:
00039 enum Function { FuncContains=0, FuncContainsNot,
00040 FuncEquals, FuncNotEqual,
00041 FuncRegExp, FuncNotRegExp,
00042 FuncIsGreater, FuncIsLessOrEqual,
00043 FuncIsLess, FuncIsGreaterOrEqual };
00044 KMSearchRule ( const QCString & field=0, Function=FuncContains,
00045 const QString &contents=QString::null );
00046 KMSearchRule ( const KMSearchRule &other );
00047
00048 const KMSearchRule & operator=( const KMSearchRule & other );
00049
00052 static KMSearchRule* createInstance( const QCString & field=0,
00053 Function function=FuncContains,
00054 const QString & contents=QString::null );
00055
00056 static KMSearchRule* createInstance( const QCString & field,
00057 const char * function,
00058 const QString & contents );
00059
00060 static KMSearchRule * createInstance( const KMSearchRule & other );
00061
00067 static KMSearchRule* createInstanceFromConfig( const KConfig * config, int aIdx );
00068
00069 virtual ~KMSearchRule() {};
00070
00075 virtual bool matches( const KMMessage * msg ) const = 0;
00076
00081 virtual bool matches( const DwString & str, KMMessage & msg,
00082 const DwBoyerMoore * headerField=0,
00083 int headerLen=-1 ) const;
00084
00089 virtual bool isEmpty() const = 0;
00090
00093 virtual bool requiresBody() const { return true; }
00094
00095
00101 void writeConfig( KConfig * config, int aIdx ) const;
00102
00105 Function function() const { return mFunction; }
00106
00108 void setFunction( Function aFunction ) { mFunction = aFunction; }
00109
00120 QCString field() const { return mField; }
00121
00124 void setField( const QCString & field ) { mField = field; }
00125
00128 QString contents() const { return mContents; }
00130 void setContents( const QString & aContents ) { mContents = aContents; }
00131
00133 #ifndef NDEBUG
00134 const QString asString() const;
00135 #endif
00136
00137 private:
00138 static Function configValueToFunc( const char * str );
00139 QCString mField;
00140 Function mFunction;
00141 QString mContents;
00142 };
00143
00144
00145
00146
00153 class KMSearchRuleString : public KMSearchRule
00154 {
00155 public:
00156 KMSearchRuleString( const QCString & field=0, Function function=FuncContains,
00157 const QString & contents=QString::null );
00158 KMSearchRuleString( const KMSearchRuleString & other );
00159 const KMSearchRuleString & operator=( const KMSearchRuleString & other );
00160
00161 virtual ~KMSearchRuleString();
00162 virtual bool isEmpty() const ;
00163 virtual bool requiresBody() const;
00164
00165 virtual bool matches( const KMMessage * msg ) const;
00166
00170 virtual bool matches( const DwString & str, KMMessage & msg,
00171 const DwBoyerMoore * headerField=0,
00172 int headerLen=-1 ) const;
00173
00175 bool matchesInternal( const QString & msgContents ) const;
00176
00177 private:
00178 const DwBoyerMoore *mBmHeaderField;
00179 };
00180
00181
00188 class KMSearchRuleNumerical : public KMSearchRule
00189 {
00190 public:
00191 KMSearchRuleNumerical( const QCString & field=0, Function function=FuncContains,
00192 const QString & contents=QString::null );
00193 virtual bool isEmpty() const ;
00194
00195 virtual bool matches( const KMMessage * msg ) const;
00196
00198 bool matchesInternal( unsigned long numericalValue,
00199 unsigned long numericalMsgContents,
00200 const QString & msgContents ) const;
00201 };
00202
00203
00210 class KMSearchRuleStatus : public KMSearchRule
00211 {
00212 public:
00213 KMSearchRuleStatus( const QCString & field=0, Function function=FuncContains,
00214 const QString & contents=QString::null );
00215 virtual bool isEmpty() const ;
00216 virtual bool matches( const KMMessage * msg ) const;
00217
00218 virtual bool matches( const DwString &, KMMessage &,
00219 const DwBoyerMoore *,
00220 int ) const;
00221 private:
00222 KMMsgStatus mStatus;
00223 };
00224
00225
00226
00246 class KMSearchPattern : public QPtrList<KMSearchRule>
00247 {
00248
00249 public:
00254 enum Operator { OpAnd, OpOr };
00263 KMSearchPattern( const KConfig * config=0 );
00264
00266 ~KMSearchPattern();
00267
00277 bool matches( const KMMessage * msg ) const;
00278 bool matches( const DwString & str ) const;
00279 bool matches( Q_UINT32 sernum ) const;
00280
00283 bool requiresBody() const;
00284
00290 void purify();
00291
00305 void readConfig( const KConfig * config );
00312 void writeConfig( KConfig * config ) const;
00313
00315 QString name() const { return mName; }
00318 void setName( const QString & newName ) { mName = newName ; }
00319
00321 KMSearchPattern::Operator op() const { return mOperator; }
00323 void setOp( KMSearchPattern::Operator aOp ) { mOperator = aOp; }
00324
00326 #ifndef NDEBUG
00327 QString asString() const;
00328 #endif
00329
00331 const KMSearchPattern & operator=( const KMSearchPattern & aPattern );
00332
00333 private:
00340 void importLegacyConfig( const KConfig * config );
00343 void init();
00344
00345 QString mName;
00346 Operator mOperator;
00347 };
00348
00349 #endif
This file is part of the documentation for kmail Library Version 3.2.2.