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.
237 lines
8.2 KiB
237 lines
8.2 KiB
//
|
|
// C++ Implementation: configspamcheck
|
|
//
|
|
// Description:
|
|
//
|
|
//
|
|
// Author: Ulrich Weigelt <ulrich.weigelt@gmx.de>, (C) 2008
|
|
//
|
|
// Copyright: See COPYING file that comes with this distribution
|
|
//
|
|
//
|
|
#include "configspamcheck.h"
|
|
|
|
|
|
typedef KGenericFactory<ConfigSpamcheck, TQWidget> ConfigSpamcheckFactory;
|
|
|
|
K_EXPORT_COMPONENT_FACTORY( kcm_kshowmailconfigspamcheck, ConfigSpamcheckFactory(
|
|
"kcm_kshowmailconfigspamcheck" ) );
|
|
|
|
|
|
ConfigSpamcheck::ConfigSpamcheck(TQWidget * parent, const char * name, const TQStringList & args)
|
|
: TDECModule( ConfigSpamcheckFactory::instance(), parent, args )
|
|
{
|
|
//set the module name
|
|
if ( !name )
|
|
setName( "configfilter" );
|
|
|
|
//build GUI
|
|
//---------
|
|
|
|
//main layout
|
|
TQVBoxLayout* layMain = new TQVBoxLayout( this, 0, 10 );
|
|
|
|
//description
|
|
TQLabel* lblDescription = new TQLabel( this, "lblDescription" );
|
|
lblDescription->setAlignment( TQt::WordBreak );
|
|
lblDescription->setText( TQString( "<i>%1</i>" ).arg( i18n( "KShowmail uses SpamAssassin to check the mails for spam. You have to install, configure and start the SpamAssassin daemon, before you can use this service." ) ) );
|
|
lblDescription->setSizePolicy( TQSizePolicy::Expanding, TQSizePolicy::Maximum );
|
|
layMain->addWidget( lblDescription );
|
|
|
|
//Test button
|
|
btnTest = new KPushButton( KStdGuiItem::test(), this, "btnTest" );
|
|
btnTest->setSizePolicy( TQSizePolicy::Maximum, TQSizePolicy::Maximum );
|
|
layMain->addWidget( btnTest );
|
|
connect( btnTest, SIGNAL( clicked() ), this, SLOT( slotTestSpamAssassin() ) );
|
|
|
|
//action
|
|
gboxAction = new TQGroupBox( 0, TQt::Horizontal, i18n( "Action for Spam" ), this, "gboxAction" );
|
|
TQHBoxLayout* layAction = new TQHBoxLayout( gboxAction->layout(), 10 );
|
|
layMain->addWidget( gboxAction );
|
|
|
|
cmbAction = new KComboBox( gboxAction, "cmbAction" );
|
|
layAction->addWidget( cmbAction );
|
|
TQToolTip::add( cmbAction, i18n( "Choose the action for spam mails." ) );
|
|
connect( cmbAction, SIGNAL( activated( int ) ), this, SLOT( slotActionChanged( int ) ) );
|
|
connect( cmbAction, SIGNAL( activated( int ) ), this, SLOT( slotChanged() ) );
|
|
|
|
//insert items
|
|
cmbAction->insertItem( i18n( "Delete" ), ID_SPAM_ACTION_BUTTONS_DELETE );
|
|
cmbAction->insertItem( i18n( "Mark" ), ID_SPAM_ACTION_BUTTONS_MARK );
|
|
cmbAction->insertItem( i18n( "Move" ), ID_SPAM_ACTION_BUTTONS_MOVE );
|
|
|
|
//create edit line to defined the mailbox for move
|
|
txtMailbox = new KLineEdit( gboxAction );
|
|
layAction->addWidget( txtMailbox );
|
|
connect( txtMailbox, SIGNAL( textChanged( const TQString & ) ), this, SLOT( slotChanged() ) );
|
|
|
|
//create wizard button to configure mailbox
|
|
btnMailboxWizard= new KPushButton( KGuiItem( TQString::null, "wizard" ), gboxAction );
|
|
layAction->addWidget( btnMailboxWizard );
|
|
TQToolTip::add( btnMailboxWizard, i18n( "Choose the mailbox" ) );
|
|
connect( btnMailboxWizard, SIGNAL( clicked() ), this, SLOT( slotOpenMailBoxWizard() ) );
|
|
|
|
//set defaults
|
|
switch( DEFAULT_SPAMCHECK_ACTION )
|
|
{
|
|
case CONFIG_VALUE_SPAMCHECK_ACTION_DELETE : cmbAction->setCurrentItem( ID_SPAM_ACTION_BUTTONS_DELETE ); break;
|
|
case CONFIG_VALUE_SPAMCHECK_ACTION_MARK : cmbAction->setCurrentItem( ID_SPAM_ACTION_BUTTONS_MARK ); break;
|
|
case CONFIG_VALUE_SPAMCHECK_ACTION_MOVE : cmbAction->setCurrentItem( ID_SPAM_ACTION_BUTTONS_MOVE ); break;
|
|
}
|
|
|
|
txtMailbox->setText( DEFAULT_SPAMCHECK_ACTION_MOVE_MAILBOX );
|
|
|
|
//enable or disable widgets
|
|
slotActionChanged( cmbAction->currentItem() );
|
|
gboxAction->setEnabled( isSpamAssassinRunning() );
|
|
|
|
//get application config object (kshowmailrc)
|
|
config = TDEApplication::kApplication()->config();
|
|
|
|
//load configured values
|
|
load();
|
|
}
|
|
|
|
ConfigSpamcheck::~ConfigSpamcheck()
|
|
{
|
|
}
|
|
|
|
void ConfigSpamcheck::load()
|
|
{
|
|
config->setGroup( CONFIG_GROUP_SPAMCHECK );
|
|
|
|
//load action
|
|
switch( config->readNumEntry( CONFIG_ENTRY_SPAMCHECK_ACTION, DEFAULT_SPAMCHECK_ACTION ) )
|
|
{
|
|
case CONFIG_VALUE_SPAMCHECK_ACTION_DELETE : cmbAction->setCurrentItem( ID_SPAM_ACTION_BUTTONS_DELETE ); break;
|
|
case CONFIG_VALUE_SPAMCHECK_ACTION_MARK : cmbAction->setCurrentItem( ID_SPAM_ACTION_BUTTONS_MARK ); break;
|
|
case CONFIG_VALUE_SPAMCHECK_ACTION_MOVE : cmbAction->setCurrentItem( ID_SPAM_ACTION_BUTTONS_MOVE ); break;
|
|
}
|
|
|
|
//get mailbox name
|
|
if( config->readNumEntry( CONFIG_ENTRY_SPAMCHECK_ACTION, DEFAULT_SPAMCHECK_ACTION ) == CONFIG_VALUE_SPAMCHECK_ACTION_MOVE )
|
|
txtMailbox->setText( config->readEntry( CONFIG_ENTRY_SPAMCHECK_MOVE_MAILBOX, DEFAULT_SPAMCHECK_ACTION_MOVE_MAILBOX ) );
|
|
else
|
|
txtMailbox->clear();
|
|
|
|
//enable or disable widgets for other action
|
|
slotActionChanged( cmbAction->currentItem() );
|
|
}
|
|
|
|
void ConfigSpamcheck::defaults()
|
|
{
|
|
switch( DEFAULT_SPAMCHECK_ACTION )
|
|
{
|
|
case CONFIG_VALUE_SPAMCHECK_ACTION_DELETE : cmbAction->setCurrentItem( ID_SPAM_ACTION_BUTTONS_DELETE ); break;
|
|
case CONFIG_VALUE_SPAMCHECK_ACTION_MARK : cmbAction->setCurrentItem( ID_SPAM_ACTION_BUTTONS_MARK ); break;
|
|
case CONFIG_VALUE_SPAMCHECK_ACTION_MOVE : cmbAction->setCurrentItem( ID_SPAM_ACTION_BUTTONS_MOVE ); break;
|
|
}
|
|
|
|
if( DEFAULT_SPAMCHECK_ACTION == CONFIG_VALUE_SPAMCHECK_ACTION_MOVE )
|
|
txtMailbox->setText( TQString( DEFAULT_SPAMCHECK_ACTION_MOVE_MAILBOX ) );
|
|
else
|
|
txtMailbox->clear();
|
|
|
|
//enable or disable widgets for other action
|
|
slotActionChanged( cmbAction->currentItem() );
|
|
|
|
slotChanged();
|
|
}
|
|
|
|
void ConfigSpamcheck::save()
|
|
{
|
|
config->setGroup( CONFIG_GROUP_SPAMCHECK );
|
|
|
|
//save action
|
|
switch( cmbAction->currentItem() )
|
|
{
|
|
case ID_SPAM_ACTION_BUTTONS_DELETE : config->writeEntry( CONFIG_ENTRY_SPAMCHECK_ACTION, CONFIG_VALUE_SPAMCHECK_ACTION_DELETE ); break;
|
|
case ID_SPAM_ACTION_BUTTONS_MARK : config->writeEntry( CONFIG_ENTRY_SPAMCHECK_ACTION, CONFIG_VALUE_SPAMCHECK_ACTION_MARK ); break;
|
|
case ID_SPAM_ACTION_BUTTONS_MOVE : config->writeEntry( CONFIG_ENTRY_SPAMCHECK_ACTION, CONFIG_VALUE_SPAMCHECK_ACTION_MOVE ); break;
|
|
default : config->writeEntry( CONFIG_ENTRY_SPAMCHECK_ACTION, DEFAULT_SPAMCHECK_ACTION ); break;
|
|
}
|
|
|
|
//save mailbox name
|
|
if( cmbAction->currentItem() == ID_SPAM_ACTION_BUTTONS_MOVE )
|
|
{
|
|
config->writeEntry( CONFIG_ENTRY_SPAMCHECK_MOVE_MAILBOX, txtMailbox->text() );
|
|
}
|
|
else
|
|
{
|
|
config->deleteEntry( CONFIG_ENTRY_SPAMCHECK_MOVE_MAILBOX );
|
|
}
|
|
|
|
config->sync();
|
|
}
|
|
|
|
void ConfigSpamcheck::slotChanged()
|
|
{
|
|
TDECModule::changed();
|
|
}
|
|
|
|
void ConfigSpamcheck::slotActionChanged( int index )
|
|
{
|
|
switch( index )
|
|
{
|
|
case ID_SPAM_ACTION_BUTTONS_MOVE : txtMailbox->setEnabled( true );
|
|
if( txtMailbox->text() == "" )
|
|
txtMailbox->setText( DEFAULT_FILTER_ACTION_MOVE_MAILBOX );
|
|
btnMailboxWizard->setHidden( false );
|
|
break;
|
|
default : txtMailbox->setEnabled( false );
|
|
btnMailboxWizard->setHidden( true );
|
|
break;
|
|
}
|
|
}
|
|
|
|
void ConfigSpamcheck::slotOpenMailBoxWizard( )
|
|
{
|
|
MailBoxWizard wizard( this, "malboxwizard" );
|
|
wizard.setCaption( i18n( "Mailbox Select" ) );
|
|
int res = wizard.exec();
|
|
|
|
if( res == TQDialog::Accepted )
|
|
txtMailbox->setText( wizard.getPath() );
|
|
}
|
|
|
|
bool ConfigSpamcheck::isSpamAssassinRunning( ) const
|
|
{
|
|
FILE *read_fp;
|
|
char buffer[ BUFSIZ + 1 ];
|
|
int chars_read;
|
|
bool found = false;
|
|
|
|
memset( buffer, '\0', sizeof( buffer ) );
|
|
read_fp = popen( "ps -eo comm", "r" );
|
|
if( read_fp != NULL )
|
|
{
|
|
chars_read = fread( buffer, sizeof( char ), BUFSIZ, read_fp );
|
|
while( chars_read > 0 )
|
|
{
|
|
buffer[ chars_read - 1 ] = '\0';
|
|
TQString output( buffer );
|
|
found = output.contains( NAME_SPAMASSASSIN_DAEMON ) > 0;
|
|
chars_read = fread( buffer, sizeof( char ), BUFSIZ, read_fp );
|
|
}
|
|
pclose( read_fp );
|
|
}
|
|
|
|
return found;
|
|
}
|
|
|
|
void ConfigSpamcheck::slotTestSpamAssassin( )
|
|
{
|
|
if( isSpamAssassinRunning() )
|
|
{
|
|
KMessageBox::information( this, i18n( "SpamAssassin is running." ), i18n( "Check for SpamAssassin" ) );
|
|
gboxAction->setEnabled( true );
|
|
}
|
|
else
|
|
{
|
|
KMessageBox::information( this, i18n( "SpamAssassin is not running." ), i18n( "Check for SpamAssassin" ) );
|
|
gboxAction->setEnabled( false );
|
|
}
|
|
}
|
|
|
|
#include "configspamcheck.moc"
|