716 lines
24 KiB
C++
716 lines
24 KiB
C++
#include "mainwindow.h"
|
|
#include "ui_mainwindow.h"
|
|
#include "worker.h"
|
|
#include "utils.h"
|
|
#include "utils_internal.h"
|
|
#include "progress_event.h"
|
|
#include "update_dc_event.h"
|
|
#include "process/update_command.h"
|
|
#include <DeviceController/interfaces.h>
|
|
|
|
#include <QDateTime>
|
|
#include <QMessageBox>
|
|
#include <QDebug>
|
|
#include <QScrollBar>
|
|
#include <QEvent>
|
|
#include <QColor>
|
|
#include <QColorDialog>
|
|
|
|
|
|
MainWindow::MainWindow(Worker *worker, QWidget *parent)
|
|
: QMainWindow(parent)
|
|
, ui(new Ui::MainWindow)
|
|
, m_worker(worker)
|
|
, m_width(70)
|
|
, m_progressRunning(false)
|
|
, m_updateStep(UpdateDcEvent::UpdateStep::NONE) {
|
|
|
|
ui->setupUi(this);
|
|
|
|
this->setStatusBar(new QStatusBar(this));
|
|
QFont f;
|
|
f.setStyleHint(QFont::Monospace);
|
|
f.setWeight(QFont::Bold);
|
|
f.setFamily("Misc Fixed");
|
|
f.setPointSize(11);
|
|
this->statusBar()->setFont(f);
|
|
|
|
ui->updateProgress->setRange(0, 100);
|
|
ui->updateProgress->reset();
|
|
|
|
QStringList lst;
|
|
QString start = QDateTime::currentDateTime().toString(Qt::ISODate);
|
|
lst << QString("Start: ") + start.leftJustified(m_width-10);
|
|
lst << QString("").leftJustified(m_width-3, '=');
|
|
lst << QString("Update tool version : %1 - %2 %3").arg(APP_VERSION).arg(APP_BUILD_DATE).arg(APP_BUILD_TIME).leftJustified(m_width-3);
|
|
lst << QString("Machine number : %1 ").arg(m_worker->machineNr()).leftJustified(m_width-3);
|
|
lst << QString("Customer number : %1 ").arg(m_worker->customerNr()).leftJustified(m_width-3);
|
|
lst << QString("Zone number : %1 (%2)").arg(m_worker->zoneNr()).arg(Utils::zoneName(m_worker->zoneNr())).leftJustified(m_width-3);
|
|
lst << QString("APISM version : %1").arg(m_worker->apismVersion()).leftJustified(m_width-3);
|
|
lst << QString("").leftJustified(m_width-3, '=');
|
|
|
|
ui->updateLabel->setText(lst.join('\n'));
|
|
ui->updateLabel->setEnabled(true);
|
|
// ui->updateStatus->installEventFilter(this);
|
|
|
|
m_startTimer = new QTimer(this);
|
|
connect(m_startTimer, SIGNAL(timeout()), m_worker, SLOT(start()));
|
|
m_startTimer->setSingleShot(true);
|
|
m_startTimer->start(1000);
|
|
|
|
m_exitTimer = new QTimer(this);
|
|
connect(m_exitTimer, SIGNAL(timeout()), ui->exit, SLOT(click()));
|
|
m_exitTimer->setSingleShot(true);
|
|
m_exitTimer->start(1800 * 1000);
|
|
|
|
m_statusTimer = new QTimer(this);
|
|
if (m_statusTimer) {
|
|
connect(m_statusTimer, &QTimer::timeout, [this]() {
|
|
static QString p(".");
|
|
QTime const &t = QDateTime::currentDateTime().time();
|
|
QString s = t.toString(Qt::ISODate);
|
|
s += ": Update might take several minutes " + p;
|
|
if (p.length() >= 5) {
|
|
p = ".";
|
|
} else {
|
|
p += ".";
|
|
}
|
|
this->statusBar()->showMessage(s);
|
|
});
|
|
m_statusTimer->setSingleShot(false);
|
|
m_statusTimer->start(1000);
|
|
}
|
|
|
|
connect(ui->exit, SIGNAL(clicked()),this,SLOT(onQuit()));
|
|
connect(m_worker, SIGNAL(showSummary(QString)),this,SLOT(onShowSummary(QString)));
|
|
connect(m_worker, SIGNAL(disableExit()),this,SLOT(onDisableExit()));
|
|
connect(m_worker, SIGNAL(showDcDownload(QString)),this,SLOT(onShowDcDownload(QString)));
|
|
connect(m_worker, SIGNAL(showJsonDownload(QString)),this,SLOT(onShowJsonDownload(QString)));
|
|
connect(m_worker, SIGNAL(showTariffUpdate(QString)),this,SLOT(onShowTariffUpdate(QString)));
|
|
|
|
// deprecated
|
|
connect(m_worker, SIGNAL(showISMASChecks(QString)),this,SLOT(onShowISMASChecks(QString)));
|
|
|
|
connect(m_worker, SIGNAL(showISMASConnectivity(QString)),this,SLOT(onShowISMASConnectivity(QString)));
|
|
connect(m_worker, SIGNAL(showUpdateRequest(QString)),this,SLOT(onShowUpdateRequest(QString)));
|
|
connect(m_worker, SIGNAL(showCustRepoStatus(QString)),this,SLOT(onShowCustRepoStatus(QString)));
|
|
connect(m_worker, SIGNAL(showExecOpkgStatus(QString)),this,SLOT(onShowExecOpkgStatus(QString)));
|
|
connect(m_worker, SIGNAL(showExecOpkgCommand(QString)),this,SLOT(onShowExecOpkgCommand(QString)));
|
|
connect(m_worker, SIGNAL(showExecOpkgOverallResult(QString, bool)),this,SLOT(onShowExecOpkgOverallResult(QString,bool)));
|
|
connect(m_worker, SIGNAL(showDownloadDCJsonFilesStatus(QString)),this,SLOT(onShowDownloadDCJsonFilesStatus(QString)));
|
|
connect(m_worker, SIGNAL(showSyncCustRepoStatus(QString)),this,SLOT(onShowSyncCustRepoStatus(QString)));
|
|
connect(m_worker, SIGNAL(showUpdateDCFirmware(QString)),this,SLOT(onShowUpdateDCFirmware(QString)));
|
|
connect(m_worker, SIGNAL(setDcDownloadProgress(int)),this,SLOT(onSetDcDownloadProgress(int)));
|
|
connect(m_worker, SIGNAL(enableExit()),this,SLOT(onEnableExit()));
|
|
connect(m_worker, SIGNAL(stopStartTimer()),this,SLOT(onStopStartTimer()));
|
|
connect(m_worker, SIGNAL(restartExitTimer()),this,SLOT(onRestartExitTimer()));
|
|
connect(m_worker, SIGNAL(appendText(QString,QString)),this,SLOT(onAppendText(QString,QString)));
|
|
connect(m_worker, SIGNAL(insertText(QString)),this,SLOT(onInsertText(QString)), Qt::DirectConnection);
|
|
connect(m_worker, SIGNAL(showErrorMessage(QString,QString)),this, SLOT(onShowErrorMessage(QString,QString)));
|
|
connect(m_worker, SIGNAL(showStatusMessage(QString,QString)),this, SLOT(onShowStatusMessage(QString,QString)));
|
|
connect(m_worker, SIGNAL(showErrorMessage(QStringList)),this, SLOT(onShowErrorMessage(QStringList)));
|
|
connect(m_worker, SIGNAL(showStatusMessage(QString,QString)),this, SLOT(onShowStatusMessage(QString,QString)));
|
|
connect(m_worker, SIGNAL(replaceLast(QString,QString)),this,SLOT(onReplaceLast(QString,QString)));
|
|
connect(m_worker, SIGNAL(replaceLast(QStringList,QString)),this, SLOT(onReplaceLast(QStringList,QString)));
|
|
}
|
|
|
|
|
|
void MainWindow::onShowSummary(QString text) {
|
|
// QString s = ui->updateLabel->text();
|
|
QString s("\n");
|
|
|
|
ui->updateLabel->setText(s);
|
|
ui->updateLabel->hide();
|
|
ui->stepLabel->hide();
|
|
ui->updateProgress->hide();
|
|
|
|
s += text;
|
|
ui->updateStatus->setText(s);
|
|
}
|
|
|
|
void MainWindow::onSetDcDownloadProgress(int v) {
|
|
ui->updateProgress->setValue(v);
|
|
}
|
|
|
|
void MainWindow::onShowTariffUpdate(QString) {
|
|
ui->exit->setEnabled(false);
|
|
|
|
QString s = ui->stepLabel->text();
|
|
|
|
QString tmp("Install tariff files ");
|
|
int len = m_showLineLength - tmp.length();
|
|
while (--len > 0) {
|
|
tmp += " ";
|
|
}
|
|
|
|
s += QString("%1 <font color='Green'>[OK ]</font><br />").arg(tmp);
|
|
|
|
ui->stepLabel->setText(s);
|
|
}
|
|
|
|
void MainWindow::onShowISMASConnectivity(QString status) {
|
|
// ausgabe: connected, not connected, connecting
|
|
|
|
m_stepLabelChopCount = 0;
|
|
qCritical() << __func__ << ":" << __LINE__ << "status" << status;
|
|
|
|
QString s = ui->stepLabel->text();
|
|
|
|
QString tmp("Check backend connection (ISMAS) ");
|
|
int len = m_showLineLength - tmp.length();
|
|
while (--len > 0) {
|
|
tmp += " ";
|
|
}
|
|
|
|
bool const custRepoExists = internal::customerRepoExists();
|
|
|
|
if (status.contains(UpdateCommand::ISMAS_CONNECTED, Qt::CaseInsensitive)) {
|
|
if (custRepoExists) {
|
|
s += QString("%1 <font color='Green'>connected</font><br />").arg(tmp);
|
|
} else {
|
|
s += QString("%1 <font color='Green'>connected (initial configuration)</font><br />").arg(tmp);
|
|
}
|
|
} else
|
|
if (status.contains(UpdateCommand::NO_CUSTOMER_REPOSITORY, Qt::CaseInsensitive)) {
|
|
s += QString("%1 <font color='Blue'>NOT CONNECTED</font><br />").arg(tmp);
|
|
} else
|
|
if (status.contains(UpdateCommand::ISMAS_CONNECTION_IN_PROGRESS, Qt::CaseInsensitive)) {
|
|
s += QString("%1 <font color='Green'>connecting</font><br />").arg(tmp);
|
|
} else
|
|
if (status.contains(UpdateCommand::ISMAS_NOT_CONNECTED, Qt::CaseInsensitive)) {
|
|
if (custRepoExists) {
|
|
s += QString( "%1 <font color='Red'>NOT CONNECTED. STOP</font><br />").arg(tmp);
|
|
} else {
|
|
s += QString( "%1 <font color='Red'>not connected. (initial configuration)</font><br />").arg(tmp);
|
|
}
|
|
} else {
|
|
s += QString( "%1 <font color='Red'>UNKNOWN STATUS</font><br />").arg(tmp);
|
|
}
|
|
|
|
m_stepLabelChopCount = -s.length();
|
|
s += "Check update request";
|
|
m_stepLabelChopCount += s.length();
|
|
|
|
ui->stepLabel->setText(s);
|
|
}
|
|
|
|
void MainWindow::onShowCustRepoStatus(QString status) {
|
|
qCritical() << __func__ << ":" << __LINE__ << "status" << status;
|
|
|
|
QString s = ui->stepLabel->text();
|
|
s.chop(m_stepLabelChopCount);
|
|
|
|
QString tmp("Update customer repository ");
|
|
int len = m_showLineLength - tmp.length();
|
|
while (--len > 0) {
|
|
tmp += " ";
|
|
}
|
|
|
|
if (status.contains(internal::GIT_CUSTOMER_REPO_UP_TO_DATE, Qt::CaseInsensitive)) {
|
|
s += QString("%1 <font color='Green'>%2</font><br />").arg(tmp).arg(internal::GIT_CUSTOMER_REPO_UP_TO_DATE);
|
|
} else
|
|
if (status.contains(internal::GIT_CUSTOMER_REPO_NOT_NECESSARY, Qt::CaseInsensitive)) {
|
|
s += QString("%1 <font color='Green'>%2</font><br />").arg(tmp).arg(internal::GIT_CUSTOMER_REPO_NOT_NECESSARY);
|
|
} else {
|
|
s += QString( "%1 <font color='Red'>UNKNOWN STATUS</font><br />").arg(tmp);
|
|
}
|
|
|
|
m_stepLabelChopCount = -s.length();
|
|
s += "Install SW packets (dry run)";
|
|
m_stepLabelChopCount += s.length();
|
|
|
|
ui->stepLabel->setText(s);
|
|
}
|
|
|
|
void MainWindow::onShowExecOpkgStatus(QString status) {
|
|
qCritical() << __func__ << ":" << __LINE__ << "status" << status;
|
|
|
|
QString s = ui->stepLabel->text();
|
|
|
|
QString tmp = "execute opkg commands ";
|
|
int len = m_showLineLength - tmp.length();
|
|
|
|
while (--len > 0) {
|
|
tmp += " ";
|
|
}
|
|
|
|
if (status.contains(UpdateCommand::EXEC_OPKG_COMMANDS_SUCCESS, Qt::CaseInsensitive)) {
|
|
s += QString("%1 <font color='Green'>success</font><br />").arg(tmp);
|
|
} else {
|
|
s += QString( "%1 <font color='Red'>UNKNOWN STATUS</font><br />").arg(tmp);
|
|
}
|
|
|
|
ui->stepLabel->setText(s);
|
|
}
|
|
|
|
void MainWindow::onShowExecOpkgCommand(QString cmd) {
|
|
qCritical() << __func__ << ":" << __LINE__ << "cmd" << cmd;
|
|
|
|
if (cmd.back() != QChar('\n')) {
|
|
cmd += "\n";
|
|
}
|
|
onInsertText(cmd);
|
|
}
|
|
|
|
void MainWindow::onShowExecOpkgOverallResult(QString status, bool noaction) {
|
|
qCritical() << __func__ << ":" << __LINE__ << "status" << status;
|
|
|
|
QString s = ui->stepLabel->text();
|
|
s.chop(m_stepLabelChopCount);
|
|
|
|
QString tmp = noaction ? "Install SW packets (dry run) " : "Install SW packets ";
|
|
int len = m_showLineLength - tmp.length();
|
|
|
|
while (--len > 0) {
|
|
tmp += " ";
|
|
}
|
|
|
|
if (status.contains(internal::EXEC_OPKG_COMMANDS_SUCCESS, Qt::CaseInsensitive)) {
|
|
s += QString("%1 <font color='Green'>success</font><br />").arg(tmp);
|
|
} else
|
|
if (status.contains(internal::EXEC_OPKG_COMMANDS_FAIL, Qt::CaseInsensitive)) {
|
|
s += QString("%1 <font color='Red'>%2</font><br />").arg(tmp).arg(internal::EXEC_OPKG_COMMANDS_FAIL);
|
|
} else {
|
|
s += QString( "%1 <font color='Red'>UNKNOWN STATUS</font><br />").arg(tmp);
|
|
}
|
|
|
|
if (noaction) {
|
|
m_stepLabelChopCount = -s.length();
|
|
s += "Install SW packets";
|
|
m_stepLabelChopCount += s.length();
|
|
} else {
|
|
m_stepLabelChopCount = -s.length();
|
|
s += "Install DC configuration";
|
|
m_stepLabelChopCount += s.length();
|
|
}
|
|
|
|
ui->stepLabel->setText(s);
|
|
}
|
|
|
|
void MainWindow::onShowDownloadDCJsonFilesStatus(QString status) {
|
|
qCritical() << __func__ << ":" << __LINE__ << "status" << status;
|
|
|
|
QString s = ui->stepLabel->text();
|
|
s.chop(m_stepLabelChopCount);
|
|
|
|
QString tmp = "Install DC configuration ";
|
|
int len = m_showLineLength - tmp.length();
|
|
|
|
while (--len > 0) {
|
|
tmp += " ";
|
|
}
|
|
|
|
if (status.contains(UpdateCommand::UPDATE_DC_JSON_FILES_SUCCESS, Qt::CaseInsensitive)) {
|
|
s += QString("%1 <font color='Green'>success</font><br />").arg(tmp);
|
|
} else {
|
|
s += QString( "%1 <font color='Red'>UNKNOWN STATUS</font><br />").arg(tmp);
|
|
}
|
|
|
|
m_stepLabelChopCount = -s.length();
|
|
s += "Synchronize repository/filesystem";
|
|
m_stepLabelChopCount += s.length();
|
|
|
|
ui->stepLabel->setText(s);
|
|
}
|
|
|
|
void MainWindow::onShowSyncCustRepoStatus(QString status) {
|
|
qCritical() << __func__ << ":" << __LINE__ << "status" << status;
|
|
|
|
QString s = ui->stepLabel->text();
|
|
s.chop(m_stepLabelChopCount);
|
|
|
|
QString tmp = "Synchronize repository/filesystem ";
|
|
int len = m_showLineLength - tmp.length();
|
|
|
|
while (--len > 0) {
|
|
tmp += " ";
|
|
}
|
|
|
|
if (status.contains(UpdateCommand::SYNC_CUSTOMER_REPO_FILES_SUCCESS, Qt::CaseInsensitive)) {
|
|
s += QString("%1 <font color='Green'>success</font><br />").arg(tmp);
|
|
} else {
|
|
s += QString( "%1 <font color='Red'>UNKNOWN STATUS</font><br />").arg(tmp);
|
|
}
|
|
|
|
m_stepLabelChopCount = -s.length();
|
|
s += "Update DC";
|
|
m_stepLabelChopCount += s.length();
|
|
|
|
ui->stepLabel->setText(s);
|
|
}
|
|
|
|
void MainWindow::onShowUpdateDCFirmware(QString status) {
|
|
qCritical() << __func__ << ":" << __LINE__ << "status" << status;
|
|
|
|
QString s = ui->stepLabel->text();
|
|
s.chop(m_stepLabelChopCount);
|
|
|
|
QString tmp = "Update DC ";
|
|
int len = m_showLineLength - tmp.length();
|
|
|
|
while (--len > 0) {
|
|
tmp += " ";
|
|
}
|
|
|
|
if (status.contains(UpdateCommand::UPDATE_DC_FIRMARE_SUCCESS, Qt::CaseInsensitive)) {
|
|
s += QString("%1 <font color='Green'>success</font><br />").arg(tmp);
|
|
} else {
|
|
s += QString( "%1 <font color='Red'>UNKNOWN STATUS</font><br />").arg(tmp);
|
|
}
|
|
|
|
ui->stepLabel->setText(s);
|
|
}
|
|
|
|
|
|
void MainWindow::onShowUpdateRequest(QString status) {
|
|
|
|
qCritical() << __func__ << ":" << __LINE__ << "status" << status;
|
|
|
|
QString s = ui->stepLabel->text();
|
|
s.chop(m_stepLabelChopCount);
|
|
|
|
QString tmp = "Check update request ";
|
|
int len = m_showLineLength - tmp.length();
|
|
|
|
while (--len > 0) {
|
|
tmp += " ";
|
|
}
|
|
|
|
bool const custRepoExists = internal::customerRepoExists();
|
|
|
|
if (status.contains(UpdateCommand::UPDATE_NOT_REQUESTED, Qt::CaseInsensitive)) {
|
|
if (custRepoExists) {
|
|
s += QString( "%1 <font color='Red'>NOT REQUESTED. STOP.</font><br />").arg(tmp);
|
|
} else {
|
|
s += QString("%1 <font color='Blue'>not requested (initial configuration)</font><br />").arg(tmp);
|
|
}
|
|
} else
|
|
if (status.contains(UpdateCommand::UPDATE_REQUESTED, Qt::CaseInsensitive)) {
|
|
if (custRepoExists) {
|
|
s += QString("%1 <font color='Green'>requested</font><br />").arg(tmp);
|
|
} else {
|
|
s += QString("%1 <font color='Blue'>requested (initial configuration)</font><br />").arg(tmp);
|
|
}
|
|
} else
|
|
if (status.contains(UpdateCommand::UPDATE_NOT_NECESSARY, Qt::CaseInsensitive)) {
|
|
s += QString("%1 <font color='Green'>not necessary</font><br />").arg(tmp);
|
|
} else
|
|
if (status.contains(UpdateCommand::NO_CUSTOMER_REPOSITORY, Qt::CaseInsensitive)) {
|
|
s += QString("%1 <font color='Blue'>UNKNOWN (ISMAS not connected)</font><br />").arg(tmp);
|
|
} else {
|
|
s += QString( "%1 <font color='Red'>UNKNOWN</font><br />").arg(tmp);
|
|
}
|
|
|
|
m_stepLabelChopCount = -s.length();
|
|
s += "Update customer repository";
|
|
m_stepLabelChopCount += s.length();
|
|
|
|
ui->stepLabel->setText(s);
|
|
}
|
|
|
|
void MainWindow::onShowISMASChecks(QString) {
|
|
// deprecated
|
|
|
|
QString s = ui->stepLabel->text();
|
|
|
|
QString tmp("Check ISMAS connectivity ");
|
|
int len = m_showLineLength - tmp.length();
|
|
while (--len > 0) {
|
|
tmp += " ";
|
|
}
|
|
|
|
s += QString("%1 <font color='Green'>[OK ]</font><br />").arg(tmp);
|
|
|
|
tmp = "Check update activation ";
|
|
len = m_showLineLength - tmp.length();
|
|
|
|
while (--len > 0) {
|
|
tmp += " ";
|
|
}
|
|
|
|
s += QString("%1 <font color='Green'>[OK ]</font><br />").arg(tmp);
|
|
ui->stepLabel->setText(s);
|
|
}
|
|
|
|
void MainWindow::onShowJsonDownload(QString) {
|
|
ui->exit->setEnabled(false);
|
|
|
|
QString s = ui->stepLabel->text();
|
|
|
|
QString tmp("Send json files to dc-hardware ");
|
|
int len = m_showLineLength - tmp.length();
|
|
while (--len > 0) {
|
|
tmp += " ";
|
|
}
|
|
|
|
s += QString("%1 <font color='Green'>[OK ]</font><br />").arg(tmp);
|
|
|
|
ui->stepLabel->setText(s);
|
|
}
|
|
|
|
void MainWindow::onShowDcDownload(QString version) {
|
|
m_targetDcVersion = version;
|
|
ui->exit->setEnabled(false);
|
|
|
|
// test
|
|
// onShowISMASChecks("");
|
|
onShowISMASConnectivity("connected");
|
|
onShowUpdateRequest("activated");
|
|
|
|
onShowTariffUpdate("");
|
|
onShowJsonDownload("");
|
|
|
|
QString s = ui->stepLabel->text();
|
|
|
|
QString tmp("Send dc-firmware to dc-hardware ");
|
|
int len = m_showLineLength - tmp.length();
|
|
while (--len > 0) {
|
|
tmp += " ";
|
|
}
|
|
|
|
s += QString("%1 <font color='#33FF50'>[OK ]</font> (%2)").arg(tmp).arg(version);
|
|
|
|
ui->stepLabel->setText(s);
|
|
}
|
|
|
|
MainWindow::~MainWindow() {
|
|
delete m_startTimer;
|
|
delete m_exitTimer;
|
|
delete m_statusTimer;
|
|
delete ui;
|
|
}
|
|
|
|
void MainWindow::customEvent(QEvent *event) {
|
|
if (event->type() == ProgressEvent::type()) {
|
|
ProgressEvent *pevent = (ProgressEvent *)event;
|
|
int const progress = pevent->progressPercent();
|
|
QObject const *sender = pevent->sender();
|
|
if (sender == this) {
|
|
switch(progress) {
|
|
case 0: {
|
|
ui->updateProgress->reset();
|
|
} break;
|
|
case START_PROGRESS_LOOP: {
|
|
m_progressRunning = true;
|
|
ui->updateProgress->reset();
|
|
// m_progressValue = 10;
|
|
QApplication::postEvent(this, new ProgressEvent(this, 1));
|
|
} break;
|
|
case STOP_PROGRESS_LOOP: {
|
|
m_progressRunning = false;
|
|
// m_progressValue -= 10;
|
|
// m_worker->setProgress(m_progressValue/10);
|
|
} break;
|
|
default: {
|
|
if (m_progressRunning) {
|
|
// m_progressValue = progress;
|
|
ui->updateProgress->setValue(progress);
|
|
// ueberpruefen: hauptfenster schickt sich selber ein event
|
|
// QApplication::postEvent(this, new ProgressEvent(this, progress));
|
|
// QThread::msleep(500);
|
|
}}
|
|
}
|
|
} else
|
|
if (sender == m_worker) {
|
|
switch(progress) {
|
|
case 0: {
|
|
ui->updateProgress->reset();
|
|
} break;
|
|
case START_PROGRESS_LOOP: {
|
|
QApplication::postEvent(this, new ProgressEvent(this, START_PROGRESS_LOOP));
|
|
} break;
|
|
case STOP_PROGRESS_LOOP: {
|
|
QApplication::postEvent(this, new ProgressEvent(this, STOP_PROGRESS_LOOP));
|
|
} break;
|
|
default:{
|
|
ui->updateProgress->setValue(progress);
|
|
}}
|
|
} else {
|
|
qCritical() << "!!! UNKNOWN SENDER !!!";
|
|
}
|
|
}
|
|
|
|
QThread::yieldCurrentThread();
|
|
}
|
|
|
|
void MainWindow::onStopStartTimer() {
|
|
m_startTimer->stop();
|
|
}
|
|
|
|
void MainWindow::onDisableExit() {
|
|
ui->exit->setEnabled(false);
|
|
}
|
|
|
|
void MainWindow::onEnableExit() {
|
|
ui->exit->setEnabled(true);
|
|
}
|
|
|
|
void MainWindow::onRestartExitTimer() {
|
|
m_exitTimer->stop();
|
|
m_exitTimer->start(5 * 1000);
|
|
|
|
scrollDownTextEdit();
|
|
ui->updateStatus->setEnabled(false);
|
|
}
|
|
|
|
void MainWindow::onQuit() {
|
|
m_exitTimer->stop();
|
|
int errorCode = 0;
|
|
|
|
qCritical()
|
|
<< QString("ON QUIT: CURRENT STEP %1")
|
|
.arg(m_worker->getSmap()[m_worker->currentStep()]);
|
|
|
|
// TODO: replace SEND_LAST_VERSION with UPDATE_SUCCEEDED
|
|
if (m_worker->currentStep() != Worker::UPDATE_STEP::SEND_LAST_VERSION) {
|
|
errorCode = -1;
|
|
}
|
|
qCritical() << QString("ON QUIT: EXIT CODE %1").arg(errorCode);
|
|
qApp->exit(errorCode);
|
|
}
|
|
|
|
void MainWindow::scrollDownTextEdit() {
|
|
// Utils::printInfoMsg(QString("SCROLL-DOWN-TEXT_EDIT CALLED AT ")
|
|
// + QDateTime::currentDateTime().toString(Qt::ISODateWithMs));
|
|
|
|
ui->updateStatus->setEnabled(true);
|
|
|
|
QTextCursor tmpCursor = ui->updateStatus->textCursor();
|
|
tmpCursor.movePosition(QTextCursor::End);
|
|
ui->updateStatus->setTextCursor(tmpCursor);
|
|
ui->updateStatus->ensureCursorVisible();
|
|
}
|
|
|
|
|
|
void MainWindow::onInsertText(QString text) {
|
|
scrollDownTextEdit();
|
|
ui->updateStatus->textCursor().insertText(text);
|
|
}
|
|
|
|
void MainWindow::onAppendText(QString text, QString suffix) {
|
|
// Utils::printInfoMsg(QString("ON APPEND CALLED AT ")
|
|
// + QDateTime::currentDateTime().toString(Qt::ISODateWithMs));
|
|
|
|
QString editText = ui->updateStatus->toPlainText();
|
|
scrollDownTextEdit();
|
|
|
|
if (!suffix.isNull() && suffix.size() > 0) {
|
|
//qInfo() << "TEXT" << text << "SUFFIX" << suffix;
|
|
if (suffix == Worker::UPDATE_STEP_SUCCESS || suffix == Worker::UPDATE_STEP_FAIL) {
|
|
ui->updateStatus->insertPlainText(QString("\n").leftJustified(m_width-3, '=') + " ");
|
|
// editText += QString("\n").leftJustified(m_width-3, '=');
|
|
// editText += " ";
|
|
}
|
|
QString const &add = (QString("\n") + text).leftJustified(m_width - (2 + suffix.size())) + suffix;
|
|
ui->updateStatus->insertPlainText(add);
|
|
// editText += add;
|
|
} else {
|
|
QString const &add = text.leftJustified(m_width-9);
|
|
ui->updateStatus->insertPlainText(add);
|
|
//editText += add;
|
|
}
|
|
|
|
// debug
|
|
// QString editText = ui->updateStatus->toPlainText();
|
|
// Utils::printLineEditInfo(editText.split('\n', QString::SplitBehavior::SkipEmptyParts));
|
|
// ui->updateStatus->setText(editText.trimmed());
|
|
|
|
scrollDownTextEdit();
|
|
}
|
|
|
|
void MainWindow::onReplaceLast(QStringList newTextLines, QString suffix) {
|
|
// Utils::printInfoMsg(QString("ON REPLACE LAST (LIST) CALLED AT ")
|
|
// + QDateTime::currentDateTime().toString(Qt::ISODateWithMs));
|
|
int const s = newTextLines.size();
|
|
if (s > 0) {
|
|
QString editText = ui->updateStatus->toPlainText();
|
|
QStringList lines = editText.split('\n', QString::SplitBehavior::SkipEmptyParts);
|
|
QString newText;
|
|
if (lines.size() >= s) {
|
|
for (int i = 0; i < s; ++i) {
|
|
lines.removeLast();
|
|
}
|
|
if (lines.size() > 0) {
|
|
newText = lines.join('\n');
|
|
newText += '\n';
|
|
}
|
|
QStringList newLines;
|
|
for (int i = 0; i < s; ++i) {
|
|
if (i == 0 && !suffix.isNull() && suffix.size() > 0 && suffix != "\n") {
|
|
newLines += Utils::rstrip(newTextLines.at(i).leftJustified(m_width-10) + suffix);
|
|
} else {
|
|
newLines += Utils::rstrip(newTextLines.at(i).leftJustified(m_width-10));
|
|
}
|
|
}
|
|
lines += newLines;
|
|
newText += newLines.join(' ');
|
|
}
|
|
|
|
ui->updateStatus->setText(newText);
|
|
Utils::printLineEditInfo(lines);
|
|
scrollDownTextEdit();
|
|
}
|
|
}
|
|
|
|
void MainWindow::onReplaceLast(QString text, QString suffix) {
|
|
// Utils::printInfoMsg(QString("ON REPLACE LAST (TEXT) CALLED AT ")
|
|
// + QDateTime::currentDateTime().toString(Qt::ISODateWithMs));
|
|
QString editText = ui->updateStatus->toPlainText();
|
|
QStringList lines = editText.split('\n', QString::SplitBehavior::SkipEmptyParts);
|
|
if (lines.size() > 0) {
|
|
// removing the last line is really meant for refreshing the last line
|
|
// with a string very similar than the original one, typically only
|
|
// followed by a suffix.
|
|
if (lines.last().contains(text)) {
|
|
lines.removeLast();
|
|
}
|
|
if (!suffix.isNull() && suffix.size() > 0 && suffix != "\n") {
|
|
QString const add = text.leftJustified(m_width-10) + suffix;
|
|
if (!add.isEmpty()) {
|
|
lines += text.leftJustified(m_width-10) + suffix;
|
|
}
|
|
} else {
|
|
QString const add = text.leftJustified(m_width-10);
|
|
if (!add.isEmpty()) {
|
|
lines += text.leftJustified(m_width-10);
|
|
}
|
|
}
|
|
}
|
|
|
|
Utils::printLineEditInfo(lines);
|
|
ui->updateStatus->setText(lines.join('\n').trimmed());
|
|
scrollDownTextEdit();
|
|
}
|
|
|
|
void MainWindow::onShowMessage(QString title, QString text) {
|
|
this->statusBar()->clearMessage();
|
|
this->statusBar()->showMessage( // timeout: 10000
|
|
QString(title + " " + text).leftJustified(80, ' '), 10000);
|
|
}
|
|
|
|
void MainWindow::onShowErrorMessage(QString title, QString text) {
|
|
onShowMessage(title, text);
|
|
}
|
|
|
|
void MainWindow::onShowStatusMessage(QString title, QString text) {
|
|
onShowMessage(title, text);
|
|
}
|
|
|
|
void MainWindow::onShowErrorMessage(QStringList lst) {
|
|
if (lst.size() >= 2) {
|
|
onShowMessage(lst.at(0), lst.at(1));
|
|
}
|
|
if (lst.size() == 1) {
|
|
onShowMessage(lst.at(0), "");
|
|
}
|
|
}
|
|
|
|
void MainWindow::onShowStatusMessage(QStringList lst) {
|
|
if (lst.size() >= 2) {
|
|
onShowMessage(lst.at(0), lst.at(1));
|
|
}
|
|
if (lst.size() == 1) {
|
|
onShowMessage(lst.at(0), "");
|
|
}
|
|
}
|