@@ -2,6 +2,7 @@ const {app, BrowserWindow, globalShortcut } = require('electron/main');
22const path = require ( 'node:path' ) ;
33const { ipcMain} = require ( 'electron' )
44const http = require ( 'http' ) ;
5+ const xml = require ( "xml2js" ) ;
56
67let s_mainWindow ;
78let msgbacklog = [ ] ;
@@ -139,6 +140,13 @@ function parseADIF(adifdata) {
139140 return adiReader . toObject ( ) ;
140141}
141142
143+ function writeADIF ( adifObject ) {
144+ const { ADIF } = require ( "tcadif" ) ;
145+ var adiWriter = new ADIF ( adifObject ) ;
146+ // console.log(adiWriter);
147+ return adiWriter ;
148+ }
149+
142150function send2wavelog ( o_cfg , adif , dryrun = false ) {
143151 let clpayload = { } ;
144152 clpayload . key = o_cfg . wavelog_key . trim ( ) ;
@@ -213,12 +221,49 @@ WServer.on('error', function(err) {
213221} ) ;
214222
215223WServer . on ( 'message' , async function ( msg , info ) {
216- adobject = parseADIF ( msg . toString ( ) ) ;
224+ parsedXML = { } ;
225+ adobject = { } ;
226+ if ( msg . toString ( ) . includes ( "xml" ) ) { // detect if incoming String is XML
227+ try {
228+ xml . parseString ( msg . toString ( ) , function ( err , dat ) {
229+ parsedXML = dat ;
230+ } ) ;
231+ let qsodatum = new Date ( Date . parse ( parsedXML . contactinfo . timestamp [ 0 ] ) ) ;
232+ qsodat = fmt ( qsodatum ) ;
233+ if ( parsedXML . contactinfo . mode [ 0 ] == 'USB' || parsedXML . contactinfo . mode [ 0 ] == 'LSB' ) { // TCADIF lib is not capable of using USB/LSB
234+ parsedXML . contactinfo . mode [ 0 ] = 'SSB' ;
235+ }
236+ adobject = { qsos : [
237+ {
238+ CALL : parsedXML . contactinfo . call [ 0 ] ,
239+ MODE : parsedXML . contactinfo . mode [ 0 ] ,
240+ QSO_DATE_OFF : qsodat . d ,
241+ QSO_DATE : qsodat . d ,
242+ TIME_OFF : qsodat . t ,
243+ TIME_ON : qsodat . t ,
244+ RST_RCVD : parsedXML . contactinfo . rcv [ 0 ] ,
245+ RST_SENT : parsedXML . contactinfo . snt [ 0 ] ,
246+ FREQ : ( ( 1 * parseInt ( parsedXML . contactinfo . txfreq [ 0 ] ) ) / 100000 ) . toString ( ) ,
247+ FREQ_RX : ( ( 1 * parseInt ( parsedXML . contactinfo . rxfreq [ 0 ] ) ) / 100000 ) . toString ( ) ,
248+ OPERATOR : parsedXML . contactinfo . operator [ 0 ] ,
249+ COMMENT : parsedXML . contactinfo . comment [ 0 ] ,
250+ POWER : parsedXML . contactinfo . power [ 0 ] ,
251+ STX : parsedXML . contactinfo . sntnr [ 0 ] ,
252+ RTX : parsedXML . contactinfo . rcvnr [ 0 ] ,
253+ MYCALL : parsedXML . contactinfo . mycall [ 0 ] ,
254+ GRIDSQUARE : parsedXML . contactinfo . gridsquare [ 0 ] ,
255+ STATION_CALLSIGN : parsedXML . contactinfo . mycall [ 0 ]
256+ } ] } ;
257+ } catch ( e ) { }
258+ } else {
259+ adobject = parseADIF ( msg . toString ( ) ) ;
260+ }
217261 var plainret = '' ;
218262 if ( adobject . qsos . length > 0 ) {
219263 let x = { } ;
220264 try {
221- plainret = await send2wavelog ( defaultcfg , msg . toString ( ) ) ;
265+ outadif = writeADIF ( adobject ) ;
266+ plainret = await send2wavelog ( defaultcfg , outadif . stringify ( ) ) ;
222267 x . state = plainret . statusCode ;
223268 x . payload = JSON . parse ( plainret . resString ) ;
224269 } catch ( e ) {
@@ -340,4 +385,17 @@ function httpPost(url,options,postData) {
340385 } ) ;
341386}
342387
388+ function fmt ( spotDate ) {
389+ retstr = { } ;
390+ d = spotDate . getUTCDate ( ) . toString ( ) ;
391+ y = spotDate . getUTCFullYear ( ) . toString ( ) ;
392+ m = ( 1 + spotDate . getUTCMonth ( ) ) . toString ( ) ;
393+ h = spotDate . getUTCHours ( ) . toString ( ) ;
394+ i = spotDate . getUTCMinutes ( ) . toString ( ) ;
395+ s = spotDate . getUTCSeconds ( ) . toString ( ) ;
396+ retstr . d = y . padStart ( 4 , '0' ) + m . padStart ( 2 , '0' ) + d . padStart ( 2 , '0' ) ;
397+ retstr . t = h . padStart ( 2 , '0' ) + i . padStart ( 2 , '0' ) + s . padStart ( 2 , '0' ) ;
398+ return retstr ;
399+ }
400+
343401startserver ( ) ;
0 commit comments