00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "filtersetupitem.h"
00019
00020 FilterSetupItem::FilterSetupItem( QTreeWidget* parent )
00021 : QTreeWidgetItem( parent )
00022 {
00023
00024 number = 0;
00025
00026 init();
00027 }
00028
00029 FilterSetupItem::FilterSetupItem( QTreeWidget* parent, uint num )
00030 : QTreeWidgetItem( parent )
00031 {
00032
00033 number = num;
00034
00035 init();
00036 }
00037
00038 FilterSetupItem::~FilterSetupItem()
00039 {
00040 }
00041
00042 void FilterSetupItem::init( )
00043 {
00044
00045 config = KGlobal::config();
00046
00047
00048 setName( i18n( DEFAULT_FILTER_NAME ) );
00049 setCriteriaLinkage( DEFAULT_FILTER_CRITERIA_LINKAGE );
00050 setAction( DEFAULT_FILTER_ACTION );
00051
00052
00053 setText( ColNumber, QString("%1").arg( number ) );
00054 }
00055
00056 void FilterSetupItem::setName( QString name )
00057 {
00058 this->name = name;
00059
00060
00061 setText( ColName, name );
00062 }
00063
00064 QString FilterSetupItem::getName( ) const
00065 {
00066 return name;
00067 }
00068
00069 void FilterSetupItem::setNumber( uint number )
00070 {
00071 this->number = number;
00072
00073
00074 setText( ColNumber, QString("%1").arg( number ) );
00075 }
00076
00077 void FilterSetupItem::setAction( int action )
00078 {
00079 if( action == CONFIG_VALUE_FILTER_ACTION_PASS ||
00080 action == CONFIG_VALUE_FILTER_ACTION_DELETE ||
00081 action == CONFIG_VALUE_FILTER_ACTION_MARK ||
00082 action == CONFIG_VALUE_FILTER_ACTION_MOVE ||
00083 action == CONFIG_VALUE_FILTER_ACTION_IGNORE ||
00084 action == CONFIG_VALUE_FILTER_ACTION_SPAMCHECK )
00085 {
00086 this->action = action;
00087 }
00088 else
00089 {
00090 kdError() << "FilterSetupItem::setAction: Invalid parameter for action given. Parameter: " << action << endl;
00091 this->action = DEFAULT_FILTER_ACTION;
00092 return;
00093 }
00094
00095
00096 updateActionColumn();
00097 }
00098
00099 void FilterSetupItem::save( )
00100 {
00101
00102 QString group;
00103 group = QString( "%1%2" ).arg( CONFIG_GROUP_FILTER ).arg( number );
00104
00105
00106 config->deleteGroup( group );
00107
00108
00109 KConfigGroup* configFilter = new KConfigGroup( config, group );
00110
00111
00112 configFilter->writeEntry( CONFIG_ENTRY_FILTER_NAME, name );
00113
00114 if( linkage == CONFIG_VALUE_FILTER_CRITERIA_LINKAGE_MATCH_ALL ||
00115 linkage == CONFIG_VALUE_FILTER_CRITERIA_LINKAGE_MATCH_ANY )
00116 {
00117 configFilter->writeEntry( CONFIG_ENTRY_FILTER_CRITERIA_LINKAGE, linkage );
00118 }
00119 else
00120 {
00121 configFilter->writeEntry( CONFIG_ENTRY_FILTER_CRITERIA_LINKAGE, DEFAULT_FILTER_CRITERIA_LINKAGE );
00122 }
00123
00124 if( action == CONFIG_VALUE_FILTER_ACTION_PASS ||
00125 action == CONFIG_VALUE_FILTER_ACTION_DELETE ||
00126 action == CONFIG_VALUE_FILTER_ACTION_MARK ||
00127 action == CONFIG_VALUE_FILTER_ACTION_MOVE ||
00128 action == CONFIG_VALUE_FILTER_ACTION_IGNORE ||
00129 action == CONFIG_VALUE_FILTER_ACTION_SPAMCHECK )
00130 {
00131 configFilter->writeEntry( CONFIG_ENTRY_FILTER_ACTION, action );
00132 }
00133 else
00134 {
00135 configFilter->writeEntry( CONFIG_ENTRY_FILTER_ACTION, DEFAULT_FILTER_ACTION );
00136 }
00137
00138
00139 switch( action )
00140 {
00141 case CONFIG_VALUE_FILTER_ACTION_MOVE :
00142 configFilter->writeEntry( CONFIG_ENTRY_FILTER_MOVE_MAILBOX, mailbox );
00143 break;
00144
00145 default: break;
00146 }
00147
00148
00149 if( !criteriaList.empty() )
00150 {
00151 configFilter->writeEntry( CONFIG_ENTRY_FILTER_CRITERIA_NUMBER, criteriaList.size() );
00152
00153 int ctr = 0;
00154 FilterCriteriaList_Type::iterator it;
00155 for( it = criteriaList.begin(); it != criteriaList.end(); ++it )
00156 {
00157 ctr++;
00158
00159 configFilter->writeEntry( QString( "%1%2" ).arg( CONFIG_ENTRY_FILTER_CRITERIA_SOURCE ).arg( ctr ), (*it).source );
00160 configFilter->writeEntry( QString( "%1%2" ).arg( CONFIG_ENTRY_FILTER_CRITERIA_CONDITION ).arg( ctr ), (*it).condition );
00161
00162 switch( (*it).source )
00163 {
00164 case CONFIG_VALUE_FILTER_CRITERIA_SOURCE_FROM :
00165 case CONFIG_VALUE_FILTER_CRITERIA_SOURCE_TO :
00166 case CONFIG_VALUE_FILTER_CRITERIA_SOURCE_SUBJECT :
00167 case CONFIG_VALUE_FILTER_CRITERIA_SOURCE_HEADER :
00168 case CONFIG_VALUE_FILTER_CRITERIA_SOURCE_ACCOUNT : configFilter->writeEntry( QString( "%1%2" ).arg( CONFIG_ENTRY_FILTER_CRITERIA_VALUE ).arg( ctr ), (*it).txtValue );
00169 configFilter->writeEntry( QString( "%1%2" ).arg( CONFIG_ENTRY_FILTER_CRITERIA_CASESENSITIVE ).arg( ctr ), (*it).cs );
00170 break;
00171
00172 case CONFIG_VALUE_FILTER_CRITERIA_SOURCE_SIZE : configFilter->writeEntry( QString( "%1%2" ).arg( CONFIG_ENTRY_FILTER_CRITERIA_VALUE ).arg( ctr ), (*it).numValue );
00173 break;
00174 }
00175 }
00176 }
00177 else
00178 {
00179 configFilter->writeEntry( CONFIG_ENTRY_FILTER_CRITERIA_NUMBER, 0 );
00180 }
00181
00182 }
00183
00184 void FilterSetupItem::setCriteriaLinkage( int linkage )
00185 {
00186 if( linkage == CONFIG_VALUE_FILTER_CRITERIA_LINKAGE_MATCH_ALL ||
00187 linkage == CONFIG_VALUE_FILTER_CRITERIA_LINKAGE_MATCH_ANY )
00188 {
00189 this->linkage = linkage;
00190 }
00191 else
00192 {
00193 kdError() << "FilterSetupItem::setCriteriaLinkage: Invalid parameter for criteria linkage given. Parameter: " << linkage << endl;
00194 this->linkage = DEFAULT_FILTER_CRITERIA_LINKAGE;
00195 return;
00196 }
00197
00198 }
00199
00200 void FilterSetupItem::setCriteriaList( FilterCriteriaList_Type list )
00201 {
00202 criteriaList = list;
00203 }
00204
00205 void FilterSetupItem::setMailBox( QString mailbox )
00206 {
00207 this->mailbox = mailbox;
00208
00209
00210 updateActionColumn();
00211 }
00212
00213 int FilterSetupItem::getCriteriaLinkage( ) const
00214 {
00215 return linkage;
00216 }
00217
00218 int FilterSetupItem::getAction( ) const
00219 {
00220 return action;
00221 }
00222
00223 QString FilterSetupItem::getMailBox( ) const
00224 {
00225 if( action == CONFIG_VALUE_FILTER_ACTION_MOVE )
00226 return mailbox;
00227 else
00228 return QString( "" );
00229 }
00230
00231 FilterCriteriaList_Type FilterSetupItem::getCriteriaList( ) const
00232 {
00233 return criteriaList;
00234 }
00235
00236 uint FilterSetupItem::getNumber( ) const
00237 {
00238 return number;
00239 }
00240
00241 int FilterSetupItem::compare( FilterSetupItem * i, int col, bool ascending ) const
00242 {
00243 if( col == ColNumber )
00244 {
00245 return text( ColNumber ).toInt() - i->text( ColNumber ).toInt();
00246 }
00247 else
00248 {
00249 if( ascending )
00250 {
00251 return text( col ).compare( text( col ) );
00252 }
00253 else
00254 {
00255 return text( col ).compare( text( col ) ) * -1;
00256 }
00257 }
00258
00259
00260 }
00261
00262 void FilterSetupItem::updateActionColumn( )
00263 {
00264 QString strAction;
00265
00266
00267 switch( action )
00268 {
00269 case CONFIG_VALUE_FILTER_ACTION_PASS : strAction = i18nc( "@item:intable show the filtered mail in the view", "Show" ); break;
00270 case CONFIG_VALUE_FILTER_ACTION_DELETE : strAction = i18nc( "@item:intable delete the filtered mail", "Delete" ); break;
00271 case CONFIG_VALUE_FILTER_ACTION_MARK : strAction = i18nc( "@item:intable mark the filtered mail", "Mark" ); break;
00272 case CONFIG_VALUE_FILTER_ACTION_MOVE : strAction = i18nc( "@item:intable move the filtered mail into a mailbox", "Move to <resource>%1</resource>", mailbox ); break;
00273 case CONFIG_VALUE_FILTER_ACTION_IGNORE : strAction = i18nc( "@item:intable ignore the filtered mail", "Ignore"); break;
00274 case CONFIG_VALUE_FILTER_ACTION_SPAMCHECK : strAction = i18nc( "@item:intable check the filtered mail for spam", "Check for spam" ); break;
00275 default : strAction = i18nc( "@item:intable unknown action", "Unknown action" ); break;
00276 }
00277
00278
00279 setText( ColAction, QString( " %1" ).arg( strAction ) );
00280 }
00281
00282 void FilterSetupItem::load( )
00283 {
00284
00285 QString group;
00286 group = QString( "%1%2" ).arg( CONFIG_GROUP_FILTER ).arg( number );
00287
00288
00289
00290
00291 KConfigGroup* configFilter = new KConfigGroup( config, group );
00292
00293
00294 setName( configFilter->readEntry( CONFIG_ENTRY_FILTER_NAME, DEFAULT_FILTER_NAME ) );
00295
00296
00297 setCriteriaLinkage( configFilter->readEntry( CONFIG_ENTRY_FILTER_CRITERIA_LINKAGE, DEFAULT_FILTER_CRITERIA_LINKAGE ) );
00298 if( linkage != CONFIG_VALUE_FILTER_CRITERIA_LINKAGE_MATCH_ALL && linkage != CONFIG_VALUE_FILTER_CRITERIA_LINKAGE_MATCH_ANY )
00299 setCriteriaLinkage( DEFAULT_FILTER_CRITERIA_LINKAGE );
00300
00301
00302 setAction( configFilter->readEntry( CONFIG_ENTRY_FILTER_ACTION, DEFAULT_FILTER_ACTION ) );
00303 if( action != CONFIG_VALUE_FILTER_ACTION_PASS &&
00304 action != CONFIG_VALUE_FILTER_ACTION_DELETE &&
00305 action != CONFIG_VALUE_FILTER_ACTION_MARK &&
00306 action != CONFIG_VALUE_FILTER_ACTION_MOVE &&
00307 action != CONFIG_VALUE_FILTER_ACTION_IGNORE &&
00308 action != CONFIG_VALUE_FILTER_ACTION_SPAMCHECK )
00309 setAction( DEFAULT_FILTER_ACTION );
00310
00311
00312 switch( action )
00313 {
00314 case CONFIG_VALUE_FILTER_ACTION_MOVE : setMailBox( configFilter->readEntry( CONFIG_ENTRY_FILTER_MOVE_MAILBOX, DEFAULT_FILTER_ACTION_MOVE_MAILBOX ) ); break;
00315 default : setMailBox( QString() );
00316 }
00317
00318
00319 uint numCrit = configFilter->readEntry( CONFIG_ENTRY_FILTER_CRITERIA_NUMBER, 0 );
00320
00321
00322 for( uint ctr = 1; ctr <= numCrit; ctr++ )
00323 {
00324 struct FilterCriteria_Type crit;
00325
00326 crit.source = configFilter->readEntry( QString( "%1%2" ).arg( CONFIG_ENTRY_FILTER_CRITERIA_SOURCE ).arg( ctr ), DEFAULT_FILTER_CRITERIA_SOURCE );
00327 if( crit.source != CONFIG_VALUE_FILTER_CRITERIA_SOURCE_FROM &&
00328 crit.source != CONFIG_VALUE_FILTER_CRITERIA_SOURCE_TO &&
00329 crit.source != CONFIG_VALUE_FILTER_CRITERIA_SOURCE_SUBJECT &&
00330 crit.source != CONFIG_VALUE_FILTER_CRITERIA_SOURCE_HEADER &&
00331 crit.source != CONFIG_VALUE_FILTER_CRITERIA_SOURCE_ACCOUNT &&
00332 crit.source != CONFIG_VALUE_FILTER_CRITERIA_SOURCE_SIZE )
00333 crit.source = DEFAULT_FILTER_CRITERIA_SOURCE;
00334
00335 switch( crit.source )
00336 {
00337 case CONFIG_VALUE_FILTER_CRITERIA_SOURCE_SIZE : crit.condition = configFilter->readEntry( QString( "%1%2" ).arg( CONFIG_ENTRY_FILTER_CRITERIA_CONDITION ).arg( ctr ), DEFAULT_FILTER_CRITERIA_COND_NUM );
00338 if( crit.condition != CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_EQUAL &&
00339 crit.condition != CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_NOT_EQUAL &&
00340 crit.condition != CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_GREATER &&
00341 crit.condition != CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_GREATER_EQUAL &&
00342 crit.condition != CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_LESS &&
00343 crit.condition != CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_LESS_EQUAL )
00344 crit.condition = DEFAULT_FILTER_CRITERIA_COND_NUM;
00345 crit.numValue = configFilter->readEntry( QString( "%1%2" ).arg( CONFIG_ENTRY_FILTER_CRITERIA_VALUE ).arg( ctr ), DEFAULT_FILTER_CRITERIA_SIZE );
00346 break;
00347
00348 default : crit.condition = configFilter->readEntry( QString( "%1%2" ).arg( CONFIG_ENTRY_FILTER_CRITERIA_CONDITION ).arg( ctr ), DEFAULT_FILTER_CRITERIA_COND_TEXT );
00349 if( crit.condition != CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_CONTAINS &&
00350 crit.condition != CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_NOT_CONTAINS &&
00351 crit.condition != CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_EQUALS &&
00352 crit.condition != CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_NOT_EQUALS &&
00353 crit.condition != CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_REGEXPR &&
00354 crit.condition != CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_NOT_REGEXPR )
00355 crit.condition = DEFAULT_FILTER_CRITERIA_COND_TEXT;
00356 crit.txtValue = configFilter->readEntry( QString( "%1%2" ).arg( CONFIG_ENTRY_FILTER_CRITERIA_VALUE ).arg( ctr ) );
00357 crit.cs = configFilter->readEntry( QString( "%1%2" ).arg( CONFIG_ENTRY_FILTER_CRITERIA_CASESENSITIVE ).arg( ctr ), DEFAULT_FILTER_CRITERIA_CASE_SENSITIVE );
00358 break;
00359 }
00360
00361 criteriaList.push_back( crit );
00362
00363 }
00364
00365
00366 }
00367
00368
00369