diff --git a/application/controllers/Radio.php b/application/controllers/Radio.php
index 9bec10799..83003c661 100644
--- a/application/controllers/Radio.php
+++ b/application/controllers/Radio.php
@@ -88,6 +88,8 @@ class Radio extends CI_Controller {
echo "
- / - | ";
} elseif (empty($row->frequency_rx) || $row->frequency_rx == "0") {
echo "" . $this->frequency->qrg_conversion($row->frequency) . " | ";
+ } elseif ($this->frequency->frequencies_are_equal($row->frequency, $row->frequency_rx)) {
+ echo "" . $this->frequency->qrg_conversion($row->frequency) . " | ";
} else {
echo "" . $this->frequency->qrg_conversion($row->frequency_rx) . " / " . $this->frequency->qrg_conversion($row->frequency) . " | ";
}
diff --git a/application/controllers/Widgets.php b/application/controllers/Widgets.php
index 4ca159bbe..3c4cbeae2 100644
--- a/application/controllers/Widgets.php
+++ b/application/controllers/Widgets.php
@@ -501,6 +501,14 @@ class Widgets extends CI_Controller {
);
$mode_string = empty($cat_data->mode) ? "" : $cat_data->mode;
+ return trim(sprintf("%s %s", $tx_frequency, $mode_string));
+ } elseif ($this->frequency->frequencies_are_equal($cat_data->frequency, $cat_data->frequency_rx)) {
+ // Frequencies are equal, show only one
+ $tx_frequency = $this->frequency->qrg_conversion(
+ $cat_data->frequency, $r_option, $source_unit, $target_unit
+ );
+ $mode_string = empty($cat_data->mode) ? "" : $cat_data->mode;
+
return trim(sprintf("%s %s", $tx_frequency, $mode_string));
} else {
$rx_frequency = $this->frequency->qrg_conversion(
diff --git a/application/libraries/Frequency.php b/application/libraries/Frequency.php
index 1b62663bd..42f9348ad 100644
--- a/application/libraries/Frequency.php
+++ b/application/libraries/Frequency.php
@@ -337,5 +337,25 @@ class Frequency {
}
return $unit;
}
+
+ /**
+ * Check if two frequencies are equal (handles different formats and empty values)
+ *
+ * @param mixed $freq1 First frequency (TX)
+ * @param mixed $freq2 Second frequency (RX)
+ * @return bool True if frequencies are equal or if one is empty/zero
+ */
+ function frequencies_are_equal($freq1, $freq2) {
+ // Treat empty, null, or zero as "not set"
+ if (empty($freq1) || $freq1 === '0' || $freq1 === 0) {
+ return true;
+ }
+ if (empty($freq2) || $freq2 === '0' || $freq2 === 0) {
+ return true;
+ }
+
+ // Compare as floats to handle different string representations
+ return (float)$freq1 === (float)$freq2;
+ }
}
/* End of file Frequency.php */
diff --git a/application/views/qslprint/qsolist.php b/application/views/qslprint/qsolist.php
index 4e3386abd..9c8b3e749 100644
--- a/application/views/qslprint/qsolist.php
+++ b/application/views/qslprint/qsolist.php
@@ -41,8 +41,24 @@ if ($qsos->result() != NULL) {
echo ''; $timestamp = strtotime($qsl->COL_TIME_ON); echo date($custom_date_format, $timestamp); echo ' | ';
echo ''; $timestamp = strtotime($qsl->COL_TIME_ON); echo date('H:i', $timestamp); echo ' | ';
echo ''; echo $qsl->COL_SUBMODE==null?$qsl->COL_MODE:$qsl->COL_SUBMODE; echo ' | ';
- echo ''; if($qsl->COL_SAT_NAME != null) { echo __("SAT") . ' ' . $qsl->COL_SAT_NAME . ' '. strtolower($qsl->COL_BAND) . '/' . strtolower($qsl->COL_BAND_RX); } else { echo strtolower($qsl->COL_BAND); }; echo ' | ';
- echo ''; if($qsl->COL_SAT_NAME != null) { echo __("SAT") . ' ' . $qsl->COL_SAT_NAME . ' ' . $this->frequency->qrg_conversion($qsl->COL_FREQ) . '/' . $this->frequency->qrg_conversion($qsl->COL_FREQ_RX); } else { echo $this->frequency->qrg_conversion($qsl->COL_FREQ); }; echo ' | ';
+ echo ''; if($qsl->COL_SAT_NAME != null) {
+ $band_rx = strtolower($qsl->COL_BAND_RX ?? '');
+ $band = strtolower($qsl->COL_BAND);
+ if ($band_rx && $band && $band_rx != $band) {
+ echo __("SAT") . ' ' . $qsl->COL_SAT_NAME . ' ' . $band . '/' . $band_rx;
+ } else {
+ echo __("SAT") . ' ' . $qsl->COL_SAT_NAME . ' ' . $band;
+ }
+ } else { echo strtolower($qsl->COL_BAND); }; echo ' | ';
+ echo ''; if($qsl->COL_SAT_NAME != null) {
+ $freq_rx = $qsl->COL_FREQ_RX ?? 0;
+ $freq = $qsl->COL_FREQ ?? 0;
+ if ($freq_rx && $freq && !$this->frequency->frequencies_are_equal($freq, $freq_rx)) {
+ echo __("SAT") . ' ' . $qsl->COL_SAT_NAME . ' ' . $this->frequency->qrg_conversion($freq) . '/' . $this->frequency->qrg_conversion($freq_rx);
+ } else {
+ echo __("SAT") . ' ' . $qsl->COL_SAT_NAME . ' ' . $this->frequency->qrg_conversion($freq);
+ }
+ } else { echo $this->frequency->qrg_conversion($qsl->COL_FREQ); }; echo ' | ';
echo '' . $qsl->COL_RST_SENT . ' | ';
echo '' . $qsl->COL_RST_RCVD . ' | ';
echo '' . $qsl->station_callsign . ' | ';
diff --git a/src/QSLManager/QSO.php b/src/QSLManager/QSO.php
index b5cdc8aba..62b5b1fba 100644
--- a/src/QSLManager/QSO.php
+++ b/src/QSLManager/QSO.php
@@ -1426,9 +1426,12 @@ class QSO
}
if ($this->frequencyRX && $this->frequency) {
- $converted_rx = $this->CI->frequency->qrg_conversion($this->frequencyRX);
- if ($converted_rx) {
- $label .= "/" . $converted_rx;
+ // Only show RX frequency if it's different from TX
+ if (!$this->CI->frequency->frequencies_are_equal($this->frequency, $this->frequencyRX)) {
+ $converted_rx = $this->CI->frequency->qrg_conversion($this->frequencyRX);
+ if ($converted_rx) {
+ $label .= "/" . $converted_rx;
+ }
}
}