fix: no play-on-air button on CW

In CW the transmitter builds its tone from the keyer and ignores the DAX TX
audio path, so the button keyed the rig and sent silence. Confirmed on a Flex:
our side reported the playback as done while nothing went out.

Only the button goes. The row stays, or a CW operator who stopped their
recording would be left with no way to resume it — and the recording itself is
still worth keeping.
This commit is contained in:
2026-07-30 23:34:23 +02:00
parent f4956a63bb
commit a1ceea978b
2 changed files with 20 additions and 11 deletions
+4 -2
View File
@@ -5,12 +5,14 @@
"en": [ "en": [
"FlexRadio: in split, OpsLog stays on the receive slice instead of following the transmitter.", "FlexRadio: in split, OpsLog stays on the receive slice instead of following the transmitter.",
"QSO recording works on CW again. Your own sidetone is not in the file, the other station is.", "QSO recording works on CW again. Your own sidetone is not in the file, the other station is.",
"Playing a recording on the air now says why when it cannot — most often no audio output to the radio is configured." "Playing a recording on the air now says why when it cannot — most often no audio output to the radio is configured.",
"The play-on-air button is hidden on CW: the transmitter builds its tone from the keyer and ignores the audio path. Recording, stopping and resuming stay available."
], ],
"fr": [ "fr": [
"FlexRadio : en split, OpsLog reste sur la slice de réception au lieu de suivre l'émission.", "FlexRadio : en split, OpsLog reste sur la slice de réception au lieu de suivre l'émission.",
"L'enregistrement des QSO fonctionne à nouveau en CW. Votre propre signal d'écoute n'est pas dans le fichier, celui du correspondant l'est.", "L'enregistrement des QSO fonctionne à nouveau en CW. Votre propre signal d'écoute n'est pas dans le fichier, celui du correspondant l'est.",
"L'émission d'un enregistrement indique désormais pourquoi elle échoue — le plus souvent aucune sortie audio vers la radio n'est configurée." "L'émission d'un enregistrement indique désormais pourquoi elle échoue — le plus souvent aucune sortie audio vers la radio n'est configurée.",
"Le bouton d'émission de l'enregistrement est masqué en CW : l'émetteur fabrique sa tonalité à partir du manipulateur et ignore la chaîne audio. Enregistrer, arrêter et reprendre restent disponibles."
] ]
}, },
{ {
+16 -9
View File
@@ -3739,17 +3739,24 @@ export default function App() {
{/* A stopped take: play it to the station being worked, or carry on {/* A stopped take: play it to the station being worked, or carry on
recording. Both sit where the counter is, which has shifted left to recording. Both sit where the counter is, which has shifted left to
make room. */} make room. */}
{/* A stopped take: resume it, and on PHONE only play it to the station
being worked. In CW the transmitter builds its tone from the keyer and
ignores the DAX TX audio path entirely, so the button would key the rig
and send silence. The row itself stays, or a CW operator who stopped
would be left with no way to resume. */}
{recording && recStopped && RECORDABLE_MODES.has(mode.toUpperCase()) && ( {recording && recStopped && RECORDABLE_MODES.has(mode.toUpperCase()) && (
<span className="absolute right-2 top-1/2 -translate-y-1/2 z-10 inline-flex items-center gap-1.5"> <span className="absolute right-2 top-1/2 -translate-y-1/2 z-10 inline-flex items-center gap-1.5">
<button {PHONE_MODES.has(mode.toUpperCase()) && (
type="button" <button
onMouseDown={(e) => e.preventDefault()} type="button"
onClick={playRecordingOnAir} onMouseDown={(e) => e.preventDefault()}
title={t('rec.playOnAir')} onClick={playRecordingOnAir}
className="inline-flex items-center justify-center size-4 rounded text-success hover:bg-success/15" title={t('rec.playOnAir')}
> className="inline-flex items-center justify-center size-4 rounded text-success hover:bg-success/15"
>
</button>
</button>
)}
<button <button
type="button" type="button"
onMouseDown={(e) => e.preventDefault()} onMouseDown={(e) => e.preventDefault()}