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.
214 lines
6.2 KiB
214 lines
6.2 KiB
15 years ago
|
/***************************************************************************
|
||
|
filters.cxx - description
|
||
|
-------------------
|
||
|
begin : Fri Jun 30 2000
|
||
|
copyright : (C) 2000 by Hans Dijkema
|
||
|
email : kmailcvt@hum.org
|
||
|
***************************************************************************/
|
||
|
|
||
|
/***************************************************************************
|
||
|
* *
|
||
|
* This program is free software; you can redistribute it and/or modify *
|
||
|
* it under the terms of the GNU General Public License as published by *
|
||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||
|
* (at your option) any later version. *
|
||
|
* *
|
||
|
***************************************************************************/
|
||
|
|
||
|
#include <kmessagebox.h>
|
||
|
#include <klocale.h>
|
||
|
#include <dcopclient.h>
|
||
|
#include <dcopref.h>
|
||
|
#include <kurl.h>
|
||
|
#include <kdebug.h>
|
||
|
|
||
|
#include "filters.hxx"
|
||
|
#include "kmailcvt.h"
|
||
|
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////////////
|
||
|
//
|
||
|
// The API to the kmailcvt dialog --> Gives the import filter access to
|
||
|
// put information on the dialog.
|
||
|
//
|
||
|
//////////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
bool FilterInfo::s_terminateASAP = false;
|
||
|
|
||
|
FilterInfo::FilterInfo( KImportPageDlg* dlg, QWidget* parent , bool _removeDupMsg)
|
||
|
: m_dlg( dlg ),
|
||
|
m_parent( parent )
|
||
|
{
|
||
|
removeDupMsg = _removeDupMsg;
|
||
|
s_terminateASAP = false;
|
||
|
}
|
||
|
|
||
|
FilterInfo::~FilterInfo()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
void FilterInfo::setStatusMsg( const QString& status )
|
||
|
{
|
||
|
m_dlg->_textStatus->setText( status );
|
||
|
}
|
||
|
|
||
|
void FilterInfo::setFrom( const QString& from )
|
||
|
{
|
||
|
m_dlg->_from->setText( from );
|
||
|
}
|
||
|
|
||
|
void FilterInfo::setTo( const QString& to )
|
||
|
{
|
||
|
m_dlg->_to->setText( to );
|
||
|
}
|
||
|
|
||
|
void FilterInfo::setCurrent( const QString& current )
|
||
|
{
|
||
|
m_dlg->_current->setText( current );
|
||
|
kapp->processEvents();
|
||
|
}
|
||
|
|
||
|
void FilterInfo::setCurrent( int percent )
|
||
|
{
|
||
|
m_dlg->_done_current->setProgress( percent );
|
||
|
kapp->processEvents(); // Be careful - back & finish buttons disabled, so only user event that can happen is cancel/close button
|
||
|
}
|
||
|
|
||
|
void FilterInfo::setOverall( int percent )
|
||
|
{
|
||
|
m_dlg->_done_overall->setProgress( percent );
|
||
|
}
|
||
|
|
||
|
void FilterInfo::addLog( const QString& log )
|
||
|
{
|
||
|
m_dlg->_log->insertItem( log );
|
||
|
m_dlg->_log->setCurrentItem( m_dlg->_log->count() - 1 );
|
||
|
m_dlg->_log->centerCurrentItem();
|
||
|
kapp->processEvents();
|
||
|
}
|
||
|
|
||
|
void FilterInfo::clear()
|
||
|
{
|
||
|
m_dlg->_log->clear();
|
||
|
setCurrent();
|
||
|
setOverall();
|
||
|
setCurrent( QString::null );
|
||
|
setFrom( QString::null );
|
||
|
setTo( QString::null );
|
||
|
}
|
||
|
|
||
|
void FilterInfo::alert( const QString& message )
|
||
|
{
|
||
|
KMessageBox::information( m_parent, message );
|
||
|
}
|
||
|
|
||
|
void FilterInfo::terminateASAP()
|
||
|
{
|
||
|
s_terminateASAP = true;
|
||
|
}
|
||
|
|
||
|
bool FilterInfo::shouldTerminate()
|
||
|
{
|
||
|
return s_terminateASAP;
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////////////
|
||
|
//
|
||
|
// The generic filter class
|
||
|
//
|
||
|
//////////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
|
||
|
Filter::Filter( const QString& name, const QString& author,
|
||
|
const QString& info )
|
||
|
: m_name( name ),
|
||
|
m_author( author ),
|
||
|
m_info( info )
|
||
|
{
|
||
|
//public
|
||
|
count_duplicates = 0;
|
||
|
}
|
||
|
|
||
|
bool Filter::addMessage( FilterInfo* info, const QString& folderName,
|
||
|
const QString& msgPath, const QString & msgStatusFlags)
|
||
|
{
|
||
|
KURL msgURL;
|
||
|
msgURL.setPath( msgPath );
|
||
|
|
||
|
if ( !kapp->dcopClient()->isApplicationRegistered( "kmail" ) )
|
||
|
KApplication::startServiceByDesktopName( "kmail", QString::null ); // Will wait until kmail is started
|
||
|
|
||
|
DCOPReply reply = DCOPRef( "kmail", "KMailIface" ).call( "dcopAddMessage", folderName, msgURL, msgStatusFlags );
|
||
|
|
||
|
if ( !reply.isValid() )
|
||
|
{
|
||
|
info->alert( i18n( "<b>Fatal:</b> Unable to start KMail for DCOP communication. "
|
||
|
"Make sure <i>kmail</i> is installed." ) );
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
switch ( int( reply ) )
|
||
|
{
|
||
|
case -1:
|
||
|
info->alert( i18n( "Cannot make folder %1 in KMail" ).arg( folderName ) );
|
||
|
return false;
|
||
|
case -2:
|
||
|
info->alert( i18n( "Cannot add message to folder %1 in KMail" ).arg( folderName ) );
|
||
|
return false;
|
||
|
case -4:
|
||
|
count_duplicates++;
|
||
|
return false;
|
||
|
case 0:
|
||
|
info->alert( i18n( "Error while adding message to folder %1 in KMail" ).arg( folderName ) );
|
||
|
return false;
|
||
|
}
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
bool Filter::addMessage_fastImport( FilterInfo* info, const QString& folderName,
|
||
|
const QString& msgPath, const QString& msgStatusFlags )
|
||
|
{
|
||
|
KURL msgURL;
|
||
|
msgURL.setPath( msgPath );
|
||
|
|
||
|
if ( !kapp->dcopClient()->isApplicationRegistered( "kmail" ) )
|
||
|
KApplication::startServiceByDesktopName( "kmail", QString::null ); // Will wait until kmail is started
|
||
|
|
||
|
DCOPReply reply = DCOPRef( "kmail", "KMailIface" ).call( "dcopAddMessage_fastImport", folderName, msgURL, msgStatusFlags );
|
||
|
if ( !reply.isValid() )
|
||
|
{
|
||
|
info->alert( i18n( "<b>Fatal:</b> Unable to start KMail for DCOP communication. "
|
||
|
"Make sure <i>kmail</i> is installed." ) );
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
switch ( int( reply ) )
|
||
|
{
|
||
|
case -1:
|
||
|
info->alert( i18n( "Cannot make folder %1 in KMail" ).arg( folderName ) );
|
||
|
return false;
|
||
|
case -2:
|
||
|
info->alert( i18n( "Cannot add message to folder %1 in KMail" ).arg( folderName ) );
|
||
|
return false;
|
||
|
case 0:
|
||
|
info->alert( i18n( "Error while adding message to folder %1 in KMail" ).arg( folderName ) );
|
||
|
return false;
|
||
|
}
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
bool Filter::endImport()
|
||
|
{
|
||
|
if ( !kapp->dcopClient()->isApplicationRegistered( "kmail" ) )
|
||
|
KApplication::startServiceByDesktopName( "kmail", QString::null ); // Will wait until kmail is started
|
||
|
|
||
|
DCOPReply reply = DCOPRef( "kmail", "KMailIface" ).call( "dcopAddMessage", QString::null, QString::null);
|
||
|
if ( !reply.isValid() ) return false;
|
||
|
|
||
|
reply = DCOPRef( "kmail", "KMailIface" ).call( "dcopResetAddMessage" );
|
||
|
if ( !reply.isValid() ) return false;
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
// vim: ts=2 sw=2 et
|