// kmfilteraction.cpp // The process methods really should use an enum instead of an int // -1 -> status unchanged, 0 -> success, 1 -> failure, 2-> critical failure // (GoOn), (Ok), (ErrorButGoOn), (CriticalError) #ifdef HAVE_CONFIG_H #include #endif #include "kmfilteraction.h" #include "kmcommands.h" #include "kmmsgpart.h" #include "kmfiltermgr.h" #include "kmfolderindex.h" #include "kmfoldermgr.h" #include "kmsender.h" #include #include #include #include #include using KPIM::CollectingProcess; #include "kmfawidgets.h" #include "kmfoldercombobox.h" #include "kmmsgbase.h" #include "messageproperty.h" #include "actionscheduler.h" using KMail::MessageProperty; using KMail::ActionScheduler; #include #include #include #include #include #include #include #include #include #include #include #include #include //============================================================================= // // KMFilterAction // //============================================================================= KMFilterAction::KMFilterAction( const char* aName, const QString aLabel ) { mName = aName; mLabel = aLabel; } KMFilterAction::~KMFilterAction() { } void KMFilterAction::processAsync(KMMessage* msg) const { ActionScheduler *handler = MessageProperty::filterHandler( msg ); ReturnCode result = process( msg ); if (handler) handler->actionMessage( result ); } bool KMFilterAction::requiresBody(KMMsgBase*) const { return true; } KMFilterAction* KMFilterAction::newAction() { return 0; } QWidget* KMFilterAction::createParamWidget(QWidget* parent) const { return new QWidget(parent); } void KMFilterAction::applyParamWidgetValue(QWidget*) { } void KMFilterAction::setParamWidgetValue( QWidget * ) const { } void KMFilterAction::clearParamWidget( QWidget * ) const { } bool KMFilterAction::folderRemoved(KMFolder*, KMFolder*) { return FALSE; } int KMFilterAction::tempOpenFolder(KMFolder* aFolder) { return kmkernel->filterMgr()->tempOpenFolder(aFolder); } void KMFilterAction::sendMDN( KMMessage * msg, KMime::MDN::DispositionType d, const QValueList & m ) { if ( !msg ) return; KMMessage * mdn = msg->createMDN( KMime::MDN::AutomaticAction, d, false, m ); if ( mdn && !kmkernel->msgSender()->send( mdn, FALSE ) ) { kdDebug(5006) << "KMFilterAction::sendMDN(): sending failed." << endl; //delete mdn; } } //============================================================================= // // KMFilterActionWithNone // //============================================================================= KMFilterActionWithNone::KMFilterActionWithNone( const char* aName, const QString aLabel ) : KMFilterAction( aName, aLabel ) { } //============================================================================= // // KMFilterActionWithUOID // //============================================================================= KMFilterActionWithUOID::KMFilterActionWithUOID( const char* aName, const QString aLabel ) : KMFilterAction( aName, aLabel ), mParameter( 0 ) { } void KMFilterActionWithUOID::argsFromString( const QString argsStr ) { mParameter = argsStr.stripWhiteSpace().toUInt(); } const QString KMFilterActionWithUOID::argsAsString() const { return QString::number( mParameter ); } //============================================================================= // // KMFilterActionWithString // //============================================================================= KMFilterActionWithString::KMFilterActionWithString( const char* aName, const QString aLabel ) : KMFilterAction( aName, aLabel ) { } QWidget* KMFilterActionWithString::createParamWidget( QWidget* parent ) const { QLineEdit *le = new KLineEdit(parent); le->setText( mParameter ); return le; } void KMFilterActionWithString::applyParamWidgetValue( QWidget* paramWidget ) { mParameter = ((QLineEdit*)paramWidget)->text(); } void KMFilterActionWithString::setParamWidgetValue( QWidget* paramWidget ) const { ((QLineEdit*)paramWidget)->setText( mParameter ); } void KMFilterActionWithString::clearParamWidget( QWidget* paramWidget ) const { ((QLineEdit*)paramWidget)->clear(); } void KMFilterActionWithString::argsFromString( const QString argsStr ) { mParameter = argsStr; } const QString KMFilterActionWithString::argsAsString() const { return mParameter; } //============================================================================= // // class KMFilterActionWithStringList // //============================================================================= KMFilterActionWithStringList::KMFilterActionWithStringList( const char* aName, const QString aLabel ) : KMFilterActionWithString( aName, aLabel ) { } QWidget* KMFilterActionWithStringList::createParamWidget( QWidget* parent ) const { QComboBox *cb = new QComboBox( FALSE, parent ); cb->insertStringList( mParameterList ); setParamWidgetValue( cb ); return cb; } void KMFilterActionWithStringList::applyParamWidgetValue( QWidget* paramWidget ) { mParameter = ((QComboBox*)paramWidget)->currentText(); } void KMFilterActionWithStringList::setParamWidgetValue( QWidget* paramWidget ) const { int idx = mParameterList.findIndex( mParameter ); ((QComboBox*)paramWidget)->setCurrentItem( idx >= 0 ? idx : 0 ); } void KMFilterActionWithStringList::clearParamWidget( QWidget* paramWidget ) const { ((QComboBox*)paramWidget)->setCurrentItem(0); } void KMFilterActionWithStringList::argsFromString( const QString argsStr ) { int idx = mParameterList.findIndex( argsStr ); if ( idx < 0 ) { mParameterList.append( argsStr ); idx = mParameterList.count() - 1; } mParameter = *mParameterList.at( idx ); } //============================================================================= // // class KMFilterActionWithFolder // //============================================================================= KMFilterActionWithFolder::KMFilterActionWithFolder( const char* aName, const QString aLabel ) : KMFilterAction( aName, aLabel ) { mFolder = 0; } QWidget* KMFilterActionWithFolder::createParamWidget( QWidget* parent ) const { KMFolderComboBox *cb = new KMFolderComboBox( parent ); cb->showImapFolders( false ); setParamWidgetValue( cb ); return cb; } void KMFilterActionWithFolder::applyParamWidgetValue( QWidget* paramWidget ) { mFolder = ((KMFolderComboBox *)paramWidget)->getFolder(); if (mFolder) { mFolderName = QString::null; } else { mFolderName = ((KMFolderComboBox *)paramWidget)->currentText(); } } void KMFilterActionWithFolder::setParamWidgetValue( QWidget* paramWidget ) const { if ( mFolder ) ((KMFolderComboBox *)paramWidget)->setFolder( mFolder ); else ((KMFolderComboBox *)paramWidget)->setFolder( mFolderName ); } void KMFilterActionWithFolder::clearParamWidget( QWidget* paramWidget ) const { ((KMFolderComboBox *)paramWidget)->setFolder( kmkernel->draftsFolder() ); } void KMFilterActionWithFolder::argsFromString( const QString argsStr ) { mFolder = kmkernel->folderMgr()->findIdString( argsStr ); if (!mFolder) mFolder = kmkernel->dimapFolderMgr()->findIdString( argsStr ); if (mFolder) mFolderName = QString::null; else mFolderName = argsStr; } const QString KMFilterActionWithFolder::argsAsString() const { QString result; if ( mFolder ) result = mFolder->idString(); else result = mFolderName; return result; } bool KMFilterActionWithFolder::folderRemoved( KMFolder* aFolder, KMFolder* aNewFolder ) { if ( aFolder == mFolder ) { mFolder = aNewFolder; if ( aNewFolder ) mFolderName = QString::null; else mFolderName = i18n( "