Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package QLog for openSUSE:Factory checked in at 2025-12-22 22:49:03 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/QLog (Old) and /work/SRC/openSUSE:Factory/.QLog.new.1928 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "QLog" Mon Dec 22 22:49:03 2025 rev:11 rq:1323881 version:0.47.1 Changes: -------- --- /work/SRC/openSUSE:Factory/QLog/QLog.changes 2025-12-08 11:55:54.286390456 +0100 +++ /work/SRC/openSUSE:Factory/.QLog.new.1928/QLog.changes 2025-12-22 22:51:17.342089673 +0100 @@ -1,0 +2,11 @@ +Sun Dec 21 08:31:32 UTC 2025 - Andreas Stieger <[email protected]> + +- Update to version 0.47.1: + * DXC - VE7CC-type Cluster is correctly detected + * Chat - Changed ON4KST URL + * Fixed Missing clear button for Search Callsign + * Fixed Updated QSOs are not sent to Wavelog + * Fixed ADI Header does not follow ADIF Spec + * Fixed OmniRig settings are not saved + +------------------------------------------------------------------- Old: ---- QLog-0.47.0.obscpio New: ---- QLog-0.47.1.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ QLog.spec ++++++ --- /var/tmp/diff_new_pack.Vho2FJ/_old 2025-12-22 22:51:18.566140104 +0100 +++ /var/tmp/diff_new_pack.Vho2FJ/_new 2025-12-22 22:51:18.566140104 +0100 @@ -17,7 +17,7 @@ Name: QLog -Version: 0.47.0 +Version: 0.47.1 Release: 0 Summary: Amateur radio logbook software License: GPL-3.0-or-later ++++++ QLog-0.47.0.obscpio -> QLog-0.47.1.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/QLog-0.47.0/Changelog new/QLog-0.47.1/Changelog --- old/QLog-0.47.0/Changelog 2025-12-06 12:59:28.000000000 +0100 +++ new/QLog-0.47.1/Changelog 2025-12-19 15:58:05.000000000 +0100 @@ -1,3 +1,12 @@ +2025/12/19 - 0.47.1 +- [CHANGED] - DXC - VE7CC-type Cluster is correctly detected (PR #851 @kyleboyle) +- [CHANGED] - Chat - Changed ON4KST URL (issue #857) +- Fixed missing clear button for Search Callsign (issue #753) +- Fixed Updated QSOs are not sent to wavelog (issue #847) +- Fixed Fixed Omnirig(v2) getFreq, getVFO, setFreq (issue #853) +- Fixed ADI Header does not follow ADIF Spec (issue #859) +- Fixed OmniRig settings are not saved (issue #862) + 2025/12/06 - 0.47.0 - [NEW] - Adds theme options - native, light, dark (PR #718 @kyleboyle) - [NEW] - Implemented ADIF 3.1.6 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/QLog-0.47.0/QLog.pro new/QLog-0.47.1/QLog.pro --- old/QLog-0.47.0/QLog.pro 2025-12-06 12:59:28.000000000 +0100 +++ new/QLog-0.47.1/QLog.pro 2025-12-19 15:58:05.000000000 +0100 @@ -10,7 +10,7 @@ TARGET = qlog TEMPLATE = app -VERSION = 0.47.0 +VERSION = 0.47.1 DEFINES += VERSION=\\\"$$VERSION\\\" @@ -551,6 +551,7 @@ equals(QT_MAJOR_VERSION, 5): LIBS += -lqt5keychain DEFINES += WIN32_LEAN_AND_MEAN + DEFINES += ZD_EXPORT= } DEFINES += HAMLIBVERSION_MAJOR=$$HAMLIBVERSION_MAJOR diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/QLog-0.47.0/debian/changelog new/QLog-0.47.1/debian/changelog --- old/QLog-0.47.0/debian/changelog 2025-12-06 12:59:28.000000000 +0100 +++ new/QLog-0.47.1/debian/changelog 2025-12-19 15:58:05.000000000 +0100 @@ -1,3 +1,14 @@ +qlog (0.47.1-1) UNRELEASED; urgency=low + * [CHANGED] - DXC - VE7CC-type Cluster is correctly detected (PR #851 @kyleboyle) + * [CHANGED] - Chat - Changed ON4KST URL (issue #857) + * Fixed missing clear button for Search Callsign (issue #753) + * Fixed Updated QSOs are not sent to wavelog (issue #847) + * Fixed Fixed Omnirig(v2) getFreq, getVFO, setFreq (issue #853) + * Fixed ADI Header does not follow ADIF Spec (issue #859) + * Fixed OmniRig settings are not saved (issue #862) + + -- foldynl <[email protected]> Fri, 19 Dec 2025 15:56:45 +0100 + qlog (0.47.0-1) UNRELEASED; urgency=low * [NEW] - Adds theme options - native, light, dark (PR #718 @kyleboyle) * [NEW] - Implemented ADIF 3.1.6 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/QLog-0.47.0/installer/config/config.xml new/QLog-0.47.1/installer/config/config.xml --- old/QLog-0.47.0/installer/config/config.xml 2025-12-06 12:59:28.000000000 +0100 +++ new/QLog-0.47.1/installer/config/config.xml 2025-12-19 15:58:05.000000000 +0100 @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <Installer> <Name>QLog</Name> - <Version>0.47.0</Version> + <Version>0.47.1</Version> <Title>QLog</Title> <Publisher>OK1MLG</Publisher> <StartMenuDir>QLog</StartMenuDir> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/QLog-0.47.0/installer/packages/de.dl2ic.qlog/meta/package.xml new/QLog-0.47.1/installer/packages/de.dl2ic.qlog/meta/package.xml --- old/QLog-0.47.0/installer/packages/de.dl2ic.qlog/meta/package.xml 2025-12-06 12:59:28.000000000 +0100 +++ new/QLog-0.47.1/installer/packages/de.dl2ic.qlog/meta/package.xml 2025-12-19 15:58:05.000000000 +0100 @@ -2,8 +2,8 @@ <Package> <DisplayName>QLog</DisplayName> <Description>The QLog main application.</Description> - <Version>0.47.0-1</Version> - <ReleaseDate>2025-12-06</ReleaseDate> + <Version>0.47.1-1</Version> + <ReleaseDate>2025-12-19</ReleaseDate> <Default>true</Default> <Required>true</Required> <Script>installscript.qs</Script> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/QLog-0.47.0/logformat/AdiFormat.cpp new/QLog-0.47.1/logformat/AdiFormat.cpp --- old/QLog-0.47.0/logformat/AdiFormat.cpp 2025-12-06 12:59:28.000000000 +0100 +++ new/QLog-0.47.1/logformat/AdiFormat.cpp 2025-12-19 15:58:05.000000000 +0100 @@ -13,6 +13,14 @@ { FCT_IDENTIFICATION; + // ADIF Spec: + // A Header begins with any character other than < and terminates + // with a case-insensitive End-Of-Header tag + // + // Adding an extra space to be compliant with the ADIF specification. + // It is the same as in the example in the ADIF resource file. + stream << " "; + writeField("ADIF_VER", ALWAYS_PRESENT, ADIF_VERSION_STRING); writeField("PROGRAMID", ALWAYS_PRESENT, PROGRAMID_STRING); writeField("PROGRAMVERSION", ALWAYS_PRESENT, VERSION); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/QLog-0.47.0/res/io.github.foldynl.QLog.metainfo.xml new/QLog-0.47.1/res/io.github.foldynl.QLog.metainfo.xml --- old/QLog-0.47.0/res/io.github.foldynl.QLog.metainfo.xml 2025-12-06 12:59:28.000000000 +0100 +++ new/QLog-0.47.1/res/io.github.foldynl.QLog.metainfo.xml 2025-12-19 15:58:05.000000000 +0100 @@ -51,6 +51,19 @@ <url type="vcs-browser">https://github.com/foldynl/QLog</url> <url type="contribute">https://github.com/foldynl/QLog/blob/master/CONTRIBUTING.md</url> <releases> + <release version="0.47.1" date="2025-12-19"> + <description> + <ul> + <li>[CHANGED] - DXC - VE7CC-type Cluster is correctly detected (PR #851 @kyleboyle)</li> + <li>[CHANGED] - Chat - Changed ON4KST URL (issue #857)</li> + <li>Fixed missing clear button for Search Callsign (issue #753)</li> + <li>Fixed Updated QSOs are not sent to wavelog (issue #847)</li> + <li>Fixed Fixed Omnirig(v2) getFreq, getVFO, setFreq (issue #853)</li> + <li>Fixed ADI Header does not follow ADIF Spec (issue #859)</li> + <li>Fixed OmniRig settings are not saved (issue #862)</li> + </ul> + </description> + </release> <release version="0.47.0" date="2025-12-06"> <description> <ul> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/QLog-0.47.0/rig/drivers/OmnirigRigDrv.cpp new/QLog-0.47.1/rig/drivers/OmnirigRigDrv.cpp --- old/QLog-0.47.0/rig/drivers/OmnirigRigDrv.cpp 2025-12-06 12:59:28.000000000 +0100 +++ new/QLog-0.47.1/rig/drivers/OmnirigRigDrv.cpp 2025-12-19 15:58:05.000000000 +0100 @@ -208,9 +208,7 @@ return; } - if ( rig->Vfo() == OmniRig::PM_VFOB - || rig->Vfo() == OmniRig::PM_VFOBB - || rig->Vfo() == OmniRig::PM_VFOBA ) + if ( rig->Vfo() & VFO_B_MASK ) { qCDebug(runtime) << "Setting VFO B Freq"; rig->SetFreqB(internalFreq); @@ -533,7 +531,6 @@ : omniRigInterface->Rig2(); } - bool OmnirigRigDrv::checkFreqChange(int params, bool force) { FCT_IDENTIFICATION; @@ -544,44 +541,49 @@ return false; } + bool inForce = force; + + if ( !rigProfile.getFreqInfo ) return true; + if ( !inForce && !( params & (FREQMASK | ALLVFOsMASK) ) ) return true; + if ( !inForce && (params & ALLVFOsMASK)) inForce = true; + unsigned int vfo_freq = 0; - if ( rigProfile.getFreqInfo - && ( params & OmniRig::PM_FREQA - || params & OmniRig::PM_FREQB - || params & OmniRig::PM_FREQ - || force) ) - { - if ( rig->Vfo() == OmniRig::PM_VFOB - || rig->Vfo() == OmniRig::PM_VFOBB - || rig->Vfo() == OmniRig::PM_VFOBA ) - { - qCDebug(runtime) << "Getting VFO B Freq"; - vfo_freq = rig->FreqB(); - } - else if ( (writableParams & OmniRig::PM_FREQA) ) + const OmniRig::RigParamX vfoParam = rig->Vfo(); + const bool vfoIsB = (vfoParam & VFO_B_MASK); + + if ( vfoIsB ) + { + qCDebug(runtime) << "Getting VFO B Freq"; + vfo_freq = rig->FreqB(); + if ( !vfo_freq ) { - qCDebug(runtime) << "Getting VFO A Freq"; - vfo_freq = rig->FreqA(); + qCDebug(runtime) << "FreqB returned 0, falling back to Freq()"; + vfo_freq = rig->Freq(); } - else + } + else + { + qCDebug(runtime) << "Getting VFO A Freq"; + vfo_freq = rig->FreqA(); + if ( !vfo_freq ) { - qCDebug(runtime) << "Getting Generic VFO Freq"; + qCDebug(runtime) << "FreqA returned 0, falling back to Freq()"; vfo_freq = rig->Freq(); - }; + } + } - qCDebug(runtime) << "Rig Freq: "<< vfo_freq; - qCDebug(runtime) << "Object Freq: "<< currFreq; + qCDebug(runtime) << "Rig Freq: "<< vfo_freq; + qCDebug(runtime) << "Object Freq: "<< currFreq; - if ( vfo_freq != currFreq - || force ) - { - currFreq = vfo_freq; - qCDebug(runtime) << "emitting FREQ changed" << currFreq << Hz2MHz(currFreq); - emit frequencyChanged(Hz2MHz(currFreq), - Hz2MHz(getRITFreq()), - Hz2MHz(getXITFreq())); - } + if ( vfo_freq != currFreq || inForce ) + { + currFreq = vfo_freq; + qCDebug(runtime) << "emitting FREQ changed" << currFreq << Hz2MHz(currFreq); + emit frequencyChanged(Hz2MHz(currFreq), + Hz2MHz(getRITFreq()), + Hz2MHz(getXITFreq())); } + return true; } @@ -674,32 +676,16 @@ return; } - if ( rigProfile.getVFOInfo - && ( params & OmniRig::PM_VFOA - || params & OmniRig::PM_VFOAA - || params & OmniRig::PM_VFOAB - || params & OmniRig::PM_VFOB - || params & OmniRig::PM_VFOBB - || params & OmniRig::PM_VFOBA - || params & OmniRig::PM_VFOEQUAL - || params & OmniRig::PM_VFOSWAP - || force) ) - { - int inParams = ( force - || params & OmniRig::PM_VFOEQUAL - || params & OmniRig::PM_VFOSWAP ) ? rig->Vfo() - : params; + if ( !rigProfile.getVFOInfo ) return; + + if ( (params & ALLVFOsMASK) || force ) + { + int inParams = ( force || (params & VFO_SPEC_MASK) ) ? rig->Vfo() + : params; QString vfo; - if ( inParams & OmniRig::PM_VFOA - || inParams & OmniRig::PM_VFOAA - || inParams & OmniRig::PM_VFOAB ) - vfo = "VFOA"; - - if ( inParams & OmniRig::PM_VFOB - || inParams & OmniRig::PM_VFOBB - || inParams & OmniRig::PM_VFOBA ) - vfo = "VFOB"; + if ( inParams & VFO_A_MASK ) vfo = "VFOA"; + if ( inParams & VFO_B_MASK ) vfo = "VFOB"; qCDebug(runtime) << "Rig VFO: "<< vfo; qCDebug(runtime) << "Object VFO: "<< currVFO; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/QLog-0.47.0/rig/drivers/OmnirigRigDrv.h new/QLog-0.47.1/rig/drivers/OmnirigRigDrv.h --- old/QLog-0.47.0/rig/drivers/OmnirigRigDrv.h 2025-12-06 12:59:28.000000000 +0100 +++ new/QLog-0.47.1/rig/drivers/OmnirigRigDrv.h 2025-12-19 15:58:05.000000000 +0100 @@ -77,6 +77,13 @@ int writableParams; QMutex drvLock; QTimer offlineTimer; + + const int FREQMASK = (OmniRig::PM_FREQA | OmniRig::PM_FREQB | OmniRig::PM_FREQ); + const int VFO_A_MASK = ( OmniRig::PM_VFOA | OmniRig::PM_VFOAA | OmniRig::PM_VFOAB); + const int VFO_B_MASK = ( OmniRig::PM_VFOB | OmniRig::PM_VFOBA | OmniRig::PM_VFOBB); + const int VFO_SPEC_MASK = ( OmniRig::PM_VFOEQUAL | OmniRig::PM_VFOSWAP); + const int ALLVFOsMASK = (VFO_A_MASK | VFO_B_MASK | VFO_SPEC_MASK); + const QMap<OmniRig::RigParamX, QString> modeMap = { {OmniRig::PM_CW_U, "CWR"}, {OmniRig::PM_CW_L, "CW"}, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/QLog-0.47.0/rig/drivers/Omnirigv2RigDrv.cpp new/QLog-0.47.1/rig/drivers/Omnirigv2RigDrv.cpp --- old/QLog-0.47.0/rig/drivers/Omnirigv2RigDrv.cpp 2025-12-06 12:59:28.000000000 +0100 +++ new/QLog-0.47.1/rig/drivers/Omnirigv2RigDrv.cpp 2025-12-19 15:58:05.000000000 +0100 @@ -210,9 +210,7 @@ return; } - if ( rig->Vfo() == OmniRigV2::PM_VFOB - || rig->Vfo() == OmniRigV2::PM_VFOBB - || rig->Vfo() == OmniRigV2::PM_VFOBA ) + if ( rig->Vfo() & VFO_B_MASK ) { qCDebug(runtime) << "Setting VFO B Freq"; rig->SetFreqB(internalFreq); @@ -552,46 +550,50 @@ return false; } + bool inForce = force; + + if ( !rigProfile.getFreqInfo ) return true; + if ( !inForce && !( params & (FREQMASK | ALLVFOsMASK) ) ) return true; + if ( !inForce && (params & ALLVFOsMASK)) inForce = true; + unsigned int vfo_freq = 0; - if ( rigProfile.getFreqInfo - && ( params & OmniRigV2::PM_FREQA - || params & OmniRigV2::PM_FREQB - || params & OmniRigV2::PM_FREQ - || force) ) - { - if ( rig->Vfo() == OmniRigV2::PM_VFOB - || rig->Vfo() == OmniRigV2::PM_VFOBB - || rig->Vfo() == OmniRigV2::PM_VFOBA ) - { - qCDebug(runtime) << "Getting VFO B Freq"; - vfo_freq = rig->FreqB(); - } - else if ( (writableParams & OmniRigV2::PM_FREQA) ) + const OmniRigV2::RigParamX vfoParam = rig->Vfo(); + const bool vfoIsB = (vfoParam & VFO_B_MASK); + + if ( vfoIsB ) + { + qCDebug(runtime) << "Getting VFO B Freq"; + vfo_freq = rig->FreqB(); + if ( !vfo_freq ) { - qCDebug(runtime) << "Getting VFO A Freq"; - vfo_freq = rig->FreqA(); + qCDebug(runtime) << "FreqB returned 0, falling back to Freq()"; + vfo_freq = rig->Freq(); } - else + } + else + { + qCDebug(runtime) << "Getting VFO A Freq"; + vfo_freq = rig->FreqA(); + if ( !vfo_freq ) { - qCDebug(runtime) << "Getting Generic VFO Freq"; + qCDebug(runtime) << "FreqA returned 0, falling back to Freq()"; vfo_freq = rig->Freq(); - }; + } + } - qCDebug(runtime) << "Rig Freq: "<< vfo_freq; - qCDebug(runtime) << "Object Freq: "<< currFreq; + qCDebug(runtime) << "Rig Freq: "<< vfo_freq; + qCDebug(runtime) << "Object Freq: "<< currFreq; - if ( vfo_freq != currFreq - || force ) - { - currFreq = vfo_freq; - qCDebug(runtime) << "emitting FREQ changed" << currFreq << Hz2MHz(currFreq); - emit frequencyChanged(Hz2MHz(currFreq), - Hz2MHz(getRITFreq()), - Hz2MHz(getXITFreq())); - } + if ( vfo_freq != currFreq || inForce ) + { + currFreq = vfo_freq; + qCDebug(runtime) << "emitting FREQ changed" << currFreq << Hz2MHz(currFreq); + emit frequencyChanged(Hz2MHz(currFreq), + Hz2MHz(getRITFreq()), + Hz2MHz(getXITFreq())); } - return true; + return true; } bool OmnirigV2RigDrv::checkModeChange(int params, bool force) @@ -684,32 +686,16 @@ return; } - if ( rigProfile.getVFOInfo - && ( params & OmniRigV2::PM_VFOA - || params & OmniRigV2::PM_VFOAA - || params & OmniRigV2::PM_VFOAB - || params & OmniRigV2::PM_VFOB - || params & OmniRigV2::PM_VFOBB - || params & OmniRigV2::PM_VFOBA - || params & OmniRigV2::PM_VFOEQUAL - || params & OmniRigV2::PM_VFOSWAP - || force) ) - { - int inParams = ( force - || params & OmniRigV2::PM_VFOEQUAL - || params & OmniRigV2::PM_VFOSWAP ) ? rig->Vfo() - : params; + if ( !rigProfile.getVFOInfo ) return; + + if ( (params & ALLVFOsMASK) || force ) + { + int inParams = ( force || (params & VFO_SPEC_MASK) ) ? rig->Vfo() + : params; QString vfo; - if ( inParams & OmniRigV2::PM_VFOA - || inParams & OmniRigV2::PM_VFOAA - || inParams & OmniRigV2::PM_VFOAB ) - vfo = "VFOA"; - - if ( inParams & OmniRigV2::PM_VFOB - || inParams & OmniRigV2::PM_VFOBB - || inParams & OmniRigV2::PM_VFOBA ) - vfo = "VFOB"; + if ( inParams & VFO_A_MASK ) vfo = "VFOA"; + if ( inParams & VFO_B_MASK ) vfo = "VFOB"; qCDebug(runtime) << "Rig VFO: "<< vfo; qCDebug(runtime) << "Object VFO: "<< currVFO; @@ -721,7 +707,6 @@ emit vfoChanged(currVFO); } } - } void OmnirigV2RigDrv::checkRITChange(int params, bool force) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/QLog-0.47.0/rig/drivers/Omnirigv2RigDrv.h new/QLog-0.47.1/rig/drivers/Omnirigv2RigDrv.h --- old/QLog-0.47.0/rig/drivers/Omnirigv2RigDrv.h 2025-12-06 12:59:28.000000000 +0100 +++ new/QLog-0.47.1/rig/drivers/Omnirigv2RigDrv.h 2025-12-19 15:58:05.000000000 +0100 @@ -83,6 +83,13 @@ int writableParams; QMutex drvLock; QTimer offlineTimer; + + const int FREQMASK = (OmniRigV2::PM_FREQA | OmniRigV2::PM_FREQB | OmniRigV2::PM_FREQ); + const int VFO_A_MASK = ( OmniRigV2::PM_VFOA | OmniRigV2::PM_VFOAA | OmniRigV2::PM_VFOAB); + const int VFO_B_MASK = ( OmniRigV2::PM_VFOB | OmniRigV2::PM_VFOBA | OmniRigV2::PM_VFOBB); + const int VFO_SPEC_MASK = ( OmniRigV2::PM_VFOEQUAL | OmniRigV2::PM_VFOSWAP); + const int ALLVFOsMASK = (VFO_A_MASK | VFO_B_MASK | VFO_SPEC_MASK); + const QMap<OmniRigV2::RigParamX, QString> modeMap = { {OmniRigV2::PM_CW_U, "CWR"}, {OmniRigV2::PM_CW_L, "CW"}, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/QLog-0.47.0/rpm_spec/qlog.spec new/QLog-0.47.1/rpm_spec/qlog.spec --- old/QLog-0.47.0/rpm_spec/qlog.spec 2025-12-06 12:59:28.000000000 +0100 +++ new/QLog-0.47.1/rpm_spec/qlog.spec 2025-12-19 15:58:05.000000000 +0100 @@ -40,6 +40,15 @@ %{_metainfodir}/* %changelog +* Fri Dec 19 2025 Ladislav Foldyna - 0.47.1-1 +- [CHANGED] - DXC - VE7CC-type Cluster is correctly detected (PR #851 @kyleboyle) +- [CHANGED] - Chat - Changed ON4KST URL (issue #857) +- Fixed missing clear button for Search Callsign (issue #753) +- Fixed Updated QSOs are not sent to wavelog (issue #847) +- Fixed Fixed Omnirig(v2) getFreq, getVFO, setFreq (issue #853) +- Fixed ADI Header does not follow ADIF Spec (issue #859) +- Fixed OmniRig settings are not saved (issue #862) + * Sat Dec 6 2025 Ladislav Foldyna - 0.47.0-1 - [NEW] - Adds theme options - native, light, dark (PR #718 @kyleboyle) - [NEW] - Implemented ADIF 3.1.6 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/QLog-0.47.0/service/cloudlog/Cloudlog.cpp new/QLog-0.47.1/service/cloudlog/Cloudlog.cpp --- old/QLog-0.47.0/service/cloudlog/Cloudlog.cpp 2025-12-06 12:59:28.000000000 +0100 +++ new/QLog-0.47.1/service/cloudlog/Cloudlog.cpp 2025-12-19 15:58:05.000000000 +0100 @@ -196,8 +196,17 @@ const QStringList &messages = resp.value("messages").toStringList(); QString reason = messages.isEmpty() ? QString() : messages.first(); reason = (reason.isEmpty() && messages.size() >= 2) ? messages.at(1) : reason; - bool success = (status == "created") || - (status == "abort" && reason.contains("Duplicate for")); + + /* The idea behind this was that QLog would submit all new and modified QSOs + * to Wavelog even though Wavelog rejects duplicates. The goal was that once + * Wavelog starts accepting QSO updates, QLog could remain unchanged. Unfortunately, + * the issue is that Wavelog reports duplicates as errors, and worse, the message + * text is translated into multiple languages. As a result, QLog cannot reliably + * distinguish an actual error from a duplicate. Therefore, I am removing this check, + * and it is necessary to ensure that QLog sends only new QSOs to Cloudlog/Wavelog. */ + bool success = (status == "created"); + //|| (status == "abort" && reason.contains("Duplicate for")); + if (success) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/QLog-0.47.0/service/kstchat/KSTChat.cpp new/QLog-0.47.1/service/kstchat/KSTChat.cpp --- old/QLog-0.47.0/service/kstchat/KSTChat.cpp 2025-12-06 12:59:28.000000000 +0100 +++ new/QLog-0.47.1/service/kstchat/KSTChat.cpp 2025-12-19 15:58:05.000000000 +0100 @@ -21,12 +21,6 @@ MODULE_IDENTIFICATION("qlog.core.kstchat"); -#define KST_HOSTNAME "www.on4kst.info" -#define KST_PORT 23000 - -// update user list every 3*60 seconds -#define KST_UPDATE_USERS_LIST 3*60 - KSTChat::KSTChat(int chatRoomIndex, const QString &username, const QString &password, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/QLog-0.47.0/service/kstchat/KSTChat.h new/QLog-0.47.1/service/kstchat/KSTChat.h --- old/QLog-0.47.0/service/kstchat/KSTChat.h 2025-12-06 12:59:28.000000000 +0100 +++ new/QLog-0.47.1/service/kstchat/KSTChat.h 2025-12-19 15:58:05.000000000 +0100 @@ -178,7 +178,9 @@ QList<QPair<Command, QString>> commandQueue; const NewContactWidget *contact; - + const QString KST_HOSTNAME = "www.on4kst.org"; + const quint16 KST_PORT = 23000; + const quint16 KST_UPDATE_USERS_LIST = 3 * 60;// update user list every 3*60 seconds static const QString SECURE_STORAGE_KEY; }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/QLog-0.47.0/ui/DxWidget.cpp new/QLog-0.47.1/ui/DxWidget.cpp --- old/QLog-0.47.0/ui/DxWidget.cpp 2025-12-06 12:59:28.000000000 +0100 +++ new/QLog-0.47.1/ui/DxWidget.cpp 2025-12-19 15:58:05.000000000 +0100 @@ -379,6 +379,7 @@ socket(nullptr), ui(new Ui::DxWidget), deduplicateSpots(false), + commandsMenu(new QMenu(this)), reconnectAttempts(0), connectionState(DISCONNECTED), connectedServerString(nullptr), @@ -448,11 +449,8 @@ reloadSetting(); serverComboSetup(); - QMenu *commandsMenu = new QMenu(this); commandsMenu->addAction(ui->actionSpotQSO); commandsMenu->addSeparator(); - commandsMenu->addAction(ui->actionShowHFStats); - commandsMenu->addAction(ui->actionShowVHFStats); commandsMenu->addAction(ui->actionShowWCY); commandsMenu->addAction(ui->actionShowWWV); ui->commandButton->setMenu(commandsMenu); @@ -619,6 +617,7 @@ ui->serverSelect->setStyleSheet(QStringLiteral("QComboBox {color: red}")); } connectionState = DISCONNECTED; + dxcType = UNKNOWN; if ( connectedServerString ) { delete connectedServerString; @@ -753,14 +752,8 @@ { FCT_IDENTIFICATION; - QByteArray data; - data.append(command.toLatin1()); - data.append("\r\n"); - if ( socket && socket->isOpen() ) - { - socket->write(data); - } + socket->write((command + QLatin1String("\r\n")).toLatin1()); // switch to raw mode to see a response if ( switchToConsole ) @@ -816,62 +809,86 @@ static QRegularExpression dxSpotRE(QStringLiteral("^DX de ([a-zA-Z0-9\\/]+).*:\\s+([0-9|.]+)\\s+([a-zA-Z0-9\\/]+)[^\\s]*\\s+(.*)\\s+(\\d{4}Z)"), QRegularExpression::CaseInsensitiveOption); - QRegularExpressionMatch dxSpotMatch; static QRegularExpression wcySpotRE(QStringLiteral("^(WCY de) +([A-Z0-9\\-#]*) +<(\\d{2})> *: +K=(\\d{1,3}) expK=(\\d{1,3}) A=(\\d{1,3}) R=(\\d{1,3}) SFI=(\\d{1,3}) SA=([a-zA-Z]{1,3}) GMF=([a-zA-Z]{1,3}) Au=([a-zA-Z]{2}) *$"), QRegularExpression::CaseInsensitiveOption); - QRegularExpressionMatch wcySpotMatch; static QRegularExpression wwvSpotRE(QStringLiteral("^(WWV de) +([A-Z0-9\\-#]*) +<(\\d{2})Z?> *: *SFI=(\\d{1,3}), A=(\\d{1,3}), K=(\\d{1,3}), (.*\\b) *-> *(.*\\b) *$"), QRegularExpression::CaseInsensitiveOption); - QRegularExpressionMatch wwvSpotMatch; static QRegularExpression toAllSpotRE(QStringLiteral("^(To ALL de) +([A-Z0-9\\-#]*)\\s?(<(\\d{4})Z>)?[ :]+(.*)?$"), QRegularExpression::CaseInsensitiveOption); - QRegularExpressionMatch toAllSpotMatch; static QRegularExpression SHDXFormatRE(QStringLiteral("^\\s{0,8}([0-9|.]+)\\s+([a-zA-Z0-9\\/]+)[^\\s]*\\s+(.*)\\s+(\\d{4}Z) (.*)<([a-zA-Z0-9\\/]+)>$"), QRegularExpression::CaseInsensitiveOption); - QRegularExpressionMatch SHDXFormatMatch; static QRegularExpression splitLineRE(QStringLiteral("(\a|\n|\r)+")); static QRegularExpression loginRE(QStringLiteral("enter your call(sign)?:")); + static const QString loginStr = QStringLiteral("login"); + static const QString ccClusterStr = QStringLiteral("Running CC Cluster software"); + static const QString invalidCallsign = QStringLiteral("is an invalid callsign"); + static const QString passwordStr = QStringLiteral("password"); + static const QString sorryStr = QStringLiteral("sorry"); + static const QString dxSpiderStr = QStringLiteral("dxspider"); + static const QString dxPrefix = QStringLiteral("DX"); + static const QString wcyPrefix = QStringLiteral("WCY de"); + static const QString wwvPrefix = QStringLiteral("WWV de"); + static const QString toAllPrefix = QStringLiteral("To ALL de"); + reconnectAttempts = 0; - if ( !socket ) + if ( !socket || !connectedServerString ) + { + qCDebug(runtime) << "socket or connection string is null"; return; + } - const QStringList &lines = QString::fromUtf8(socket->readAll()).split(splitLineRE); + const QByteArray rawData = socket->readAll(); - for ( const QString &line : lines ) + if ( rawData.isEmpty() ) return; + + const QString data = QString::fromUtf8(rawData); + +#if (QT_VERSION >= QT_VERSION_CHECK(5, 15, 0)) + const QStringList lines = data.split(splitLineRE, Qt::SkipEmptyParts); +#else /* Due to ubuntu 20.04 where qt5.12 is present */ + const QStringList lines = data.split(splitLineRE, QString::SkipEmptyParts); +#endif + + const auto sendLine = [this](const QString &s) { - if ( !socket || !connectedServerString ) - { - qCDebug(runtime) << "socket or connection string is null"; - return; - } + socket->write((s + QLatin1String("\r\n")).toUtf8()); + }; + for ( const QString &line : lines ) + { qCDebug(runtime) << connectionState << line; // Skip empty lines - if ( line.length() == 0 ) - { - continue; - } + if ( line.isEmpty() ) continue; - if ( line.startsWith(QStringLiteral("login"), Qt::CaseInsensitive) - || line.contains(loginRE) ) + if ( connectionState == CONNECTED ) { - // username requested - socket->write(connectedServerString->getUsername().append("\r\n").toLocal8Bit()); - connectionState = LOGIN_SENT; - qCDebug(runtime) << "Login sent"; - continue; + if ( line.startsWith(loginStr, Qt::CaseInsensitive) || line.contains(loginRE) ) + { + // username requested + sendLine(connectedServerString->getUsername()); + connectionState = LOGIN_SENT; + qCDebug(runtime) << "Login sent"; + continue; + } + + if ( line.contains(ccClusterStr, Qt::CaseInsensitive) ) + { + dxcType = CCCluster; + qCDebug(runtime) << "CC Cluster Detected"; + updateCommandsMenu(); + continue; + } } - if ( connectionState == LOGIN_SENT - && line.contains(QStringLiteral("is an invalid callsign")) ) + if ( connectionState == LOGIN_SENT && line.contains(invalidCallsign) ) { // invalid login QMessageBox::warning(nullptr, @@ -880,8 +897,7 @@ continue; } - if ( connectionState == LOGIN_SENT - && line.startsWith(QStringLiteral("password"), Qt::CaseInsensitive) ) + if ( connectionState == LOGIN_SENT && line.startsWith(passwordStr, Qt::CaseInsensitive) ) { // password requested QString password = CredentialStore::instance()->getPassword(connectedServerString->getPasswordStorageKey(), @@ -912,14 +928,13 @@ } } activateCurrPasswordIcon(); - socket->write(password.append("\r\n").toLocal8Bit()); + sendLine(password); connectionState = PASSWORD_SENT; qCDebug(runtime) << "Password sent"; continue; } - if ( connectionState == PASSWORD_SENT - && line.startsWith(QStringLiteral("sorry"), Qt::CaseInsensitive ) ) + if ( connectionState == PASSWORD_SENT && line.startsWith(sorryStr, Qt::CaseInsensitive ) ) { // invalid password CredentialStore::instance()->deletePassword(connectedServerString->getPasswordStorageKey(), @@ -930,25 +945,36 @@ continue; } - if ( line.contains(QStringLiteral("dxspider"), Qt::CaseInsensitive) ) + if ( connectionState == LOGIN_SENT || connectionState == PASSWORD_SENT ) { - if ( connectionState == LOGIN_SENT - || connectionState == PASSWORD_SENT ) - connectionState = OPERATION; - ui->commandButton->setEnabled(true); + if ( line.contains(dxSpiderStr, Qt::CaseInsensitive) ) + { + connectionState = OPERATION; + dxcType = DXSPIDER; + qCDebug(runtime) << "dxspider Detected"; + updateCommandsMenu(); + ui->commandButton->setEnabled(true); + continue; + } + // the difference compared to DXSpider is that CC Cluster type + // is detected before login, but DXSpider type is detected after login + if ( dxcType == CCCluster ) + { + connectionState = OPERATION; + ui->commandButton->setEnabled(true); + } } /********************/ /* Received DX SPOT */ /********************/ - if ( line.startsWith(QStringLiteral("DX")) ) + if ( line.startsWith(dxPrefix) ) { - if ( connectionState == LOGIN_SENT - || connectionState == PASSWORD_SENT ) + if ( connectionState == LOGIN_SENT || connectionState == PASSWORD_SENT ) connectionState = OPERATION; - dxSpotMatch = dxSpotRE.match(line); + const QRegularExpressionMatch dxSpotMatch = dxSpotRE.match(line); if ( dxSpotMatch.hasMatch() ) { @@ -962,9 +988,9 @@ /************************/ /* Received WCY Info */ /************************/ - else if ( line.startsWith(QStringLiteral("WCY de")) ) + else if ( line.startsWith(wcyPrefix) ) { - wcySpotMatch = wcySpotRE.match(line); + const QRegularExpressionMatch wcySpotMatch = wcySpotRE.match(line); if ( wcySpotMatch.hasMatch() ) { @@ -987,9 +1013,9 @@ /*********************/ /* Received WWV Info */ /*********************/ - else if ( line.startsWith(QStringLiteral("WWV de")) ) + else if ( line.startsWith(wwvPrefix) ) { - wwvSpotMatch = wwvSpotRE.match(line); + const QRegularExpressionMatch wwvSpotMatch = wwvSpotRE.match(line); if ( wwvSpotMatch.hasMatch() ) { @@ -1009,9 +1035,9 @@ /*************************/ /* Received Generic Info */ /*************************/ - else if ( line.startsWith(QStringLiteral("To ALL de")) ) + else if ( line.startsWith(toAllPrefix) ) { - toAllSpotMatch = toAllSpotRE.match(line); + const QRegularExpressionMatch toAllSpotMatch = toAllSpotRE.match(line); if ( toAllSpotMatch.hasMatch() ) { @@ -1032,7 +1058,7 @@ /****************/ else if ( line.contains(SHDXFormatRE) ) { - SHDXFormatMatch = SHDXFormatRE.match(line); + const QRegularExpressionMatch SHDXFormatMatch = SHDXFormatRE.match(line); if ( SHDXFormatMatch.hasMatch() ) { @@ -1657,6 +1683,31 @@ ui->serverSelect->setItemIcon(ui->serverSelect->currentIndex(), QIcon(":/icons/password.png")); } +void DxWidget::updateCommandsMenu() +{ + FCT_IDENTIFICATION; + + switch (dxcType) + { + case CCCluster: + if ( ui->commandButton->defaultAction() == ui->actionShowHFStats + || ui->commandButton->defaultAction() == ui->actionShowVHFStats ) + ui->commandButton->setDefaultAction(ui->actionSpotQSO); + + commandsMenu->removeAction(ui->actionShowHFStats); + commandsMenu->removeAction(ui->actionShowVHFStats); + break; + + case DXSPIDER: + commandsMenu->addAction(ui->actionShowHFStats); + commandsMenu->addAction(ui->actionShowVHFStats); + break; + + default: + qCDebug(runtime) << "no change"; + } +} + void DxWidget::processDxSpot(const QString &spotter, const QString &freq, const QString &call, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/QLog-0.47.0/ui/DxWidget.h new/QLog-0.47.1/ui/DxWidget.h --- old/QLog-0.47.0/ui/DxWidget.h 2025-12-06 12:59:28.000000000 +0100 +++ new/QLog-0.47.1/ui/DxWidget.h 2025-12-19 15:58:05.000000000 +0100 @@ -184,6 +184,13 @@ OPERATION = 5 }; + enum DXCType + { + UNKNOWN = 0, + DXSPIDER = 1, + CCCluster = 2 + }; + DxTableModel* dxTableModel; WCYTableModel* wcyTableModel; WWVTableModel* wwvTableModel; @@ -199,7 +206,8 @@ bool deduplicateSpots; int deduplicatetime; int deduplicatefreq; - + DXCType dxcType = UNKNOWN; + QMenu *commandsMenu; QSet<QString> dxMemberFilter; QSqlRecord lastQSO; quint8 reconnectAttempts; @@ -237,6 +245,7 @@ void serverComboSetup(); void clearAllPasswordIcons(); void activateCurrPasswordIcon(); + void updateCommandsMenu(); void processDxSpot(const QString &spotter, const QString &freq, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/QLog-0.47.0/ui/LogbookWidget.cpp new/QLog-0.47.1/ui/LogbookWidget.cpp --- old/QLog-0.47.0/ui/LogbookWidget.cpp 2025-12-06 12:59:28.000000000 +0100 +++ new/QLog-0.47.1/ui/LogbookWidget.cpp 2025-12-19 15:58:05.000000000 +0100 @@ -601,6 +601,10 @@ ui->searchTextFilter->blockSignals(true); ui->searchTextFilter->setText(call); ui->searchTextFilter->blockSignals(false); + // clearbutton is shown only when signals are enabled. therefore + // it is needed to force clear-button update + ui->searchTextFilter->setClearButtonEnabled(false); + ui->searchTextFilter->setClearButtonEnabled(true); } filterTable(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/QLog-0.47.0/ui/SettingsDialog.cpp new/QLog-0.47.1/ui/SettingsDialog.cpp --- old/QLog-0.47.0/ui/SettingsDialog.cpp 2025-12-06 12:59:28.000000000 +0100 +++ new/QLog-0.47.1/ui/SettingsDialog.cpp 2025-12-19 15:58:05.000000000 +0100 @@ -659,6 +659,8 @@ ui->rigAddProfileButton->setText(tr("Add")); ui->rigPTTPortEdit->clear(); ui->rigCIVAddrSpinBox->setValue(CIVADDR_DISABLED_VALUE); + + rigChanged(ui->rigModelSelect->currentIndex()); } void SettingsDialog::rigRXOffsetChanged(int) @@ -695,8 +697,8 @@ { FCT_IDENTIFICATION; - ui->rigQSYWipingCheckBox->setEnabled(ui->rigGetFreqCheckBox->isChecked()); ui->rigQSYWipingCheckBox->setChecked(ui->rigGetFreqCheckBox->isChecked()); + ui->rigQSYWipingCheckBox->setEnabled(ui->rigGetFreqCheckBox->isChecked()); } void SettingsDialog::rigPortTypeChanged(int index) @@ -1848,8 +1850,8 @@ || currentType == CWKey::FLDIGI_KEYER ) { ui->cwBaudSelect->setEnabled(false); - ui->cwPortEdit->setEnabled(false); ui->cwPortEdit->clear(); + ui->cwPortEdit->setEnabled(false); ui->cwKeyModeSelect->setEnabled(false); ui->cwDefaulSpeed->setEnabled(true); ui->cwSwapPaddlesCheckbox->setEnabled(false); @@ -2599,65 +2601,65 @@ if ( ! caps.canGetFreq ) { - ui->rigGetFreqCheckBox->setEnabled(false); ui->rigGetFreqCheckBox->setChecked(false); + ui->rigGetFreqCheckBox->setEnabled(false); } if ( ! caps.canGetMode ) { - ui->rigGetModeCheckBox->setEnabled(false); ui->rigGetModeCheckBox->setChecked(false); + ui->rigGetModeCheckBox->setEnabled(false); } if ( ! caps.canGetVFO ) { - ui->rigGetVFOCheckBox->setEnabled(false); ui->rigGetVFOCheckBox->setChecked(false); + ui->rigGetVFOCheckBox->setEnabled(false); } if ( ! caps.canGetPWR ) { - ui->rigGetPWRCheckBox->setEnabled(false); ui->rigGetPWRCheckBox->setChecked(false); + ui->rigGetPWRCheckBox->setEnabled(false); } if ( ! caps.canGetRIT ) { - ui->rigGetRITCheckBox->setEnabled(false); ui->rigGetRITCheckBox->setChecked(false); + ui->rigGetRITCheckBox->setEnabled(false); } if ( ! caps.canGetXIT ) { - ui->rigGetXITCheckBox->setEnabled(false); ui->rigGetXITCheckBox->setChecked(false); + ui->rigGetXITCheckBox->setEnabled(false); } if ( ! caps.canGetPTT) { - ui->rigGetPTTStateCheckBox->setEnabled(false); ui->rigGetPTTStateCheckBox->setChecked(false); + ui->rigGetPTTStateCheckBox->setEnabled(false); } if ( ! ui->rigGetFreqCheckBox->isChecked() ) { - ui->rigQSYWipingCheckBox->setEnabled(false); ui->rigQSYWipingCheckBox->setChecked(false); + ui->rigQSYWipingCheckBox->setEnabled(false); } if ( ! caps.canGetKeySpeed ) { - ui->rigGetKeySpeedCheckBox->setEnabled(false); ui->rigGetKeySpeedCheckBox->setChecked(false); - ui->rigKeySpeedSyncCheckBox->setEnabled(false); + ui->rigGetKeySpeedCheckBox->setEnabled(false); ui->rigKeySpeedSyncCheckBox->setChecked(false); + ui->rigKeySpeedSyncCheckBox->setEnabled(false); } if ( ! caps.canProcessDXSpot ) { - ui->rigDXSpots2RigCheckBox->setEnabled(false); ui->rigDXSpots2RigCheckBox->setChecked(false); + ui->rigDXSpots2RigCheckBox->setEnabled(false); } if ( ui->rigAssignedCWKeyCombo->currentText() != EMPTY_CWKEY_PROFILE ) @@ -2667,8 +2669,8 @@ if ( ! caps.canGetKeySpeed || (selectedKeyProfile.model == CWKey::MORSEOVERCAT) ) { - ui->rigKeySpeedSyncCheckBox->setEnabled(false); ui->rigKeySpeedSyncCheckBox->setChecked(false); + ui->rigKeySpeedSyncCheckBox->setEnabled(false); } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/QLog-0.47.0/ui/SettingsDialog.ui new/QLog-0.47.1/ui/SettingsDialog.ui --- old/QLog-0.47.0/ui/SettingsDialog.ui 2025-12-06 12:59:28.000000000 +0100 +++ new/QLog-0.47.1/ui/SettingsDialog.ui 2025-12-19 15:58:05.000000000 +0100 @@ -2371,6 +2371,7 @@ </item> </layout> </widget> + <widget class="QWidget" name="rigSpecialOmni"/> </widget> </item> <item row="2" column="1"> @@ -6101,7 +6102,7 @@ </slots> <buttongroups> <buttongroup name="buttonGroup_3"/> - <buttongroup name="buttonGroup_2"/> <buttongroup name="buttonGroup"/> + <buttongroup name="buttonGroup_2"/> </buttongroups> </ui> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/QLog-0.47.0/ui/UploadQSODialog.cpp new/QLog-0.47.1/ui/UploadQSODialog.cpp --- old/QLog-0.47.0/ui/UploadQSODialog.cpp 2025-12-06 12:59:28.000000000 +0100 +++ new/QLog-0.47.1/ui/UploadQSODialog.cpp 2025-12-19 15:58:05.000000000 +0100 @@ -464,14 +464,25 @@ QStringList uploadStatuses(qslUploadStatuses); - if ( ( it.key() == CLUBLOGID && ui->clublogClearCheckbox->isChecked() ) - || ( it.key() == WAVELOGID && ui->wavelogReuploadCheckbox->isChecked() )) + if ( it.key() == WAVELOGID ) + { + if ( ui->wavelogReuploadCheckbox->isChecked() ) + uploadStatuses << "'Y'"; + else + // Wavelog reports duplicates as errors with translated error messages. + // QLog cannot reliably distinguish between a duplicate and a real error. + // Therefore, it is necessary to ensure that QLog sends only + // new QSOs to Cloudlog/Wavelog. + // Currently only two statues are use for Wavelog - Y/M - removing M (Modified) + uploadStatuses.removeAll("'M'"); + } + + if ( it.key() == CLUBLOGID && ui->clublogClearCheckbox->isChecked() ) { //reupload all QSOs (except N) uploadStatuses << "'Y'"; } - QString addlCondition = ( it.key() == LOTWID && ui->lotwCheckbox->isChecked() ) ? "AND (upper(prop_mode) NOT IN ('INTERNET', 'RPT', 'ECH', 'IRL') OR prop_mode IS NULL)" : ""; ++++++ QLog.obsinfo ++++++ --- /var/tmp/diff_new_pack.Vho2FJ/_old 2025-12-22 22:51:20.430216904 +0100 +++ /var/tmp/diff_new_pack.Vho2FJ/_new 2025-12-22 22:51:20.438217233 +0100 @@ -1,5 +1,5 @@ name: QLog -version: 0.47.0 -mtime: 1765022368 -commit: a4246af5df9da7c75103e0dfdde5c25cf7c13208 +version: 0.47.1 +mtime: 1766156285 +commit: 9d66130334b11d110f10dac04970952cfec16058 ++++++ _service ++++++ --- /var/tmp/diff_new_pack.Vho2FJ/_old 2025-12-22 22:51:20.478218881 +0100 +++ /var/tmp/diff_new_pack.Vho2FJ/_new 2025-12-22 22:51:20.482219046 +0100 @@ -5,7 +5,7 @@ <param name="changesgenerate">enable</param> <param name="filename">QLog</param> <param name="versionformat">@PARENT_TAG@</param> - <param name="revision">v0.47.0</param> + <param name="revision">v0.47.1</param> <param name="versionrewrite-pattern">v(.*)</param> <param name="versionrewrite-replacement">\1</param> </service> ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.Vho2FJ/_old 2025-12-22 22:51:20.542221518 +0100 +++ /var/tmp/diff_new_pack.Vho2FJ/_new 2025-12-22 22:51:20.558222178 +0100 @@ -1,7 +1,7 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/foldynl/QLog.git</param> - <param name="changesrevision">a4246af5df9da7c75103e0dfdde5c25cf7c13208</param> + <param name="changesrevision">9d66130334b11d110f10dac04970952cfec16058</param> </service> </servicedata> (No newline at EOF)
