00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "filteritem.h"
00019
00020 FilterItem::FilterItem( uint filterNr )
00021 {
00022
00023 filterNumber = filterNr;
00024
00025
00026 KConfigGroup* confFilter = new KConfigGroup( KGlobal::config(), QString( "%1%2" ).arg( CONFIG_GROUP_FILTER ).arg( filterNr ) );
00027
00028
00029 name = confFilter->readEntry( CONFIG_ENTRY_FILTER_NAME );
00030
00031
00032 numberCriterias = confFilter->readEntry( CONFIG_ENTRY_FILTER_CRITERIA_NUMBER, 0 );
00033
00034
00035 switch( confFilter->readEntry( CONFIG_ENTRY_FILTER_CRITERIA_LINKAGE, DEFAULT_FILTER_CRITERIA_LINKAGE ) )
00036 {
00037 case CONFIG_VALUE_FILTER_CRITERIA_LINKAGE_MATCH_ALL : linkage = LinkAll; break;
00038 case CONFIG_VALUE_FILTER_CRITERIA_LINKAGE_MATCH_ANY : linkage = LinkAny; break;
00039 default : kdError() << "FilterItem::FilterItem(): Unknown linkage value read. Set ALL. ( Filter " << filterNumber << ")" << endl;
00040 linkage = LinkAll;
00041 break;
00042 }
00043
00044
00045 switch( confFilter->readEntry( CONFIG_ENTRY_FILTER_ACTION, DEFAULT_FILTER_ACTION ) )
00046 {
00047 case CONFIG_VALUE_FILTER_ACTION_PASS : action = FActPass; break;
00048 case CONFIG_VALUE_FILTER_ACTION_DELETE : action = FActDelete; break;
00049 case CONFIG_VALUE_FILTER_ACTION_MARK : action = FActMark; break;
00050 case CONFIG_VALUE_FILTER_ACTION_MOVE : action = FActMove; break;
00051 case CONFIG_VALUE_FILTER_ACTION_IGNORE : action = FActIgnore; break;
00052 case CONFIG_VALUE_FILTER_ACTION_SPAMCHECK : action = FActSpamcheck; break;
00053 default : kdError() << "FilterItem::FilterItem(): Unknown filter action read. Set PASS. (Filter " << filterNumber << ")" << endl;
00054 action = FActPass;
00055 break;
00056 }
00057
00058
00059 if( action == FActMove )
00060 {
00061 mailbox = confFilter->readEntry( CONFIG_ENTRY_FILTER_MOVE_MAILBOX );
00062 if( mailbox.isNull() || mailbox.isEmpty() )
00063 {
00064 kdWarning() << "Filter " << filterNumber << ": No mailbox name found. Set default: " << DEFAULT_FILTER_ACTION_MOVE_MAILBOX << endl;
00065 mailbox = QString( DEFAULT_FILTER_ACTION_MOVE_MAILBOX );
00066 }
00067 }
00068
00069
00070 for( uint critNr = 1; critNr <= numberCriterias; critNr++ )
00071 {
00072 criterias.append( new FilterItemCriteria( filterNr, critNr ) );
00073 }
00074 }
00075
00076
00077 FilterItem::~FilterItem()
00078 {
00079
00080
00081 QListIterator<FilterItemCriteria*> it( criterias );
00082 while( it.hasNext() )
00083 {
00084 delete it.next();
00085 }
00086 }
00087
00088 FilterAction_Type FilterItem::check( QString from, QString to, uint size, QString subject, QStringList header, QString account, QString& mailboxName ) const
00089 {
00090 bool match = false;
00091
00092
00093 if( criterias.isEmpty() ) return FActNone;
00094
00095
00096 QListIterator<FilterItemCriteria*> it( criterias );
00097
00098
00099
00100 if( linkage == LinkAll )
00101 {
00102 match = true;
00103 while( it.hasNext() && match )
00104 {
00105 FilterItemCriteria* crit = it.next();
00106
00107 match = match && crit->check( from, to, size, subject, header, account );
00108 }
00109 }
00110 else if( linkage == LinkAny )
00111 {
00112 match = false;
00113 while( it.hasNext() && !match )
00114 {
00115 FilterItemCriteria* crit = it.next();
00116
00117 match = crit->check( from, to, size, subject, header, account );
00118 }
00119 }
00120 else
00121 kdError() << "FilterItem::check(): Unknown linkage (Filter " << filterNumber << ")" << endl;
00122
00123
00124 if( match )
00125 {
00126
00127 if( action == FActMove )
00128 {
00129 mailboxName.remove( 0, mailboxName.length() );
00130 mailboxName.append( mailbox );
00131 }
00132
00133 return action;
00134 }
00135
00136
00137 return FActNone;
00138 }
00139
00140 void FilterItem::print( ) const
00141 {
00142 kdDebug() << "Settings of filter " << filterNumber << ":" << endl;
00143 kdDebug() << "Name: " << name << endl;
00144 kdDebug() << "Number of criterias: " << numberCriterias << endl;
00145
00146 switch( linkage )
00147 {
00148 case LinkAll : kdDebug() << "Criteria Linkage: ALL (AND)" << endl; break;
00149 case LinkAny : kdDebug() << "Criteria Linkage: ANY (OR)" << endl; break;
00150 default : kdDebug() << "Unknown Criteria LInkage" << endl; break;
00151 }
00152
00153 switch( action )
00154 {
00155 case FActPass : kdDebug() << "Action: PASS" << endl; break;
00156 case FActDelete : kdDebug() << "Action: DELETE" << endl; break;
00157 case FActMark : kdDebug() << "Action: MARK" << endl; break;
00158 case FActMove : kdDebug() << "Action: MOVE to " << mailbox << endl; break;
00159 case FActSpamcheck : kdDebug() << "Action: SPAMCHECK" << endl; break;
00160 case FActIgnore : kdDebug() << "Action: IGNORE" << endl; break;
00161 default : kdDebug() << "Unknown Action" << endl; break;
00162 }
00163
00164 kdDebug() << "Criterias:" << endl;
00165 QListIterator<FilterItemCriteria*> it( criterias );
00166 while( it.hasNext() )
00167 {
00168 FilterItemCriteria* crit = it.next();
00169 crit->print();
00170 }
00171 }
00172
00173