#include "update_command.h" #include "worker.h" #include "utils_internal.h" #include #include UpdateCommand::UpdateCommand(QString const &command, Worker *worker, int nextCommandIndex, int start_timeout, int finish_timeout) : Command(command, start_timeout, finish_timeout) , m_nextCommandIndex(nextCommandIndex) { setWorker(worker); } bool UpdateCommand::stopUpdateOnFailure() { return true; } void UpdateCommand::finished(int exitCode, QProcess::ExitStatus exitStatus) { QProcess *p = qobject_cast(sender()); if (p) { // read all remaining data sent to the process, just in case QString s = p->readAllStandardOutput().trimmed(); if (!s.isEmpty()) { m_commandResult += s; } disconnect(p, SIGNAL(finished(int,QProcess::ExitStatus)), this, SLOT(readyReadStandardOutput())); disconnect(p, SIGNAL(finished(int,QProcess::ExitStatus)), this, SLOT(readyReadStandardError())); disconnect(p, SIGNAL(finished(int,QProcess::ExitStatus)), this, SLOT(finished(int,QProcess::ExitStatus))); } if (!m_worker->workList().empty()) { //static constexpr const int PERCENT_CHECK_ISMAS_CONNECIVITY{10}; //static constexpr const int PERCENT_CHECK_UPDATE_REQUEST{20}; //static constexpr const int PERCENT_CHECK_CUSTOMER_REPOSITORY{30}; //static constexpr const int PERCENT_INSTALL_SW_PACKETS_NOACTION{40}; //static constexpr const int PERCENT_INSTALL_SW_PACKETS{50}; //static constexpr const int PERCENT_INSTALL_DC_CONFIGURATION{60}; //static constexpr const int PERCENT_SYNCHRONIZE_REPO_AND_FILESYS{70}; //static constexpr const int PERCENT_UPDATE_DC{80}; //static constexpr const int PERCENT_SHOW_FINAL_STATUS{90}; qCritical() << __func__ << ":" << __LINE__ << m_command << "exitCode" << exitCode << "exitStatus" << exitStatus; if (exitCode == 0 && exitStatus == QProcess::ExitStatus::NormalExit) { if (m_command.contains("ATBUpdateCheck")) { // TODO: resultCodes richtig eintragen if (m_command.contains("--ismas-connected")) { ISMAS::EventData e(ISMAS::CONTINUE, internal::PERCENT_CHECK_ISMAS_CONNECIVITY, 0, "ATBUpdateCheck --ismas-connected", "ISMAS connected"); m_worker->clientForUpdate().sendCmdEvent(e); } else if (m_command.contains("--update-requested")) { ISMAS::EventData e(ISMAS::CONTINUE, internal::PERCENT_CHECK_UPDATE_REQUEST, 0, "ATBUpdateCheck --update-requested", "update not necessary"); m_worker->clientForUpdate().sendCmdEvent(e); } } else if (m_command.contains("ATBUpdateGit")) { ISMAS::EventData e(ISMAS::CONTINUE, internal::PERCENT_CHECK_CUSTOMER_REPOSITORY, 0, "ATBUpdateGit", "customer repository clean and up-to-date"); m_worker->clientForUpdate().sendCmdEvent(e); } else if (m_command.contains("ATBUpdateOpkg")) { if (m_command.contains("--noaction")) { ISMAS::EventData e(ISMAS::CONTINUE, internal::PERCENT_INSTALL_SW_PACKETS_NOACTION, 0, "ATBUpdateOpkg --noaction", "execute opkg-commands (dry-run)"); m_worker->clientForUpdate().sendCmdEvent(e); } else { ISMAS::EventData e(ISMAS::CONTINUE, internal::PERCENT_INSTALL_SW_PACKETS, 0, "ATBUpdateOpkg", "execute opkg-commands"); m_worker->clientForUpdate().sendCmdEvent(e); } } else if (m_command.contains("ATBDownloadDCJsonFiles")) { ISMAS::EventData e(ISMAS::CONTINUE, internal::PERCENT_INSTALL_DC_CONFIGURATION, 0, "ATBDownloadDCJsonFiles", "download json-files to device controller"); m_worker->clientForUpdate().sendCmdEvent(e); } else if (m_command.contains("ATBUpdateSync")) { ISMAS::EventData e(ISMAS::CONTINUE, internal::PERCENT_SYNCHRONIZE_REPO_AND_FILESYS, 0, "ATBUpdateSync", "sync customer repository with /etc"); m_worker->clientForUpdate().sendCmdEvent(e); } else if (m_command.contains("ATBDownloadDCFirmware")) { ISMAS::EventData e(ISMAS::CONTINUE, internal::PERCENT_UPDATE_DC, 0, "ATBDownloadDCFirmware", "downloaded new dc-firmware. about to reboot..."); m_worker->clientForUpdate().sendCmdEvent(e); } else if (m_command.contains("ATBUpdateShowPSAInstalled")) { // TODO } if (m_worker->workList().nextExec()) { m_worker->workList().exec(); } } else { bool execShowStatus = true; m_worker->workList().exec(execShowStatus); } } }