kmail Library API Documentation

kmsearchpattern.h

00001 // kmsearchpattern.h
00002 // Author: Marc Mutz <Marc@Mutz.com>
00003 // This code is under GPL!
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" // for KMMsgStatus
00012 
00013 class KMMessage;
00014 class KConfig;
00015 class DwBoyerMoore;
00016 class DwString;
00017 
00018 
00019 // maximum number of filter rules per filter
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 // subclasses representing the different kinds of searches
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   //Not possible to implement this form for status searching
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 /* _kmsearchpattern_h_ */
KDE Logo
This file is part of the documentation for kmail Library Version 3.2.2.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Sat May 1 11:37:34 2004 by doxygen 1.2.15 written by Dimitri van Heesch, © 1997-2003