ScriptResolver::ScriptResolver( const QString& exe ) : Tomahawk::ExternalResolver( exe ) , m_num_restarts( 0 ) , m_msgsize( 0 ) , m_ready( false ) , m_stopped( true ) , m_configSent( false ) , m_error( Tomahawk::ExternalResolver::NoError ) { tLog() << Q_FUNC_INFO << "Created script resolver:" << exe; connect( &m_proc, SIGNAL( readyReadStandardError() ), SLOT( readStderr() ) ); connect( &m_proc, SIGNAL( readyReadStandardOutput() ), SLOT( readStdout() ) ); connect( &m_proc, SIGNAL( finished( int, QProcess::ExitStatus ) ), SLOT( cmdExited( int, QProcess::ExitStatus ) ) ); QString runPath = filePath(); #ifdef WIN32 // have to enclose in quotes if path contains spaces on windows... runPath = QString( "\"%1\"" ).arg( filePath() ); #endif if ( !QFile::exists( filePath() ) ) m_error = Tomahawk::ExternalResolver::FileNotFound; else m_proc.start( runPath ); if ( !TomahawkUtils::nam() ) return; // set the name to the binary, if we launch properly we'll get the name the resolver reports m_name = QFileInfo( filePath() ).baseName(); sendConfig(); }
ScriptResolver::ScriptResolver( const QString& exe ) : Tomahawk::ExternalResolverGui( exe ) , m_num_restarts( 0 ) , m_msgsize( 0 ) , m_ready( false ) , m_stopped( true ) , m_configSent( false ) , m_deleting( false ) , m_error( Tomahawk::ExternalResolver::NoError ) { tLog() << Q_FUNC_INFO << "Created script resolver:" << exe; connect( &m_proc, SIGNAL( readyReadStandardError() ), SLOT( readStderr() ) ); connect( &m_proc, SIGNAL( readyReadStandardOutput() ), SLOT( readStdout() ) ); connect( &m_proc, SIGNAL( finished( int, QProcess::ExitStatus ) ), SLOT( cmdExited( int, QProcess::ExitStatus ) ) ); startProcess(); if ( !TomahawkUtils::nam() ) return; // set the name to the binary, if we launch properly we'll get the name the resolver reports m_name = QFileInfo( filePath() ).baseName(); // set the icon, if we launch properly we'll get the icon the resolver reports m_icon = TomahawkUtils::defaultPixmap( TomahawkUtils::DefaultResolver, TomahawkUtils::Original, QSize( 128, 128 ) ); }
UserProgram::UserProgram() { QObject::connect(&m_userProgram, SIGNAL(started()), this, SLOT(programStarted())); QObject::connect(&m_userProgram, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(programFinished(int, QProcess::ExitStatus))); QObject::connect(&m_userProgram, SIGNAL(readyReadStandardError()), this, SLOT(readStderr())); QObject::connect(&m_userProgram, SIGNAL(readyReadStandardOutput()), this, SLOT(readStdout())); this->updateProgramName(); }
void readErr() { QByteArray rerr = readStderr(); if (errUsed + rerr.size() > err.size()) err.resize(errUsed + rerr.size()); memcpy(err.data() + errUsed, rerr, rerr.size()); errUsed += rerr.size(); }
GoAstView::GoAstView(IApplication *app, QObject *parent): liteApp(app), QObject(parent) { connect(&astProcess,SIGNAL(readyReadStandardOutput()),this,SLOT(readStdout())); connect(&astProcess,SIGNAL(readyReadStandardError()),this,SLOT(readStderr())); connect(&astProcess,SIGNAL(started()),this,SLOT(started())); connect(&astProcess,SIGNAL(finished(int)),this,SLOT(finished(int))); connect(&astProcess,SIGNAL(error(QProcess::ProcessError)),this,SLOT(error(QProcess::ProcessError))); }
ScriptResolver::ScriptResolver(const QString& exe) : Tomahawk::Resolver() , m_cmd( exe ) , m_num_restarts( 0 ) , m_msgsize( 0 ) , m_ready( false ) , m_stopped( false ) { qDebug() << Q_FUNC_INFO << exe; connect( &m_proc, SIGNAL(readyReadStandardError()), SLOT(readStderr()) ); connect( &m_proc, SIGNAL(readyReadStandardOutput()), SLOT(readStdout()) ); connect( &m_proc, SIGNAL(finished(int,QProcess::ExitStatus)), SLOT(cmdExited(int,QProcess::ExitStatus)) ); m_proc.start( m_cmd ); }
void KviKvsProcessAsyncOperation::processExited(int exitCode) { if(m_bDeletePending) return; readStdout(); // just to make sure readStderr(); // just to make sure if(m_pData->iFlags & KVI_KVS_PROCESSDESCRIPTOR_OUTPUTBYBLOCKS) { // trigger Stdout and Stderr once if(m_pData->iFlags & KVI_KVS_PROCESSDESCRIPTOR_TRIGGERSTDOUT) { if(trigger(EventStdout, m_szStdoutBuffer)) { triggerSelfDelete(); return; } } if(m_pData->iFlags & KVI_KVS_PROCESSDESCRIPTOR_TRIGGERSTDERR) { if(trigger(EventStdout, m_szStderrBuffer)) { triggerSelfDelete(); return; } } } if(m_pData->iFlags & KVI_KVS_PROCESSDESCRIPTOR_TRIGGERTERMINATED) { QString szRetVal; szRetVal.setNum(exitCode); trigger(EventTerminated, szRetVal); } triggerSelfDelete(); }
bool KviKvsProcessAsyncOperation::start() { QStringList args; QString szcmd; if(m_pData->iFlags & KVI_KVS_PROCESSDESCRIPTOR_NOSHELL) { args = m_pData->szCommandline.split(" ", QString::SkipEmptyParts); } else { QString szShell = m_pData->szShell; if(szShell.isEmpty()) { #if defined(COMPILE_ON_WINDOWS) || defined(COMPILE_ON_MINGW) // [01:26:00] <PragmaOff> btw, what is qt_winunicode ? // [01:26:12] <kode54> Qt export specific to win32 // [01:26:27] <kode54> bool which indicates whether system is Unicode (NT) or not // [01:26:58] <kode54> not sure if that's documented, but it is a public export // // [02:50:21] <kode54> if ( QApplication::winVersion() & Qt::WV_NT_based ) // [02:50:41] <kode54> I see another implementation using that, maybe it is the official way of detecting that :[ szShell = !(QSysInfo::WindowsVersion & QSysInfo::WV_DOS_based) ? "cmd.exe /c" : "command.com /c"; // Thnx kode54 :) #else szShell = "sh -c"; #endif } args = szShell.split(" ", QString::SkipEmptyParts); args.append(m_pData->szCommandline); } m_pProcess = new QProcess(this); if(m_pData->iFlags & KVI_KVS_PROCESSDESCRIPTOR_TRIGGERSTDOUT) { connect(m_pProcess, SIGNAL(readyReadStandardOutput()), this, SLOT(readStdout())); } else { m_pProcess->closeReadChannel(QProcess::StandardOutput); } if(m_pData->iFlags & KVI_KVS_PROCESSDESCRIPTOR_TRIGGERSTDERR) { connect(m_pProcess, SIGNAL(readyReadStandardError()), this, SLOT(readStderr())); } else { m_pProcess->closeReadChannel(QProcess::StandardError); } connect(m_pProcess, SIGNAL(finished(int)), this, SLOT(processExited(int))); if(m_pData->iFlags & KVI_KVS_PROCESSDESCRIPTOR_TRIGGERSTARTED) { connect(m_pProcess, SIGNAL(started()), this, SLOT(processStarted())); } szcmd = args.takeFirst(); m_pProcess->start(szcmd, args); if(m_pProcess->state() == QProcess::NotRunning) { return false; } if(m_pData->iMaxRunTime > 0) { m_pRunTimeTimer = new QTimer(this); connect(m_pRunTimeTimer, SIGNAL(timeout()), this, SLOT(maxRunTimeExpired())); m_pRunTimeTimer->start(m_pData->iMaxRunTime); } if(m_pData->iPingTimeout > 0) { m_pPingTimer = new QTimer(this); connect(m_pPingTimer, SIGNAL(timeout()), this, SLOT(ping())); m_pPingTimer->start(m_pData->iPingTimeout); } return true; }