Compare commits
22 Commits
Author | SHA1 | Date | |
---|---|---|---|
5e9b05e887 | |||
37aae73f21 | |||
0b4eed9dc0 | |||
12f48ad1bb | |||
5d7d1a2870 | |||
5d7f13a254 | |||
d332a990d5 | |||
bfa39eb3df | |||
d7fcfa3d0f | |||
f1e449c108 | |||
32346c2665 | |||
38e7bf4985 | |||
6df73e1082 | |||
19250a0a2f | |||
6f5c8103e4 | |||
07dcf0ba30 | |||
1e379cf086 | |||
e87456f26b | |||
0c9a7bc7b5 | |||
a35c6afcb8 | |||
b06f4f46bb
|
|||
33d45eab2e
|
@@ -14,5 +14,5 @@ dry-run=false
|
||||
extended-version=false
|
||||
yocto-version=false
|
||||
yocto-install=false
|
||||
always-download-config=false
|
||||
always-download-config=true
|
||||
always-download-dc=false
|
||||
|
@@ -64,8 +64,24 @@ DEFINES += QT_DEPRECATED_WARNINGS
|
||||
# given in ATBUpdateTool.ini can be overwritten on the command-line.
|
||||
# 1.3.18: Bug fixes found during testing.
|
||||
# 1.3.19: Bug fixes found during testing.
|
||||
VERSION="1.3.20"
|
||||
# 1.3.20: Bug fixes found during testing.
|
||||
# 1.3.21: Bug fixes found during testing:
|
||||
# Fix directory of ATBUpdateTool.ini to be the working directory of
|
||||
# the application rather than just ".".
|
||||
# Check existance of etc-directory inside customer repository.
|
||||
# Check for valid ISMAS trigger (button) 15x (=90s).
|
||||
# NOTE: if the customer repository is cloned (or repaired and cloned
|
||||
# again), and if the settings always-download-config=true and
|
||||
# always-download-dc=true in the ATBUpdateTool.ini file, the download
|
||||
# the printer-json files and the device controller file, even without
|
||||
# an activated ISMAS trigger (button). The tariff-files are rsynced to
|
||||
# the local filesystem for such clone.
|
||||
# Set new filename for device controller: dc2c.bin.
|
||||
# 1.3.22: Bug fixes found during testing:
|
||||
# Fix the path-names of the json-files and the device-controller.
|
||||
# Set automatic download of json-file in ATBUpdateTool.ini file for
|
||||
# a fresh clone of the repository.
|
||||
VERSION="1.3.23"
|
||||
|
||||
# PLANNED TODOS:
|
||||
# 1: Das Repository wird repariert bwz. neu geklont. Unabhaengig vom WAIT.
|
||||
@@ -96,6 +112,10 @@ VERSION="1.3.20"
|
||||
# Stellung des WAIT-Button. Grund: es koennte sein, dass andernfalls ein
|
||||
# PSA weit hiter anderen steht, und dann ploetzlich einmal alle vorher-
|
||||
# gehenden Aenderungen anzieht, die gar nicht fuer ihn gemeint waren.
|
||||
# 10: Bei einer Neuinstallation (Neuhauser) immer JSON files runterladen,
|
||||
# Tariff-Files syncen (d.h. nur wenn noch kein Repo vorhanden ist), und
|
||||
# zwar auch ohne WAIT-Button.
|
||||
# 11: Das Edit-Fenster teilen um die Anzeige zu verbessern.
|
||||
|
||||
|
||||
win32 {
|
||||
|
@@ -87,7 +87,7 @@ void CommandLineParser::configure() {
|
||||
m_repositoryUrlOption.setDefaultValue("https://git.mimbach49.de/GerhardHoffmann");
|
||||
m_parser.addOption(m_repositoryUrlOption);
|
||||
|
||||
m_iniFileDirectoryOption.setDefaultValue(".");
|
||||
m_iniFileDirectoryOption.setDefaultValue(QCoreApplication::applicationDirPath());
|
||||
m_parser.addOption(m_iniFileDirectoryOption);
|
||||
|
||||
m_iniFileNameOption.setDefaultValue("ATBUpdateTool.ini");
|
||||
@@ -117,10 +117,10 @@ void CommandLineParser::configure() {
|
||||
m_extendedVersionOption.setDefaultValue("false");
|
||||
m_parser.addOption(m_extendedVersionOption);
|
||||
|
||||
m_yoctoVersionOption .setDefaultValue("false");
|
||||
m_yoctoVersionOption.setDefaultValue("false");
|
||||
m_parser.addOption(m_yoctoVersionOption);
|
||||
|
||||
m_yoctoInstallStatusOption .setDefaultValue("false");
|
||||
m_yoctoInstallStatusOption.setDefaultValue("false");
|
||||
m_parser.addOption(m_yoctoInstallStatusOption);
|
||||
}
|
||||
|
||||
@@ -128,7 +128,6 @@ void CommandLineParser::readSettings() {
|
||||
QString const iniFileDir = m_parser.value(m_iniFileDirectoryOption);
|
||||
QString const iniFileName = m_parser.value(m_iniFileNameOption);
|
||||
m_iniFileName = QDir::cleanPath(iniFileDir + QDir::separator() + iniFileName);
|
||||
|
||||
if (!m_iniFileName.isEmpty()) {
|
||||
if (QFile(m_iniFileName).exists()) {
|
||||
QSettings settings(m_iniFileName, QSettings::IniFormat);
|
||||
|
29
interfaces.h
29
interfaces.h
@@ -1834,6 +1834,9 @@ public:
|
||||
virtual uint8_t prn_getPrintResult() const {
|
||||
return 0;
|
||||
}
|
||||
// return: 0: just printing, wait
|
||||
// 1: OK - last print was succesful
|
||||
// 2: error - not printed
|
||||
|
||||
|
||||
|
||||
@@ -2273,7 +2276,32 @@ public:
|
||||
|
||||
|
||||
signals:
|
||||
virtual void hwapi_templatePrintFinished_OK(void) const=0;
|
||||
virtual void hwapi_templatePrintFinished_Err(void) const=0;
|
||||
|
||||
virtual void hwapi_coinCollectionJustStarted(void) const=0;
|
||||
virtual void hwapi_coinCollectionAborted(void) const=0;
|
||||
|
||||
virtual void hwapi_gotNewCoin(void) const=0;
|
||||
virtual void hwapi_payStopByMax(void) const=0;
|
||||
virtual void hwapi_payStopByPushbutton(void) const=0;
|
||||
|
||||
virtual void hwapi_payStopByEscrow(void) const=0;
|
||||
virtual void hwapi_payStopByError(void) const=0;
|
||||
virtual void hwapi_payStopByTimeout(void) const=0;
|
||||
virtual void hwapi_payCancelled(void) const=0;
|
||||
virtual void hwapi_coinProcessJustStopped(void) const=0;
|
||||
|
||||
virtual void hwapi_doorServiceDoorOpened(void) const=0;
|
||||
virtual void hwapi_doorVaultDoorOpened(void) const=0;
|
||||
virtual void hwapi_doorCoinBoxRemoved(void) const=0;
|
||||
virtual void hwapi_doorCoinBoxInserted(void) const=0;
|
||||
virtual void hwapi_doorCBinAndAllDoorsClosed(void) const=0;
|
||||
virtual void hwapi_doorAllDoorsClosed(void) const=0;
|
||||
|
||||
|
||||
// NOTE: declaring a "pure virtual" "signal" should be an error and thus not valid.
|
||||
/* GH Version, bringt Fehler
|
||||
void hwapi_templatePrintFinished_OK() const;
|
||||
void hwapi_templatePrintFinished_Err() const;
|
||||
|
||||
@@ -2296,6 +2324,7 @@ signals:
|
||||
void hwapi_doorCoinBoxInserted() const;
|
||||
void hwapi_doorCBinAndAllDoorsClosed() const;
|
||||
void hwapi_doorAllDoorsClosed() const;
|
||||
*/
|
||||
};
|
||||
|
||||
|
||||
|
@@ -146,7 +146,7 @@ void MainWindow::onEnableExit() {
|
||||
|
||||
void MainWindow::onRestartExitTimer() {
|
||||
m_exitTimer->stop();
|
||||
m_exitTimer->start(60 * 1000);
|
||||
m_exitTimer->start(5 * 1000);
|
||||
|
||||
scrollDownTextEdit();
|
||||
ui->updateStatus->setEnabled(false);
|
||||
|
213
update.cpp
213
update.cpp
@@ -376,24 +376,32 @@ bool Update::downloadJson(enum FileTypeJson type,
|
||||
templateIdx,
|
||||
(uint8_t *)ba.data())) {
|
||||
|
||||
m_hw->dc_autoRequest(true);
|
||||
QThread::msleep(500);
|
||||
/*
|
||||
* Note: the machine id is contained in DC2C_conf.json.
|
||||
* The idea was to use this to check if the download of
|
||||
* the json-file was correct. It did not work, as the
|
||||
* update of the PSA (to reflect a change in the
|
||||
* machine id) did not happen immediately.
|
||||
*
|
||||
m_hw->dc_autoRequest(true);
|
||||
QThread::msleep(500);
|
||||
|
||||
// testing
|
||||
m_hw->request_ReadbackMachineID();
|
||||
QThread::msleep(500);
|
||||
// testing
|
||||
m_hw->request_ReadbackMachineID();
|
||||
QThread::msleep(500);
|
||||
|
||||
uint8_t data[64];
|
||||
memset(data, 0x00, sizeof(data));
|
||||
uint8_t length = 0;
|
||||
uint8_t data[64];
|
||||
memset(data, 0x00, sizeof(data));
|
||||
uint8_t length = 0;
|
||||
|
||||
m_hw->readback_machineIDdata(&length, data);
|
||||
m_hw->readback_machineIDdata(&length, data);
|
||||
|
||||
QThread::msleep(500);
|
||||
QThread::msleep(500);
|
||||
|
||||
QByteArray ba((const char*)data, length);
|
||||
QByteArray ba((const char*)data, length);
|
||||
|
||||
qCritical() << length << "MACHINE ID =" << ba.toHex(':');
|
||||
qCritical() << length << "MACHINE ID =" << ba.toHex(':');
|
||||
*/
|
||||
|
||||
ret = true;
|
||||
}
|
||||
@@ -494,6 +502,86 @@ QStringList Update::getDcSoftAndHardWareVersion() {
|
||||
<< "DC SW-version not available";
|
||||
}
|
||||
|
||||
QString Update::getFileVersion(QString const& jsonFileName) {
|
||||
// "version":"15.10.2023 14:55 02.00.06",
|
||||
static const QRegularExpression re("^.*(\\\"version\\\":)(.*)$");
|
||||
|
||||
QString fileVersion;
|
||||
QFile inputFile(jsonFileName);
|
||||
if (inputFile.open(QIODevice::ReadOnly)) {
|
||||
QTextStream in(&inputFile);
|
||||
while (!in.atEnd()) {
|
||||
QString line = in.readLine();
|
||||
|
||||
QRegularExpressionMatch match;
|
||||
int idx = line.indexOf(re, 0, &match);
|
||||
if (idx != -1) {
|
||||
fileVersion = match.captured(match.lastCapturedIndex());
|
||||
break;
|
||||
}
|
||||
}
|
||||
inputFile.close();
|
||||
}
|
||||
|
||||
return fileVersion;
|
||||
}
|
||||
|
||||
bool Update::checkDownloadedJsonVersions(QStringList const& jsonFileNames) {
|
||||
|
||||
for (QStringList::size_type i=0; i < jsonFileNames.size(); ++i) {
|
||||
|
||||
uint8_t jsonNr = 0;
|
||||
QFileInfo fInfo(jsonFileNames[i]);
|
||||
|
||||
if (fInfo.fileName().endsWith("conf.json")) {
|
||||
jsonNr = 1;
|
||||
} else
|
||||
if (fInfo.fileName().endsWith("device.json")) {
|
||||
jsonNr = 2;
|
||||
} else
|
||||
if (fInfo.fileName().endsWith("cash.json")) {
|
||||
jsonNr = 3;
|
||||
} else {
|
||||
QRegularExpressionMatch match;
|
||||
static const QRegularExpression re("^(.*print)([0-3][0-9])\\.json\\s*$");
|
||||
int idx = fInfo.fileName().indexOf(re, 0, &match);
|
||||
if (idx != -1) {
|
||||
QString captured = match.captured(match.lastCapturedIndex());
|
||||
bool ok = false;
|
||||
int n = captured.toInt(&ok);
|
||||
if (ok) {
|
||||
jsonNr = n + 4;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (jsonNr != 0) {
|
||||
|
||||
m_hw->sys_requestJsonVersions(jsonNr);
|
||||
QThread::msleep(500);
|
||||
|
||||
char buf[64];
|
||||
memset(buf, 0x00, sizeof(buf));
|
||||
m_hw->sys_getJsonVersions(jsonNr, buf);
|
||||
buf[sizeof(buf)-1] = '\0';
|
||||
|
||||
QString const installedVersion(buf);
|
||||
QString const fileVersion = getFileVersion(jsonFileNames[i]);
|
||||
|
||||
qCritical() << "installed version:" << installedVersion;
|
||||
qCritical() << " file version:" << fileVersion;
|
||||
|
||||
if (installedVersion == fileVersion) {
|
||||
|
||||
}
|
||||
} else {
|
||||
qCritical() << "CANNOT FIND JSON-NR FOR" << jsonFileNames[i];
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Update::doUpdate(int &displayIndex, QStringList const &filesToWorkOn) {
|
||||
if (m_sys_areDCdataValid == false) {
|
||||
qCritical() << "ERROR!!! DC DATA NOT VALID -> CA-MASTER-PLUGIN NOT CONNECTED";
|
||||
@@ -504,9 +592,10 @@ bool Update::doUpdate(int &displayIndex, QStringList const &filesToWorkOn) {
|
||||
QList<QString>::const_iterator it;
|
||||
for (it = filesToWorkOn.cbegin(); it != filesToWorkOn.cend(); ++it) {
|
||||
m_worker->startProgressLoop();
|
||||
|
||||
QString const &fToWorkOn = QDir::cleanPath(m_customerRepository + QDir::separator() + it->trimmed());
|
||||
static const QRegularExpression version("^.*dc2c[.][0-9]{1,2}[.][0-9]{1,2}[.]bin.*$");
|
||||
if (fToWorkOn.contains(version)) {
|
||||
|
||||
if (fToWorkOn.contains("dc2c.bin")) {
|
||||
bool updateBinaryRes = true;
|
||||
|
||||
// CONSOLE()
|
||||
@@ -542,62 +631,62 @@ bool Update::doUpdate(int &displayIndex, QStringList const &filesToWorkOn) {
|
||||
|
||||
res = updateBinaryRes;
|
||||
|
||||
} else if (fToWorkOn.contains("DC2C_print", Qt::CaseInsensitive)
|
||||
} else {
|
||||
if (fToWorkOn.contains("DC2C_print", Qt::CaseInsensitive)
|
||||
&& fToWorkOn.endsWith(".json", Qt::CaseInsensitive)) {
|
||||
res = true;
|
||||
int i = fToWorkOn.indexOf("DC2C_print", Qt::CaseInsensitive);
|
||||
int const templateIdx = fToWorkOn.mid(i).midRef(10, 2).toInt();
|
||||
if ((templateIdx < 1) || (templateIdx > 32)) {
|
||||
qCritical() << "WRONG TEMPLATE INDEX" << templateIdx;
|
||||
res = false;
|
||||
} else {
|
||||
if ((res = updatePrinterTemplate(templateIdx, fToWorkOn))) {
|
||||
Utils::printInfoMsg(
|
||||
QString("DOWNLOADED PRINTER TEMPLATE %1 WITH INDEX=%2")
|
||||
.arg(fToWorkOn)
|
||||
.arg(templateIdx));
|
||||
res = true;
|
||||
int i = fToWorkOn.indexOf("DC2C_print", Qt::CaseInsensitive);
|
||||
int const templateIdx = fToWorkOn.mid(i).midRef(10, 2).toInt();
|
||||
if ((templateIdx < 1) || (templateIdx > 32)) {
|
||||
qCritical() << "WRONG TEMPLATE INDEX" << templateIdx;
|
||||
res = false;
|
||||
} else {
|
||||
if ((res = updatePrinterTemplate(templateIdx, fToWorkOn))) {
|
||||
Utils::printInfoMsg(
|
||||
QString("DOWNLOADED PRINTER TEMPLATE %1 WITH INDEX=%2")
|
||||
.arg(fToWorkOn)
|
||||
.arg(templateIdx));
|
||||
++displayIndex;
|
||||
emit m_worker->appendText(QString("\n(") + QString("%1").arg(displayIndex).rightJustified(3, ' ') + QString(")")
|
||||
+ QString(" Update ") + QFileInfo(fToWorkOn).fileName(),
|
||||
Worker::UPDATE_STEP_DONE);
|
||||
}
|
||||
}
|
||||
} else if (fToWorkOn.contains("DC2C_cash", Qt::CaseInsensitive)
|
||||
&& fToWorkOn.endsWith(".json", Qt::CaseInsensitive)) {
|
||||
res = true;
|
||||
if ((res = updateCashConf(fToWorkOn))) {
|
||||
Utils::printInfoMsg(QString("DOWNLOADED CASH TEMPLATE %1").arg(fToWorkOn));
|
||||
++displayIndex;
|
||||
emit m_worker->appendText(QString("\n(") + QString("%1").arg(displayIndex).rightJustified(3, ' ') + QString(")")
|
||||
+ QString(" Update ") + QFileInfo(fToWorkOn).fileName(),
|
||||
Worker::UPDATE_STEP_DONE);
|
||||
}
|
||||
} else if (fToWorkOn.contains("DC2C_conf", Qt::CaseInsensitive)
|
||||
&& fToWorkOn.endsWith(".json", Qt::CaseInsensitive)) {
|
||||
res = true;
|
||||
if ((res= updateConfig(fToWorkOn))) {
|
||||
Utils::printInfoMsg(QString("DOWNLOADED CONFIG TEMPLATE %1").arg(fToWorkOn));
|
||||
++displayIndex;
|
||||
emit m_worker->appendText(QString("\n(") + QString("%1").arg(displayIndex).rightJustified(3, ' ') + QString(")")
|
||||
+ QString(" Update ") + QFileInfo(fToWorkOn).fileName(),
|
||||
Worker::UPDATE_STEP_DONE);
|
||||
}
|
||||
} else if (fToWorkOn.contains("DC2C_device", Qt::CaseInsensitive)
|
||||
&& fToWorkOn.endsWith(".json", Qt::CaseInsensitive)) {
|
||||
res = true;
|
||||
if ((res = updateDeviceConf(fToWorkOn))) {
|
||||
Utils::printInfoMsg(QString("DOWNLOADED DEVICE TEMPLATE %1").arg(fToWorkOn));
|
||||
++displayIndex;
|
||||
emit m_worker->appendText(QString("\n(") + QString("%1").arg(displayIndex).rightJustified(3, ' ') + QString(")")
|
||||
+ QString(" Update ") + QFileInfo(fToWorkOn).fileName(),
|
||||
Worker::UPDATE_STEP_DONE);
|
||||
}
|
||||
} else {
|
||||
qCritical() << "UNKNOWN JSON FILE NAME" << fToWorkOn;
|
||||
res = false;
|
||||
}
|
||||
} else if (fToWorkOn.contains("DC2C_cash", Qt::CaseInsensitive)
|
||||
&& fToWorkOn.endsWith(".json", Qt::CaseInsensitive)) {
|
||||
res = true;
|
||||
if ((res = updateCashConf(fToWorkOn))) {
|
||||
Utils::printInfoMsg(QString("DOWNLOADED CASH TEMPLATE %1").arg(fToWorkOn));
|
||||
++displayIndex;
|
||||
emit m_worker->appendText(QString("\n(") + QString("%1").arg(displayIndex).rightJustified(3, ' ') + QString(")")
|
||||
+ QString(" Update ") + QFileInfo(fToWorkOn).fileName(),
|
||||
Worker::UPDATE_STEP_DONE);
|
||||
}
|
||||
} else if (fToWorkOn.contains("DC2C_conf", Qt::CaseInsensitive)
|
||||
&& fToWorkOn.endsWith(".json", Qt::CaseInsensitive)) {
|
||||
res = true;
|
||||
if ((res= updateConfig(fToWorkOn))) {
|
||||
Utils::printInfoMsg(QString("DOWNLOADED CONFIG TEMPLATE %1").arg(fToWorkOn));
|
||||
++displayIndex;
|
||||
emit m_worker->appendText(QString("\n(") + QString("%1").arg(displayIndex).rightJustified(3, ' ') + QString(")")
|
||||
+ QString(" Update ") + QFileInfo(fToWorkOn).fileName(),
|
||||
Worker::UPDATE_STEP_DONE);
|
||||
}
|
||||
} else if (fToWorkOn.contains("DC2C_device", Qt::CaseInsensitive)
|
||||
&& fToWorkOn.endsWith(".json", Qt::CaseInsensitive)) {
|
||||
res = true;
|
||||
if ((res = updateDeviceConf(fToWorkOn))) {
|
||||
Utils::printInfoMsg(QString("DOWNLOADED DEVICE TEMPLATE %1").arg(fToWorkOn));
|
||||
++displayIndex;
|
||||
emit m_worker->appendText(QString("\n(") + QString("%1").arg(displayIndex).rightJustified(3, ' ') + QString(")")
|
||||
+ QString(" Update ") + QFileInfo(fToWorkOn).fileName(),
|
||||
Worker::UPDATE_STEP_DONE);
|
||||
}
|
||||
} else {
|
||||
qCritical() << "UNKNOWN JSON FILE NAME" << fToWorkOn;
|
||||
res = false;
|
||||
}
|
||||
// m_worker->stopProgressLoop();
|
||||
// m_worker->setProgress(100);
|
||||
|
||||
if (res == false) {
|
||||
break;
|
||||
|
2
update.h
2
update.h
@@ -58,6 +58,7 @@ public:
|
||||
char const *baudrate = "115200");
|
||||
virtual ~Update() override;
|
||||
bool doUpdate(int &displayIndex, QStringList const &linesToWorkOn);
|
||||
bool checkDownloadedJsonVersions(QStringList const& jsonFileNames);
|
||||
|
||||
hwinf *hw() { return m_hw; }
|
||||
hwinf const *hw() const { return m_hw; }
|
||||
@@ -87,6 +88,7 @@ private:
|
||||
bool downloadJson(enum FileTypeJson type, int templateIdx,
|
||||
QString jsFileToSendToDC) const;
|
||||
QStringList getDcSoftAndHardWareVersion();
|
||||
QString getFileVersion(QString const& jsonFile);
|
||||
|
||||
private slots:
|
||||
void readyReadStandardOutput();
|
||||
|
90
worker.cpp
90
worker.cpp
@@ -214,6 +214,12 @@ bool Worker::isRepositoryCorrupted() {
|
||||
Utils::printCriticalErrorMsg("CORRUPTED CUSTOMER REPOSITORY .GIT DOES NOT EXIST");
|
||||
return true;
|
||||
}
|
||||
QDir customerRepositoryEtc(QDir::cleanPath(m_customerRepository + QDir::separator() + "etc/"));
|
||||
if (!customerRepositoryEtc.exists()) {
|
||||
// should never happen
|
||||
Utils::printCriticalErrorMsg(QString("CORRUPTED CUSTOMER REPOSITORY %1/etc DOES NOT EXIST").arg(m_customerRepository));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@@ -334,21 +340,30 @@ void Worker::privateUpdate() {
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
m_ismasTriggerActive = false;
|
||||
if ((continueUpdate = updateTriggerSet()) == false) {
|
||||
if (m_clone == false) {
|
||||
if ((continueUpdate = updateTriggerSet()) == false) {
|
||||
return;
|
||||
} else {
|
||||
GUI() << (ISMAS() << (CONSOLE() << UPDATE_STEP::CHECK_ISMAS_TRIGGER_SUCCESS));
|
||||
setProgress(_CHECK_ISMAS_TRIGGER_SUCCESS);
|
||||
}
|
||||
} else {
|
||||
if (m_initialClone) {
|
||||
GUI() << (ISMAS() << (CONSOLE() << UPDATE_STEP::INITIAL_CLONE_WITHOUT_ACTIVE_ISMAS_TRIGGER));
|
||||
}
|
||||
return;
|
||||
} else {
|
||||
GUI() << (ISMAS() << (CONSOLE() << UPDATE_STEP::INITIAL_CLONE_WITH_ACTIVE_ISMAS_TRIGGER));
|
||||
}
|
||||
|
||||
qCritical() << "**** m_ismasTriggerActive:" << m_ismasTriggerActive;
|
||||
qCritical() << "**** m_clone:" << m_clone;
|
||||
|
||||
if (m_ismasTriggerActive == false) {// make it explicit again: only if the
|
||||
// ismas trigger is active ('WAIT'),
|
||||
// then proceed
|
||||
return;
|
||||
}
|
||||
GUI() << (ISMAS() << (CONSOLE() << UPDATE_STEP::CHECK_ISMAS_TRIGGER_SUCCESS));
|
||||
setProgress(_CHECK_ISMAS_TRIGGER_SUCCESS);
|
||||
|
||||
if (m_clone == false) { // if it is an (initial) clone, then
|
||||
return; // run the whole update process:
|
||||
} // sync tariff-files, download jsons,
|
||||
} // download device controller
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
@@ -458,8 +473,8 @@ bool Worker::updateTriggerSet() {
|
||||
GUI() << (ISMAS() << (CONSOLE() << UPDATE_STEP::CHECK_ISMAS_TRIGGER));
|
||||
|
||||
QString triggerValue("NOT CHECKED YET");
|
||||
|
||||
for (int repeat = 1; repeat <= 100; ++repeat) {
|
||||
static constexpr int const repeats = 15;
|
||||
for (int repeat = 1; repeat <= repeats; ++repeat) {
|
||||
|
||||
if (repeat > 1) {
|
||||
int const startMs = QTime::currentTime().msecsSinceStartOfDay();
|
||||
@@ -467,10 +482,12 @@ bool Worker::updateTriggerSet() {
|
||||
QString const &s = QString("elapsed: %1.%2s").arg(durationMs / 1000).arg(durationMs % 1000);
|
||||
CONSOLE(QStringList(func) << s) << UPDATE_STEP::DEBUG;
|
||||
} else {
|
||||
CONSOLE(QStringList(func) << QString("-> REPEAT=%1").arg(repeat)) << UPDATE_STEP::DEBUG;
|
||||
QStringList lst = (QStringList(func) << QString("-> REPEAT=%1 (%2)").arg(repeat).arg(repeats-repeat));
|
||||
// GUI(lst) << UPDATE_STEP::CHECK_ISMAS_TRIGGER;
|
||||
CONSOLE(lst) << UPDATE_STEP::DEBUG;
|
||||
}
|
||||
|
||||
if ((repeat % 10) == 0) {
|
||||
if ((repeat % 8) == 0) {
|
||||
CONSOLE(QStringList(func) << "RESTART APISM") << UPDATE_STEP::DEBUG;
|
||||
Command c("systemctl restart apism");
|
||||
if (c.execute("/tmp")) {
|
||||
@@ -560,7 +577,7 @@ bool Worker::updateTriggerSet() {
|
||||
return m_ismasTriggerActive;
|
||||
} else
|
||||
if (QRegExp("\\s*").exactMatch(triggerValue)) { // check for whitespace
|
||||
QStringList lst("empty update trigger");
|
||||
QStringList lst(QString("%1 empty update trigger (%2)").arg(repeat).arg(repeats-repeat));
|
||||
if (m_clone) {
|
||||
GUI(lst) << (CONSOLE(lst) << UPDATE_STEP::CHECK_ISMAS_TRIGGER_WRONG_VALUE);
|
||||
// if the customer repository has just been cloned
|
||||
@@ -642,37 +659,31 @@ bool Worker::filesToUpdate() {
|
||||
// always execute contents of opkg_commands-file
|
||||
m_filesToUpdate << "etc/psa_update/opkg_commands";
|
||||
|
||||
if (m_alwaysDownloadConfig) {
|
||||
#if 0
|
||||
QStringList lst(QString("m_alwaysDownloadConfig NOT TESTED"));
|
||||
CONSOLE(lst) << UPDATE_STEP::UPDATE_REPOSITORY;
|
||||
if (m_clone && m_alwaysDownloadConfig) {
|
||||
// always download all json-config files, even if none of them have been
|
||||
// changed in the git repository. useful for first installation.
|
||||
QDir dir(QDir::cleanPath(m_customerRepository + QDir::separator() + "etc/psa_config"));
|
||||
if (dir.exists()) {
|
||||
QStringList jsons = dir.entryList(QStringList() << "DC2C*.json", QDir::Files);
|
||||
if (!jsons.isEmpty()) {
|
||||
m_filesToUpdate << jsons;
|
||||
for (QStringList::size_type i=0; i<jsons.size(); ++i) {
|
||||
m_filesToUpdate << QDir::cleanPath(QString("etc/psa_config/") + jsons.at(i));
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
if (m_alwaysDownloadDC) {
|
||||
#if 0
|
||||
QStringList lst(QString("m_alwaysDownloadDC NOT TESTED"));
|
||||
CONSOLE(lst) << UPDATE_STEP::UPDATE_REPOSITORY;
|
||||
if (m_clone && m_alwaysDownloadDC) {
|
||||
// always download the last dc-binary, even if not changed in the
|
||||
// git repository. useful for first installation.
|
||||
QDir dir(QDir::cleanPath(m_customerRepository + QDir::separator() + "etc/psa_update"));
|
||||
QDir dir(QDir::cleanPath(m_customerRepository + QDir::separator() + "etc/dc"));
|
||||
if (dir.exists()) {
|
||||
QStringList dc = dir.entryList(QStringList() << "dc2c*.bin", QDir::Files,
|
||||
QStringList dc = dir.entryList(QStringList() << "dc2c.bin", QDir::Files,
|
||||
QDir::SortFlag::Time | QDir::SortFlag::Reversed);
|
||||
if (!dc.isEmpty()) {
|
||||
m_filesToUpdate << dc.first();
|
||||
m_filesToUpdate << QDir::cleanPath(QString("etc/dc/") + dc.first());
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
if (std::optional<QString> changes = m_gc.gitPull()) {
|
||||
@@ -705,8 +716,7 @@ bool Worker::computeFilesToDownload() {
|
||||
fName.contains("DC2C_cash", Qt::CaseInsensitive)) {
|
||||
m_filesToDownload << fName; // download printer-config-files
|
||||
} else {
|
||||
static const QRegularExpression version("^.*dc2c[.][0-9]{1,2}[.][0-9]{1,2}[.]bin.*$");
|
||||
if (fName.contains(version)) {
|
||||
if (fName.contains("dc2c.bin")) {
|
||||
m_filesToDownload << fName; // download device controller
|
||||
}
|
||||
}
|
||||
@@ -727,7 +737,7 @@ bool Worker::execOpkgCommands() {
|
||||
if (f.open(QIODevice::ReadOnly)) {
|
||||
QTextStream in(&f);
|
||||
m_opkgCommands.clear();
|
||||
bool executeOpkgCommandFailed = false;
|
||||
QStringList opkgErrorLst;
|
||||
while (!in.atEnd()) {
|
||||
QString line = in.readLine();
|
||||
static const QRegularExpression comment("^\\s*#.*$");
|
||||
@@ -735,7 +745,7 @@ bool Worker::execOpkgCommands() {
|
||||
// found opkg command
|
||||
QString opkgCommand = line.trimmed();
|
||||
if (!executeOpkgCommand(opkgCommand)) {
|
||||
executeOpkgCommandFailed = true;
|
||||
opkgErrorLst << opkgCommand;
|
||||
} else {
|
||||
QString cmd = "\n " + opkgCommand;
|
||||
emit appendText(cmd);
|
||||
@@ -789,14 +799,15 @@ bool Worker::execOpkgCommands() {
|
||||
}
|
||||
}
|
||||
f.close();
|
||||
if (!executeOpkgCommandFailed) {
|
||||
if (opkgErrorLst.size() == 0) {
|
||||
if (m_opkgCommands.size() > 0) {
|
||||
m_displayIndex = 1;
|
||||
GUI() << UPDATE_STEP::EXEC_OPKG_COMMAND_SUCCESS;
|
||||
ISMAS() << (GUI() << (CONSOLE() << UPDATE_STEP::EXEC_OPKG_COMMAND_SUCCESS));
|
||||
setProgress(_EXEC_OPKG_COMMAND_SUCCESS);
|
||||
}
|
||||
} else {
|
||||
m_displayIndex = 1;
|
||||
ISMAS(opkgErrorLst) << (GUI(opkgErrorLst) << (CONSOLE() << UPDATE_STEP::EXEC_OPKG_COMMAND_FAILURE));
|
||||
GUI() << UPDATE_STEP::EXEC_OPKG_COMMAND_FAILURE;
|
||||
setProgress(_EXEC_OPKG_COMMAND_FAILURE);
|
||||
return false;
|
||||
@@ -827,7 +838,16 @@ bool Worker::downloadFilesToPSAHardware() {
|
||||
m_pluginName,
|
||||
m_workingDirectory);
|
||||
|
||||
return update.doUpdate(m_displayIndex, m_filesToDownload);
|
||||
if (update.doUpdate(m_displayIndex, m_filesToDownload)) {
|
||||
// prepared for use: at the moment, the dc-library does not work
|
||||
// as expected.
|
||||
|
||||
// static const QRegularExpression re("^.*\\.json$");
|
||||
// return update.checkDownloadedJsonVersions(m_filesToDownload.filter(re));
|
||||
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
} else {
|
||||
CONSOLE(QStringList("NO FILES TO DOWNLOAD TO PSA-HW")) << UPDATE_STEP::DOWNLOAD_FILES_TO_PSA_HARDWARE_FAILURE;
|
||||
setProgress(_DOWNLOAD_FILES_TO_PSA_HARDWARE_FAILURE);
|
||||
@@ -847,7 +867,7 @@ bool Worker::syncCustomerRepositoryAndFS() {
|
||||
QStringList() << "-c" << "mkdir -p /etc/psa_config /etc/dc /etc/psa_tariff")) {
|
||||
qCritical() << "COULD NOT EXECUTE '" << md.command() << "' exitCode=(" << md.exitCode() << ")";
|
||||
}
|
||||
QString const params("-vvv "
|
||||
QString const params("-v "
|
||||
"--recursive "
|
||||
"--progress "
|
||||
"--checksum "
|
||||
|
9
worker.h
9
worker.h
@@ -557,8 +557,10 @@ private:
|
||||
break;
|
||||
case UPDATE_STEP::EXEC_OPKG_COMMAND_SUCCESS:
|
||||
break;
|
||||
case UPDATE_STEP::EXEC_OPKG_COMMAND_FAILURE:
|
||||
break;
|
||||
case UPDATE_STEP::EXEC_OPKG_COMMAND_FAILURE: {
|
||||
lst << instance->m_debugMsg;
|
||||
Utils::printUpdateStatusMsg(debug, lst);
|
||||
} break;
|
||||
case UPDATE_STEP::DOWNLOAD_CONFIG_FILE:
|
||||
break;
|
||||
case UPDATE_STEP::DOWNLOAD_CONFIG_FILE_SUCCESS:
|
||||
@@ -1125,6 +1127,9 @@ private:
|
||||
break;
|
||||
case UPDATE_STEP::CHECK_ISMAS_TRIGGER:
|
||||
emit worker->appendText("\n" CHECK_UPDATE_TRIGGER_SET);
|
||||
if (worker->m_guiMsg.size() > 0) {
|
||||
emit worker->showStatusMessage(worker->m_guiMsg);
|
||||
}
|
||||
break;
|
||||
case UPDATE_STEP::CHECK_ISMAS_TRIGGER_SUCCESS:
|
||||
break;
|
||||
|
Reference in New Issue
Block a user