diff options
Diffstat (limited to 'kshowmail/kcmconfigs/filtersetupitem.cpp')
-rw-r--r-- | kshowmail/kcmconfigs/filtersetupitem.cpp | 347 |
1 files changed, 347 insertions, 0 deletions
diff --git a/kshowmail/kcmconfigs/filtersetupitem.cpp b/kshowmail/kcmconfigs/filtersetupitem.cpp new file mode 100644 index 0000000..ef16a53 --- /dev/null +++ b/kshowmail/kcmconfigs/filtersetupitem.cpp @@ -0,0 +1,347 @@ +// +// C++ Implementation: filtersetupitem +// +// Description: +// +// +// Author: Ulrich Weigelt <ulrich.weigelt@gmx.de>, (C) 2007 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#include "filtersetupitem.h" + +FilterSetupItem::FilterSetupItem( KListView* parent ) + : KListViewItem( parent ) +{ + //set default number + number = 0; + + init(); +} + +FilterSetupItem::FilterSetupItem( KListView* parent, uint num ) + : KListViewItem( parent ) +{ + //store the given filter number + number = num; + + init(); +} + +FilterSetupItem::~FilterSetupItem() +{ +} + +void FilterSetupItem::init( ) +{ + //get application config object (kshowmailrc) + config = KApplication::kApplication()->config(); + + //set default values + setName( i18n( DEFAULT_FILTER_NAME ) ); + setCriteriaLinkage( DEFAULT_FILTER_CRITERIA_LINKAGE ); + setAction( DEFAULT_FILTER_ACTION ); + + //show number in column + setText( ColNumber, QString("%1").arg( number ) ); +} + +void FilterSetupItem::setName( QString name ) +{ + this->name = name; + + //show name in the list view + setText( ColName, name ); +} + +QString FilterSetupItem::getName( ) const +{ + return name; +} + +void FilterSetupItem::setNumber( uint number ) +{ + this->number = number; + + //show number in column + setText( ColNumber, QString("%1").arg( number ) ); +} + +void FilterSetupItem::setAction( int action ) +{ + if( action == CONFIG_VALUE_FILTER_ACTION_PASS || + action == CONFIG_VALUE_FILTER_ACTION_DELETE || + action == CONFIG_VALUE_FILTER_ACTION_MARK || + action == CONFIG_VALUE_FILTER_ACTION_MOVE || + action == CONFIG_VALUE_FILTER_ACTION_IGNORE || + action == CONFIG_VALUE_FILTER_ACTION_SPAMCHECK ) + { + this->action = action; + } + else + { + kdError() << "FilterSetupItem::setAction: Invalid parameter for action given. Parameter: " << action << endl; + this->action = DEFAULT_FILTER_ACTION; + return; + } + + //update the text of the rule column + updateActionColumn(); +} + +void FilterSetupItem::save( ) +{ + //build group name + QString group; + group = QString( "%1%2" ).arg( CONFIG_GROUP_FILTER ).arg( number ); + + //first delete the group to clear it of old criteria entries + config->deleteGroup( group ); + + //set group + config->setGroup( group ); + + //write entries + config->writeEntry( CONFIG_ENTRY_FILTER_NAME, name ); + + if( linkage == CONFIG_VALUE_FILTER_CRITERIA_LINKAGE_MATCH_ALL || + linkage == CONFIG_VALUE_FILTER_CRITERIA_LINKAGE_MATCH_ANY ) + { + config->writeEntry( CONFIG_ENTRY_FILTER_CRITERIA_LINKAGE, linkage ); + } + else + { + config->writeEntry( CONFIG_ENTRY_FILTER_CRITERIA_LINKAGE, DEFAULT_FILTER_CRITERIA_LINKAGE ); + } + + if( action == CONFIG_VALUE_FILTER_ACTION_PASS || + action == CONFIG_VALUE_FILTER_ACTION_DELETE || + action == CONFIG_VALUE_FILTER_ACTION_MARK || + action == CONFIG_VALUE_FILTER_ACTION_MOVE || + action == CONFIG_VALUE_FILTER_ACTION_IGNORE || + action == CONFIG_VALUE_FILTER_ACTION_SPAMCHECK ) + { + config->writeEntry( CONFIG_ENTRY_FILTER_ACTION, action ); + } + else + { + config->writeEntry( CONFIG_ENTRY_FILTER_ACTION, DEFAULT_FILTER_ACTION ); + } + + //write action parameter + switch( action ) + { + case CONFIG_VALUE_FILTER_ACTION_MOVE : + config->writeEntry( CONFIG_ENTRY_FILTER_MOVE_MAILBOX, mailbox ); + break; + + default: break; + } + + //write criteria list and number of criterias + if( !criteriaList.empty() ) + { + config->writeEntry( CONFIG_ENTRY_FILTER_CRITERIA_NUMBER, criteriaList.size() ); + + int ctr = 0; //number of the current criteria + FilterCriteriaList_Type::iterator it; + for( it = criteriaList.begin(); it != criteriaList.end(); ++it ) + { + ctr++; + + config->writeEntry( QString( "%1%2" ).arg( CONFIG_ENTRY_FILTER_CRITERIA_SOURCE ).arg( ctr ), (*it).source ); + config->writeEntry( QString( "%1%2" ).arg( CONFIG_ENTRY_FILTER_CRITERIA_CONDITION ).arg( ctr ), (*it).condition ); + + switch( (*it).source ) + { + case CONFIG_VALUE_FILTER_CRITERIA_SOURCE_FROM : + case CONFIG_VALUE_FILTER_CRITERIA_SOURCE_TO : + case CONFIG_VALUE_FILTER_CRITERIA_SOURCE_SUBJECT : + case CONFIG_VALUE_FILTER_CRITERIA_SOURCE_HEADER : + case CONFIG_VALUE_FILTER_CRITERIA_SOURCE_ACCOUNT : config->writeEntry( QString( "%1%2" ).arg( CONFIG_ENTRY_FILTER_CRITERIA_VALUE ).arg( ctr ), (*it).txtValue ); + config->writeEntry( QString( "%1%2" ).arg( CONFIG_ENTRY_FILTER_CRITERIA_CASESENSITIVE ).arg( ctr ), (*it).cs ); + break; + + case CONFIG_VALUE_FILTER_CRITERIA_SOURCE_SIZE : config->writeEntry( QString( "%1%2" ).arg( CONFIG_ENTRY_FILTER_CRITERIA_VALUE ).arg( ctr ), (*it).numValue ); + break; + } + } + } + else + { + config->writeEntry( CONFIG_ENTRY_FILTER_CRITERIA_NUMBER, 0 ); + } + +} + +void FilterSetupItem::setCriteriaLinkage( int linkage ) +{ + if( linkage == CONFIG_VALUE_FILTER_CRITERIA_LINKAGE_MATCH_ALL || + linkage == CONFIG_VALUE_FILTER_CRITERIA_LINKAGE_MATCH_ANY ) + { + this->linkage = linkage; + } + else + { + kdError() << "FilterSetupItem::setCriteriaLinkage: Invalid parameter for criteria linkage given. Parameter: " << linkage << endl; + this->linkage = DEFAULT_FILTER_CRITERIA_LINKAGE; + return; + } + +} + +void FilterSetupItem::setCriteriaList( FilterCriteriaList_Type list ) +{ + criteriaList = list; +} + +void FilterSetupItem::setMailBox( QString mailbox ) +{ + this->mailbox = mailbox; + + //update the text of the rule column + updateActionColumn(); +} + +int FilterSetupItem::getCriteriaLinkage( ) const +{ + return linkage; +} + +int FilterSetupItem::getAction( ) const +{ + return action; +} + +QString FilterSetupItem::getMailBox( ) const +{ + if( action == CONFIG_VALUE_FILTER_ACTION_MOVE ) + return mailbox; + else + return QString( "" ); +} + +FilterCriteriaList_Type FilterSetupItem::getCriteriaList( ) const +{ + return criteriaList; +} + +uint FilterSetupItem::getNumber( ) const +{ + return number; +} + +int FilterSetupItem::compare( QListViewItem * i, int col, bool ascending ) const +{ + if( col == ColNumber ) + { + return text( ColNumber ).toInt() - i->text( ColNumber ).toInt(); + } + else + return key( col, ascending ).compare( i->key( col, ascending) ); + +} + +void FilterSetupItem::updateActionColumn( ) +{ + QString strAction; //filter action + + //build action + switch( action ) + { + case CONFIG_VALUE_FILTER_ACTION_PASS : strAction = i18n( "Show" ); break; + case CONFIG_VALUE_FILTER_ACTION_DELETE : strAction = i18n( "Delete" ); break; + case CONFIG_VALUE_FILTER_ACTION_MARK : strAction = i18n( "Mark" ); break; + case CONFIG_VALUE_FILTER_ACTION_MOVE : strAction = i18n( "Move to %1").arg( mailbox ); break; + case CONFIG_VALUE_FILTER_ACTION_IGNORE : strAction = i18n( "Ignore"); break; + case CONFIG_VALUE_FILTER_ACTION_SPAMCHECK : strAction = i18n( "Check for spam" ); break; + default : strAction = i18n( "Unknown action" ); break; + } + + //set text + setText( ColAction, QString( " %1" ).arg( strAction ) ); +} + +void FilterSetupItem::load( ) +{ + //set group + config->setGroup( QString( "%1%2" ).arg( CONFIG_GROUP_FILTER ).arg( number ) ); + + //get name + setName( config->readEntry( CONFIG_ENTRY_FILTER_NAME, DEFAULT_FILTER_NAME ) ); + + //get linkage + setCriteriaLinkage( config->readNumEntry( CONFIG_ENTRY_FILTER_CRITERIA_LINKAGE, DEFAULT_FILTER_CRITERIA_LINKAGE ) ); + if( linkage != CONFIG_VALUE_FILTER_CRITERIA_LINKAGE_MATCH_ALL && linkage != CONFIG_VALUE_FILTER_CRITERIA_LINKAGE_MATCH_ANY ) + setCriteriaLinkage( DEFAULT_FILTER_CRITERIA_LINKAGE ); + + //get action + setAction( config->readNumEntry( CONFIG_ENTRY_FILTER_ACTION, DEFAULT_FILTER_ACTION ) ); + if( action != CONFIG_VALUE_FILTER_ACTION_PASS && + action != CONFIG_VALUE_FILTER_ACTION_DELETE && + action != CONFIG_VALUE_FILTER_ACTION_MARK && + action != CONFIG_VALUE_FILTER_ACTION_MOVE && + action != CONFIG_VALUE_FILTER_ACTION_IGNORE && + action != CONFIG_VALUE_FILTER_ACTION_SPAMCHECK ) + setAction( DEFAULT_FILTER_ACTION ); + + //get action parameter + switch( action ) + { + case CONFIG_VALUE_FILTER_ACTION_MOVE : setMailBox( config->readEntry( CONFIG_ENTRY_FILTER_MOVE_MAILBOX, DEFAULT_FILTER_ACTION_MOVE_MAILBOX ) ); break; + default : setMailBox( QString::null ); + } + + //get number of criterias + uint numCrit = config->readNumEntry( CONFIG_ENTRY_FILTER_CRITERIA_NUMBER, 0 ); + + //get criterias + for( uint ctr = 1; ctr <= numCrit; ctr++ ) + { + struct FilterCriteria_Type crit; + + crit.source = config->readNumEntry( QString( "%1%2" ).arg( CONFIG_ENTRY_FILTER_CRITERIA_SOURCE ).arg( ctr ), DEFAULT_FILTER_CRITERIA_SOURCE ); + if( crit.source != CONFIG_VALUE_FILTER_CRITERIA_SOURCE_FROM && + crit.source != CONFIG_VALUE_FILTER_CRITERIA_SOURCE_TO && + crit.source != CONFIG_VALUE_FILTER_CRITERIA_SOURCE_SUBJECT && + crit.source != CONFIG_VALUE_FILTER_CRITERIA_SOURCE_HEADER && + crit.source != CONFIG_VALUE_FILTER_CRITERIA_SOURCE_ACCOUNT && + crit.source != CONFIG_VALUE_FILTER_CRITERIA_SOURCE_SIZE ) + crit.source = DEFAULT_FILTER_CRITERIA_SOURCE; + + switch( crit.source ) + { + case CONFIG_VALUE_FILTER_CRITERIA_SOURCE_SIZE : crit.condition = config->readNumEntry( QString( "%1%2" ).arg( CONFIG_ENTRY_FILTER_CRITERIA_CONDITION ).arg( ctr ), DEFAULT_FILTER_CRITERIA_COND_NUM ); + if( crit.condition != CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_EQUAL && + crit.condition != CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_NOT_EQUAL && + crit.condition != CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_GREATER && + crit.condition != CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_GREATER_EQUAL && + crit.condition != CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_LESS && + crit.condition != CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_LESS_EQUAL ) + crit.condition = DEFAULT_FILTER_CRITERIA_COND_NUM; + crit.numValue = config->readNumEntry( QString( "%1%2" ).arg( CONFIG_ENTRY_FILTER_CRITERIA_VALUE ).arg( ctr ), DEFAULT_FILTER_CRITERIA_SIZE ); + break; + + default : crit.condition = config->readNumEntry( QString( "%1%2" ).arg( CONFIG_ENTRY_FILTER_CRITERIA_CONDITION ).arg( ctr ), DEFAULT_FILTER_CRITERIA_COND_TEXT ); + if( crit.condition != CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_CONTAINS && + crit.condition != CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_NOT_CONTAINS && + crit.condition != CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_EQUALS && + crit.condition != CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_NOT_EQUALS && + crit.condition != CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_REGEXPR && + crit.condition != CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_NOT_REGEXPR ) + crit.condition = DEFAULT_FILTER_CRITERIA_COND_TEXT; + crit.txtValue = config->readEntry( QString( "%1%2" ).arg( CONFIG_ENTRY_FILTER_CRITERIA_VALUE ).arg( ctr ) ); + crit.cs = config->readBoolEntry( QString( "%1%2" ).arg( CONFIG_ENTRY_FILTER_CRITERIA_CASESENSITIVE ).arg( ctr ), DEFAULT_FILTER_CRITERIA_CASE_SENSITIVE ); + break; + } + + criteriaList.push_back( crit ); + + } + + +} + + + |