00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include "urpoprocess.h"
00024 #include "urpoconnection.h"
00025 #include <QTimer>
00026
00027
00028 int const UrpoProcess::DEFAULTTIMEOUT;
00029
00030 UrpoProcess::UrpoProcess(QObject* parent) :
00031 QObject(parent)
00032 {
00033 status_ = Ready;
00034 error_ = NoError;
00035 setTimeout( DEFAULTTIMEOUT );
00036 }
00037
00038 void UrpoProcess::terminate()
00039 {
00040 fail(Cancelled);
00041 }
00042
00043 QStringList UrpoProcess::getOutput()
00044 {
00045 return output_;
00046 }
00047
00048 void UrpoProcess::fail(UrpoError error)
00049 {
00050 status_=Failed;
00051 error_=error;
00052 qprocess_.terminate();
00053 emit finished(false);
00054 sendDebugMessage( getErrorString() );
00055 }
00056
00057
00058 void UrpoProcess::timeout()
00059 {
00060
00061 if( status_ == Running)
00062 fail(Timeout);
00063 }
00064
00065 void UrpoProcess::start(const QString &command)
00066 {
00067 sendDebugMessage(QString("[Running command %1 ]").arg(command));
00068
00069
00070 connect( &qprocess_, SIGNAL(finished(int,QProcess::ExitStatus)), this, SLOT(processFinished(int,QProcess::ExitStatus)));
00071
00072
00073
00074 QTimer::singleShot( getTimeout(), this, SLOT(timeout()) );
00075
00076
00077 status_ = Running;
00078
00079 qprocess_.start(command);
00080
00081 }
00082
00083 void UrpoProcess::processFinished(int exitCode,QProcess::ExitStatus exitStatus)
00084 {
00085 if( exitCode)
00086 {
00087 sendDebugMessage( QString( tr("Process exited with code %1") ).arg(exitCode));
00088
00089 QByteArray newData = qprocess_.readAllStandardError();
00090 sendDebugMessage( QString(newData) );
00091
00092 fail(ConnectionError);
00093 }
00094 else if( exitStatus == QProcess::CrashExit)
00095
00096 fail(ProcessError);
00097 else
00098 {
00099
00100 QByteArray bytes = qprocess_.readAllStandardOutput();
00101 QString string(bytes);
00102 sendDebugMessage(string);
00103
00104 output_=string.split("\n");
00105 status_=Successed;
00106 emit finished(true);
00107 }
00108 }
00109
00110 QString UrpoProcess::getErrorString() const
00111 {
00112 switch( getError() )
00113 {
00114 case NoError:
00115 return QString();
00116 case ProcessError:
00117 return tr("External program calling error");
00118 case ConnectionError:
00119 return tr("Connection error");
00120 case AuthError:
00121 return tr("Authentication error");
00122 case Timeout:
00123 return tr("Time out");
00124 case Cancelled:
00125 return tr("User cancelled");
00126 }
00127 return QString();
00128 }
00129
00130