You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
kshowmail/kshowmail/kcmconfigs/filtersetupitem.cpp

348 lines
12 KiB

//
// 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( TDEListView* parent )
: TDEListViewItem( parent )
{
//set default number
number = 0;
init();
}
FilterSetupItem::FilterSetupItem( TDEListView* parent, uint num )
: TDEListViewItem( parent )
{
//store the given filter number
number = num;
init();
}
FilterSetupItem::~FilterSetupItem()
{
}
void FilterSetupItem::init( )
{
//get application config object (kshowmailrc)
config = TDEApplication::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, TQString("%1").arg( number ) );
}
void FilterSetupItem::setName( TQString name )
{
this->name = name;
//show name in the list view
setText( ColName, name );
}
TQString FilterSetupItem::getName( ) const
{
return name;
}
void FilterSetupItem::setNumber( uint number )
{
this->number = number;
//show number in column
setText( ColNumber, TQString("%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
TQString group;
group = TQString( "%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( TQString( "%1%2" ).arg( CONFIG_ENTRY_FILTER_CRITERIA_SOURCE ).arg( ctr ), (*it).source );
config->writeEntry( TQString( "%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( TQString( "%1%2" ).arg( CONFIG_ENTRY_FILTER_CRITERIA_VALUE ).arg( ctr ), (*it).txtValue );
config->writeEntry( TQString( "%1%2" ).arg( CONFIG_ENTRY_FILTER_CRITERIA_CASESENSITIVE ).arg( ctr ), (*it).cs );
break;
case CONFIG_VALUE_FILTER_CRITERIA_SOURCE_SIZE : config->writeEntry( TQString( "%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( TQString mailbox )
{
this->mailbox = mailbox;
//update the text of the rule column
updateActionColumn();
}
int FilterSetupItem::getCriteriaLinkage( ) const
{
return linkage;
}
int FilterSetupItem::getAction( ) const
{
return action;
}
TQString FilterSetupItem::getMailBox( ) const
{
if( action == CONFIG_VALUE_FILTER_ACTION_MOVE )
return mailbox;
else
return TQString( "" );
}
FilterCriteriaList_Type FilterSetupItem::getCriteriaList( ) const
{
return criteriaList;
}
uint FilterSetupItem::getNumber( ) const
{
return number;
}
int FilterSetupItem::compare( TQListViewItem * 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( )
{
TQString 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, TQString( " %1" ).arg( strAction ) );
}
void FilterSetupItem::load( )
{
//set group
config->setGroup( TQString( "%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( TQString::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( TQString( "%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( TQString( "%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( TQString( "%1%2" ).arg( CONFIG_ENTRY_FILTER_CRITERIA_VALUE ).arg( ctr ), DEFAULT_FILTER_CRITERIA_SIZE );
break;
default : crit.condition = config->readNumEntry( TQString( "%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( TQString( "%1%2" ).arg( CONFIG_ENTRY_FILTER_CRITERIA_VALUE ).arg( ctr ) );
crit.cs = config->readBoolEntry( TQString( "%1%2" ).arg( CONFIG_ENTRY_FILTER_CRITERIA_CASESENSITIVE ).arg( ctr ), DEFAULT_FILTER_CRITERIA_CASE_SENSITIVE );
break;
}
criteriaList.push_back( crit );
}
}