mailtransport
precommandjob.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include "precommandjob.h"
00025
00026 #include <klocale.h>
00027 #include <kdebug.h>
00028 #include <KProcess>
00029
00030 using namespace MailTransport;
00031
00036 class PreCommandJobPrivate
00037 {
00038 public:
00039 KProcess *process;
00040 QString precommand;
00041 };
00042
00043 PrecommandJob::PrecommandJob(const QString & precommand, QObject * parent) :
00044 KJob( parent ), d( new PreCommandJobPrivate )
00045 {
00046 d->precommand = precommand;
00047 d->process = new KProcess( this );
00048 connect( d->process, SIGNAL(started()), SLOT(slotStarted()) );
00049 connect( d->process, SIGNAL(error(QProcess::ProcessError error)),
00050 SLOT(slotError(QProcess::ProcessError error)));
00051 connect( d->process, SIGNAL(finished(int, QProcess::ExitStatus)),
00052 SLOT(slotFinished(int, QProcess::ExitStatus)) );
00053 }
00054
00055 PrecommandJob::~ PrecommandJob()
00056 {
00057 delete d;
00058 }
00059
00060 void PrecommandJob::start()
00061 {
00062 d->process->setShellCommand( d->precommand );
00063 d->process->start();
00064 }
00065
00066 void PrecommandJob::slotStarted()
00067 {
00068 emit infoMessage( this, i18n("Executing precommand"),
00069 i18n("Executing precommand '%1'.", d->precommand ) );
00070 }
00071
00072 void PrecommandJob::slotError( QProcess::ProcessError error)
00073 {
00074 setError( UserDefinedError );
00075 setErrorText( i18n("Could not execute precommand '%1'.", d->precommand ) );
00076 kDebug(5324) << "Execution precommand has failed:" << error;
00077 emitResult();
00078 }
00079
00080 bool PrecommandJob::doKill()
00081 {
00082 delete d->process;
00083 d->process = 0;
00084 return true;
00085 }
00086
00087 void PrecommandJob::slotFinished(int exitCode,
00088 QProcess::ExitStatus exitStatus )
00089 {
00090 if ( exitStatus == QProcess::CrashExit ) {
00091 setError( UserDefinedError );
00092 setErrorText( i18n("The precommand crashed." ));
00093 } else if ( exitCode != 0 ) {
00094 setError( UserDefinedError );
00095 setErrorText( i18n("The precommand exited with code %1.",
00096 d->process->exitStatus()) );
00097 }
00098 emitResult();
00099 }
00100
00101 #include "precommandjob.moc"