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