Android: Use line-based output callback

Change-Id: I5d2ede450ee3e36cc16d7f1566083125204ce552
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
Christian Stenger
2021-06-04 11:41:35 +02:00
parent d3a91cd3a7
commit d97335c4ea
2 changed files with 12 additions and 36 deletions

View File

@@ -294,10 +294,15 @@ AndroidDeployQtStep::DeployErrorCode AndroidDeployQtStep::runDeploy()
m_process->setUseCtrlCStub(true); m_process->setUseCtrlCStub(true);
DeployErrorCode deployError = NoError; DeployErrorCode deployError = NoError;
connect(m_process, &Utils::QtcProcess::readyReadStandardOutput,
std::bind(&AndroidDeployQtStep::processReadyReadStdOutput, this, std::ref(deployError))); m_process->setStdOutLineCallback([this, &deployError](const QString &line) {
connect(m_process, &Utils::QtcProcess::readyReadStandardError, deployError |= parseDeployErrors(line);
std::bind(&AndroidDeployQtStep::processReadyReadStdError, this, std::ref(deployError))); stdOutput(line);
});
m_process->setStdErrLineCallback([this, &deployError](const QString &line) {
deployError |= parseDeployErrors(line);
stdError(line);
});
m_process->start(); m_process->start();
@@ -523,41 +528,11 @@ QWidget *AndroidDeployQtStep::createConfigWidget()
return widget; return widget;
} }
void AndroidDeployQtStep::processReadyReadStdOutput(DeployErrorCode &errorCode)
{
const QByteArray output = m_process->readAllStandardOutput();
int start = 0;
int end;
do {
end = output.indexOf('\n', start);
QString line = QString::fromLocal8Bit(output.mid(start, end - start));
errorCode |= parseDeployErrors(line);
stdOutput(line);
start = end + 1;
} while (end >= 0);
}
void AndroidDeployQtStep::stdOutput(const QString &line) void AndroidDeployQtStep::stdOutput(const QString &line)
{ {
emit addOutput(line, BuildStep::OutputFormat::Stdout, BuildStep::DontAppendNewline); emit addOutput(line, BuildStep::OutputFormat::Stdout, BuildStep::DontAppendNewline);
} }
void AndroidDeployQtStep::processReadyReadStdError(DeployErrorCode &errorCode)
{
const QByteArray output = m_process->readAllStandardError();
int start = 0;
int end;
do {
end = output.indexOf('\n', start);
QString line = QString::fromLocal8Bit(output.mid(start, end - start));
errorCode |= parseDeployErrors(line);
stdError(line);
start = end + 1;
} while (end >= 0);
}
void AndroidDeployQtStep::stdError(const QString &line) void AndroidDeployQtStep::stdError(const QString &line)
{ {
emit addOutput(line, BuildStep::OutputFormat::Stderr, BuildStep::DontAppendNewline); emit addOutput(line, BuildStep::OutputFormat::Stderr, BuildStep::DontAppendNewline);
@@ -575,7 +550,8 @@ void AndroidDeployQtStep::stdError(const QString &line)
TaskHub::addTask(DeploymentTask(Task::Error, newOutput)); TaskHub::addTask(DeploymentTask(Task::Error, newOutput));
} }
AndroidDeployQtStep::DeployErrorCode AndroidDeployQtStep::parseDeployErrors(QString &deployOutputLine) const AndroidDeployQtStep::DeployErrorCode AndroidDeployQtStep::parseDeployErrors(
const QString &deployOutputLine) const
{ {
DeployErrorCode errorCode = NoError; DeployErrorCode errorCode = NoError;

View File

@@ -81,7 +81,7 @@ private:
void stdOutput(const QString &line); void stdOutput(const QString &line);
void processReadyReadStdError(DeployErrorCode &errorCode); void processReadyReadStdError(DeployErrorCode &errorCode);
void stdError(const QString &line); void stdError(const QString &line);
DeployErrorCode parseDeployErrors(QString &deployOutputLine) const; DeployErrorCode parseDeployErrors(const QString &deployOutputLine) const;
friend void operator|=(DeployErrorCode &e1, const DeployErrorCode &e2) { e1 = static_cast<AndroidDeployQtStep::DeployErrorCode>((int)e1 | (int)e2); } friend void operator|=(DeployErrorCode &e1, const DeployErrorCode &e2) { e1 = static_cast<AndroidDeployQtStep::DeployErrorCode>((int)e1 | (int)e2); }
friend DeployErrorCode operator|(const DeployErrorCode &e1, const DeployErrorCode &e2) { return static_cast<AndroidDeployQtStep::DeployErrorCode>((int)e1 | (int)e2); } friend DeployErrorCode operator|(const DeployErrorCode &e1, const DeployErrorCode &e2) { return static_cast<AndroidDeployQtStep::DeployErrorCode>((int)e1 | (int)e2); }