Action::Action(const Commands &cmd, const QByteArray &input, const QString &outputItemFormat, const QString &itemSeparator, const QString &outputTabName, const QModelIndex &index) : QProcess() , m_input(input) , m_sep(index.isValid() ? QString() : itemSeparator) , m_cmds(cmd) , m_tab(outputTabName) , m_outputFormat(outputItemFormat != "text/plain" ? outputItemFormat : QString()) , m_index(index) , m_errstr() , m_lastOutput() , m_failed(false) , m_firstProcess(NULL) { setProcessChannelMode(QProcess::SeparateChannels); connect( this, SIGNAL(error(QProcess::ProcessError)), SLOT(actionError(QProcess::ProcessError)) ); connect( this, SIGNAL(started()), SLOT(actionStarted()) ); connect( this, SIGNAL(finished(int,QProcess::ExitStatus)), SLOT(actionFinished()) ); connect( this, SIGNAL(readyReadStandardError()), SLOT(actionErrorOutput()) ); if ( !outputItemFormat.isEmpty() ) { connect( this, SIGNAL(readyReadStandardOutput()), SLOT(actionOutput()) ); } }
Action::Action(QObject *parent) : QProcess(parent) , m_failed(false) , m_firstProcess(NULL) , m_currentLine(-1) { setProcessChannelMode(QProcess::SeparateChannels); connect( this, SIGNAL(error(QProcess::ProcessError)), SLOT(actionError(QProcess::ProcessError)) ); connect( this, SIGNAL(started()), SLOT(actionStarted()) ); connect( this, SIGNAL(finished(int,QProcess::ExitStatus)), SLOT(actionFinished()) ); connect( this, SIGNAL(readyReadStandardError()), SLOT(actionErrorOutput()) ); connect( this, SIGNAL(readyReadStandardOutput()), this, SLOT(actionOutput()) ); quintptr id = actionId(this); QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); env.insert("COPYQ_ACTION_ID", QString::number(id)); setProcessEnvironment(env); setProperty("COPYQ_ACTION_ID", id); const QMutexLocker lock(&actionsLock); actions.append(this); }
void Action::actionFinished() { if ( !m_outputFormat.isEmpty() ) { if ( !m_outputData.isNull() ) { if (m_index.isValid()) emit newItem(m_outputData, m_outputFormat, m_index); else emit newItem(m_outputData, m_outputFormat, m_tab); m_outputData = QByteArray(); } } else if ( !m_lastOutput.isNull() ) { actionOutput(); if ( !m_lastOutput.isNull() ) { QStringList items; items.append(m_lastOutput); if (m_index.isValid()) emit newItems(items, m_index); else emit newItems(items, m_tab); m_lastOutput = QString(); } } emit actionFinished(this); }
void Action::appendOutput(const QByteArray &output) { if ( !output.isEmpty() ) emit actionOutput(output); }