From c34944af8b27970c5f30d7204deb0f66987ff8b0 Mon Sep 17 00:00:00 2001 From: Gerhard Hoffmann Date: Tue, 27 Jun 2023 17:29:10 +0200 Subject: [PATCH] Add slots for catching output of underlying update_psa_script. iSetting timeout to 200000 when in maintenance-mode. --- update.cpp | 46 ++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 38 insertions(+), 8 deletions(-) diff --git a/update.cpp b/update.cpp index ba1274d..cc3810a 100644 --- a/update.cpp +++ b/update.cpp @@ -12,7 +12,6 @@ #include #include -#include #include #include #include @@ -134,19 +133,26 @@ bool Update::execUpdateScript() { QScopedPointer p(new QProcess(this)); p->setProcessChannelMode(QProcess::MergedChannels); + connect(&(*p), SIGNAL(readyReadStandardOutput()), this, SLOT(readyReadStandardOutput())); + connect(&(*p), SIGNAL(readyReadStandardError()), this, SLOT(readyReadStandardError())); + p->start(update_psa); + if (p->waitForStarted(1000)) { if (p->state() == QProcess::ProcessState::Running) { - int const timeout = 200000; // sometimes signal strength of modem is quite low + // maintenance_mode: update_psa script enters an infinite loop + int const timeout = (m_maintenanceMode ? 200000: -1); if (p->waitForFinished(timeout)) { QString output = p->readAllStandardOutput().toStdString().c_str(); QStringList lst = output.split('\n'); for (int i = 0; i < lst.size(); ++i) { qDebug() << lst[i]; } - qInfo() << "EXECUTED" << update_psa; - return ((p->exitStatus() == QProcess::NormalExit) - && (p->exitCode() == 0)); + if (p->exitStatus() == QProcess::NormalExit) { + qInfo() << "EXECUTED" << update_psa + << "with code" << p->exitCode(); + return (p->exitCode() == 0); + } } else { qCritical() << "update-script TIMEDOUT after" << timeout/1000 << "seconds"; @@ -531,7 +537,26 @@ QStringList Update::split(QString line, QChar sep) { return lst; } +void Update::readyReadStandardOutput() { + QProcess *p = (QProcess *)sender(); + QByteArray buf = p->readAllStandardOutput(); + qCritical() << buf; +} + +void Update::readyReadStandardError() { + QProcess *p = (QProcess *)sender(); + QByteArray buf = p->readAllStandardError(); + qCritical() << buf; +} + +void Update::finished(int /*exitCode*/, QProcess::ExitStatus /*exitStatus*/) { + QProcess *p = (QProcess *)sender(); + disconnect(p, SIGNAL(finished(int,QProcess::ExitStatus)), this, SLOT(readyReadStandardOutput())); + disconnect(p, SIGNAL(finished(int,QProcess::ExitStatus)), this, SLOT(readyReadStandardError())); +} + bool Update::doUpdate() { + /* The file referred to by 'update_data' has the following structure for each line: @@ -626,7 +651,7 @@ bool Update::doUpdate() { } else if (name.contains("DC2C_cash", Qt::CaseInsensitive) && name.endsWith(".json", Qt::CaseInsensitive)) { res = true; -#if UPDATE_CASH_TEMPLATE +#if UPDATE_CASH_TEMPLATE == 1 if ((res = updateCashConf(name))) { qInfo() << "downloaded cash template"<< name; } @@ -634,7 +659,7 @@ bool Update::doUpdate() { } else if (name.contains("DC2C_conf", Qt::CaseInsensitive) && name.endsWith(".json", Qt::CaseInsensitive)) { res = true; -#if UPDATE_CONF_TEMPLATE +#if UPDATE_CONF_TEMPLATE == 1 if ((res= updateConfig(name))) { qInfo() << "downloaded config template"<< name; } @@ -642,7 +667,7 @@ bool Update::doUpdate() { } else if (name.contains("DC2C_device", Qt::CaseInsensitive) && name.endsWith(".json", Qt::CaseInsensitive)) { res = true; -#if UPDATE_DEVICE_TEMPLATE +#if UPDATE_DEVICE_TEMPLATE == 1 if ((res = updateDeviceConf(name))) { qInfo() << "downloaded device template"<< name; } @@ -657,7 +682,12 @@ bool Update::doUpdate() { #if UPDATE_OPKG == 1 QScopedPointer p(new QProcess(this)); p->setProcessChannelMode(QProcess::MergedChannels); + + connect(&(*p), SIGNAL(readyReadStandardOutput()), this, SLOT(readyReadStandardOutput())); + connect(&(*p), SIGNAL(readyReadStandardError()), this, SLOT(readyReadStandardError())); + p->start(name.trimmed()); + if (p->waitForStarted(1000)) { if (p->state() == QProcess::ProcessState::Running) { if (p->waitForFinished(100000)) {