@@ -252,7 +252,7 @@ if (!gotTheLock) {
252252 s_mainWindow . hide ( ) ;
253253 }
254254 } ) ;
255- if ( process . platform === 'darwin' ) {
255+ if ( app . isPackaged && ( process . platform === 'darwin' ) ) {
256256 app . dock . hide ( ) ;
257257 }
258258 } )
@@ -515,20 +515,52 @@ function startserver() {
515515 }
516516}
517517
518+
518519async function get_modes ( ) {
519- s_mainWindow . webContents . send ( 'get_info' , 'rig.get_modes' ) ;
520+ return new Promise ( ( resolve ) => {
521+ ipcMain . once ( 'get_info_result' , ( event , modes ) => {
522+ resolve ( modes ) ;
523+ } ) ;
524+ s_mainWindow . webContents . send ( 'get_info' , 'rig.get_modes' ) ;
525+ } ) ;
520526}
527+
528+ function getClosestMode ( requestedMode , availableModes ) {
529+ if ( availableModes . includes ( requestedMode ) ) { // Check perfect matches
530+ return requestedMode ;
531+ }
532+
533+ const modeFallbacks = {
534+ 'CW' : [ 'CW-L' , 'CW-R' , 'CW' , 'LSB' , 'USB' ] ,
535+ 'RTTY' : [ 'RTTY' , 'RTTY-R' ] ,
536+ } ;
537+
538+ if ( modeFallbacks [ requestedMode ] ) {
539+ for ( let variant of modeFallbacks [ requestedMode ] ) {
540+ if ( availableModes . includes ( variant ) ) {
541+ return variant ;
542+ }
543+ }
544+ }
545+
546+ const found = availableModes . find ( mode =>
547+ mode . toUpperCase ( ) . startsWith ( requestedMode . toUpperCase ( ) )
548+ ) ;
549+ if ( found ) return found ;
550+ return null ;
551+ }
552+
521553async function settrx ( qrg , mode = '' ) {
522554 let avail_modes = { } ;
523555 try {
524556 avail_modes = await get_modes ( ) ;
525557 } catch ( e ) {
526- avail_modes = { } ;
527- }
558+ avail_modes = [ ] ;
559+ }
528560 let to = { } ;
529561 to . qrg = qrg ;
530562 if ( mode == 'cw' ) {
531- to . mode = 'CW' ;
563+ to . mode = getClosestMode ( mode , avail_modes ) ;
532564 } else {
533565 if ( ( to . qrg ) < 7999000 ) {
534566 to . mode = 'LSB' ;
0 commit comments