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)

Reply via email to