From 59f45d44156cd6892f437dc8a6ebd390a0e62138 Mon Sep 17 00:00:00 2001 From: Michael Morgan <84428382+aa5sh@users.noreply.github.com> Date: Sun, 2 Nov 2025 18:17:45 -0600 Subject: [PATCH] WSJT Forward Loop Issue 815 Put logic to check for duplicated Port number that could cause a loop when talking with WSJT applications. --- ui/SettingsDialog.cpp | 46 +++++++++++++++++++++++++++++++++++++++++++ ui/SettingsDialog.h | 1 + 2 files changed, 47 insertions(+) diff --git a/ui/SettingsDialog.cpp b/ui/SettingsDialog.cpp index ae83bea6..a778aa19 100644 --- a/ui/SettingsDialog.cpp +++ b/ui/SettingsDialog.cpp @@ -293,6 +293,12 @@ SettingsDialog::SettingsDialog(MainWindow *parent) : ui->cwKeyModeSelect->addItem(tr("Ultimate"), CWKey::ULTIMATE); ui->cwKeyModeSelect->setCurrentIndex(ui->cwKeyModeSelect->findData(CWKey::IAMBIC_B)); + connect(ui->wsjtPortSpin, QOverload::of(&QSpinBox::valueChanged), + this, &SettingsDialog::validateWsjtForwardPorts); + + connect(ui->wsjtForwardEdit, &QLineEdit::textChanged, + this, &SettingsDialog::validateWsjtForwardPorts); + /* disable WSJTX Multicast by default */ joinMulticastChanged(false); @@ -301,6 +307,46 @@ SettingsDialog::SettingsDialog(MainWindow *parent) : readSettings(); } +void SettingsDialog::validateWsjtForwardPorts() +{ + FCT_IDENTIFICATION; + + int portToCheck = ui->wsjtPortSpin->value(); + QString forwardList = ui->wsjtForwardEdit->text().trimmed(); + + QStringList entries = forwardList.split(' ', Qt::SkipEmptyParts); + + bool portFound = false; + + for (QStringList::const_iterator it = entries.constBegin(); it != entries.constEnd(); ++it) { + QString entry = *it; + QStringList parts = entry.split(':'); + if (parts.size() == 2) { + bool ok = false; + int port = parts[1].toInt(&ok); + if (ok && port == portToCheck) { + portFound = true; + break; + } + } + } + + if (portFound) { + ui->wsjtPortLabel->setToolTip(tr("WSJT Port is duplicated which could cause a loop.")); + ui->wsjtForwardEdit->setToolTip(tr("WSJT Port is duplicated which could cause a loop.")); + QMessageBox::warning(nullptr, QMessageBox::tr("QLog Warning"), + QMessageBox::tr("WSJT Port is duplicated which could cause a loop.")); + ui->wsjtPortLabel->setStyleSheet("color: black; border-radius: 5px; background: yellow;"); + ui->wsjtForwardLabel->setStyleSheet("color: black; border-radius: 5px; background: yellow;"); + + } else { + ui->wsjtPortLabel->setToolTip(""); + ui->wsjtForwardEdit->setToolTip(""); + ui->wsjtPortLabel->setStyleSheet(""); + ui->wsjtForwardLabel->setStyleSheet(""); + } +} + void SettingsDialog::save() { FCT_IDENTIFICATION; diff --git a/ui/SettingsDialog.h b/ui/SettingsDialog.h index a3aa976b..8a6de9ac 100644 --- a/ui/SettingsDialog.h +++ b/ui/SettingsDialog.h @@ -133,6 +133,7 @@ public slots: void generateMembershipCheckboxes(); void generateQRZAPICallsignTable(); void saveQRZAPICallsignTable(); + void validateWsjtForwardPorts(); QSqlTableModel* modeTableModel; QSqlTableModel* bandTableModel;