From c065b57f0c34b38c620287f4378852a67bfae994 Mon Sep 17 00:00:00 2001 From: Gerhard Hoffmann Date: Wed, 6 Sep 2023 09:04:43 +0200 Subject: [PATCH] Remove direct member m_hw, a pointer to the device-controller-plugin. The worker shall not load the plugin, otherwise it would block itself inside an QT slot. --- worker.cpp | 57 +++++++++++++++++++++++++++++++++++++++++------------- worker.h | 12 +++++++++--- 2 files changed, 53 insertions(+), 16 deletions(-) diff --git a/worker.cpp b/worker.cpp index 17ffc43..6a5c050 100644 --- a/worker.cpp +++ b/worker.cpp @@ -31,28 +31,31 @@ QString const Worker::UPDATE_STEP_DONE(" [done]"); QString const Worker::UPDATE_STEP_FAIL(" [FAIL]"); QString const Worker::UPDATE_STEP_SUCCESS(" [SUCCESS]"); -Worker::Worker(hwinf *hw, - int customerNr, +Worker::Worker(int customerNr, int machineNr, int zoneNr, QString branchName, + QString pluginName, QString workingDirectory, bool dryRun, QObject *parent, char const *serialInterface, char const *baudrate) - : m_hw(hw) - , m_workerThread("workerThread") + : m_workerThread("workerThread") , m_customerNr(customerNr) , m_customerNrStr(QString("customer_") + QString::number(m_customerNr).rightJustified(3, '0')) , m_machineNr(machineNr) , m_zoneNr(zoneNr) + , m_pluginName(pluginName) , m_workingDirectory(workingDirectory) , m_branchName(branchName) , m_customerRepositoryPath(QString("https://git.mimbach49.de/GerhardHoffmann/%1.git").arg(m_customerNrStr)) , m_customerRepository(QDir::cleanPath(m_workingDirectory + QDir::separator() + m_customerNrStr)) - , m_update(new Update(m_hw, this, m_customerRepository, m_customerNrStr, m_branchName, - m_workingDirectory, dryRun, parent, serialInterface, baudrate)) + , m_dryRun(dryRun) + , m_parent(parent) + , m_serialInterface(serialInterface) + , m_baudrate(baudrate) + , m_update(nullptr) , m_gc(m_customerNrStr, m_customerRepository, m_workingDirectory, m_branchName, this) , m_osVersion(getOsVersion()) , m_atbqtVersion(getATBQTVersion()) @@ -70,7 +73,7 @@ Worker::Worker(hwinf *hw, , m_updateProcessRunning(true) , m_returnCode(0) , m_progressValue(0) - , m_withoutIsmasDirectPort(false) /* useful for testing */ { + , m_withoutIsmasDirectPort(true) /* useful for testing */ { QDir::setCurrent(m_workingDirectory); @@ -95,6 +98,7 @@ Worker::Worker(hwinf *hw, qInfo() << "MACHINE_NR ................." << m_machineNr; qInfo() << "ZONE_NR ...................." << m_zoneNr; qInfo() << "BRANCH_NAME ................" << m_branchName; + qInfo() << "PLUGIN_NAME ................" << m_pluginName; qInfo() << "WORKING_DIRECTORY .........." << m_workingDirectory; qInfo() << "APISM VERSION .............." << m_apismVersion; @@ -149,10 +153,14 @@ void Worker::update() { } void Worker::privateUpdate() { + if (!m_mainWindow) { + Utils::printCriticalErrorMsg("m_mainWindow NOT SET"); + return; + } + m_updateProcessRunning = true; bool sentIsmasLastVersionNotification = false; - emit disableExit(); m_returnCode = -1; @@ -845,7 +853,7 @@ bool Worker::updateFiles(quint8 percent) { if (fName.contains("print", Qt::CaseInsensitive)) { filesToDownload << fName; // download printer-config-files } else { - static const QRegularExpression version("^.*dc2c[.][0-9][0-9][.][0-9][0-9][.]bin.*$"); + static const QRegularExpression version("^.*dc2c[.][0-9]{0,1}[0-9][.][0-9][0-9][.]bin.*$"); if (fName.contains(version)) { filesToDownload << fName; // download device controller } @@ -858,7 +866,21 @@ bool Worker::updateFiles(quint8 percent) { if (filesToDownload.size() > 0) { Utils::printInfoMsg(QString("FILES_TO_DOWNLOAD_TO_PSA_HW ") + filesToDownload.join(',')); + + m_update = new Update(m_mainWindow->getPlugin(), + this, + m_customerRepository, + m_customerNrStr, + m_branchName, + m_pluginName, + m_workingDirectory, + m_dryRun, + m_parent, + m_serialInterface.toStdString().c_str(), + m_baudrate.toStdString().c_str()); + ret = m_update->doUpdate(m_displayIndex, filesToDownload); + } else { Utils::printCriticalErrorMsg("NO FILES_TO_DOWNLOAD_TO_PSA_HW"); } @@ -1017,14 +1039,15 @@ QString Worker::getPluginVersion(QString const &pluginFileName) const { QStringList Worker::getDCVersion() const { QStringList lst = (QStringList() << "N/A" << "N/A"); - if (m_hw) { - m_hw->dc_autoRequest(true); // turn auto-request setting on + hwinf *hwi = m_mainWindow->getPlugin(); + if (hwi) { + hwi->dc_autoRequest(true); // turn auto-request setting on QByteArray const cmp(8, char(0)); QByteArray hw(""), sw(""); for (int i=0; i<5; ++i) { - hw = m_hw->dc_getHWversion().toUtf8(); - sw = m_hw->dc_getSWversion().toUtf8(); + hw = hwi->dc_getHWversion().toUtf8(); + sw = hwi->dc_getSWversion().toUtf8(); if (!hw.startsWith(cmp)) { lst.clear(); qInfo() << hw << sw; @@ -1157,6 +1180,14 @@ PSAInstalled Worker::getPSAInstalled() { return psaInstalled; } +hwinf *Worker::getPlugin() { + return m_mainWindow ? m_mainWindow->getPlugin() : nullptr; +} + +hwinf const *Worker::getPlugin() const { + return m_mainWindow ? m_mainWindow->getPlugin() : nullptr; +} + /************************************************************************************************ * operators */ diff --git a/worker.h b/worker.h index 54d0ddf..3907c25 100644 --- a/worker.h +++ b/worker.h @@ -74,16 +74,20 @@ class hwinf; class Worker : public QObject { Q_OBJECT - hwinf *m_hw; WorkerThread m_workerThread; int const m_customerNr; QString const m_customerNrStr; int const m_machineNr; int const m_zoneNr; + QString const m_pluginName; QString const m_workingDirectory; QString const m_branchName; QString const m_customerRepositoryPath; QString const m_customerRepository; + bool const m_dryRun; + QObject *m_parent; + QString const m_serialInterface; + QString const m_baudrate; Update *m_update; IsmasClient m_ismasClient; GitClient m_gc; @@ -130,11 +134,11 @@ public: static const QString UPDATE_STEP_FAIL; static const QString UPDATE_STEP_SUCCESS; - explicit Worker(hwinf *hw, - int customerNr, // 281 + explicit Worker(int customerNr, // 281 int machineNr, int zoneNr, QString branchName, + QString pluginName, QString workingDir = ".", bool dryRun = false, QObject *parent = nullptr, @@ -143,6 +147,8 @@ public: ~Worker(); void setMainWindow(MainWindow *mainWindow) { m_mainWindow = mainWindow; } + hwinf *getPlugin(); + hwinf const *getPlugin() const; void setProgress(int progress); void startProgressLoop(); void stopProgressLoop();