From 6b6c8296098e8ffcd2dd7d4e9c2d881434ac59ad Mon Sep 17 00:00:00 2001 From: Tag Date: Sun, 27 Nov 2022 13:51:21 -0800 Subject: [PATCH 01/18] More chat fixes and CQ tracking in WSJT-X --- package.nw/lib/adif.js | 3 +- package.nw/lib/gt.js | 505 ++++++++++++++--------------------------- package.nw/lib/gtws.js | 53 +++-- 3 files changed, 200 insertions(+), 361 deletions(-) diff --git a/package.nw/lib/adif.js b/package.nw/lib/adif.js index 5dc3b00..69a09b9 100644 --- a/package.nw/lib/adif.js +++ b/package.nw/lib/adif.js @@ -2394,8 +2394,7 @@ function sendLotwLogEntry(report) lotwStation.value.length > 0 ) { - var header = - "Generated " + userTimeString(null) + " for " + myDEcall + "\r\n\r\n"; + var header = "Generated " + userTimeString(null) + " for " + myDEcall + "\r\n\r\n"; var pid = "GridTracker"; var pver = String(gtVersion); header += "" + pid + "\r\n"; diff --git a/package.nw/lib/gt.js b/package.nw/lib/gt.js index 2e201a7..18813d0 100644 --- a/package.nw/lib/gt.js +++ b/package.nw/lib/gt.js @@ -175,6 +175,7 @@ loadAllSettings(); var myDEcall = g_appSettings.myDEcall; var myDEGrid = g_appSettings.myDEGrid; +var myDXGrid = ""; var myMode = g_appSettings.myMode; var myBand = g_appSettings.myBand; var myRawFreq = g_appSettings.myRawFreq; @@ -1823,67 +1824,19 @@ function createFlagTipTable(toolElement) workColor = "#00FF00"; } - worker += - "
" + - g_gtFlagPins[key].call.formatCallsign() + - "
"; + worker += "
" + g_gtFlagPins[key].call.formatCallsign() + "
"; worker += ""; + worker += ""; + worker += ""; + worker += ""; + worker += ""; - worker += - ""; - - worker += - ""; - - worker += - ""; - - worker += - ""; - - var LL = squareToLatLongAll(g_gtFlagPins[key].grid); - - var bearing = parseInt( - MyCircle.bearing( - g_myLat, - g_myLon, - LL.la2 - (LL.la2 - LL.la1) / 2, - LL.lo2 - (LL.lo2 - LL.lo1) / 2 - ) - ); - worker += - ""; - worker += - ""; - + var LL = squareToCenter(g_gtFlagPins[key].grid); + var bearing = parseInt(MyCircle.bearing(g_myLat, g_myLon, LL.a, LL.o)); + + worker += ""; + worker += ""; worker += "
DXCC" + dxccName + " (" + g_dxccInfo[dxcc].pp + ")
Grid" + g_gtFlagPins[key].grid + "
Freq" + Number(g_gtFlagPins[key].freq / 1000).formatMhz(3, 3) + " (" + Number(g_gtFlagPins[key].freq / 1000000).formatBand() + ")
Mode" + g_gtFlagPins[key].mode + "
DXCC" + - dxccName + - " (" + - g_dxccInfo[dxcc].pp + - ")
Grid" + - g_gtFlagPins[key].grid + - "
Freq" + - Number(g_gtFlagPins[key].freq / 1000).formatMhz(3, 3) + - " (" + - Number(g_gtFlagPins[key].freq / 1000000).formatBand() + - ")
Mode" + - g_gtFlagPins[key].mode + - "
Dist" + - parseInt( - MyCircle.distance( - g_myLat, - g_myLon, - LL.la2 - (LL.la2 - LL.la1) / 2, - LL.lo2 - (LL.lo2 - LL.lo1) / 2, - distanceUnit.value - ) * MyCircle.validateRadius(distanceUnit.value) - ) + - distanceUnit.value.toLowerCase() + - "
Azim" + - bearing + - "°
Dist" + parseInt(MyCircle.distance(g_myLat, g_myLon, LL.a, LL.o, distanceUnit.value) * MyCircle.validateRadius(distanceUnit.value)) + distanceUnit.value.toLowerCase() + "
Azim" + bearing + "°
"; } else if (toolElement.size == 73) @@ -1992,94 +1945,35 @@ function createSpotTipTable(toolElement) g_layerSources["psk-hop"].clear(); var report = g_receptionReports.spots[toolElement.spot]; - var LL = squareToLatLongAll(myRawGrid); - var Lat = LL.la2 - (LL.la2 - LL.la1) / 2; - var Lon = LL.lo2 - (LL.lo2 - LL.lo1) / 2; - var fromPoint = ol.proj.fromLonLat([Lon, Lat]); + var LL = squareToCenter(myRawGrid); + var fromPoint = ol.proj.fromLonLat([LL.o, LL.a]); - worker = - ""; - worker += - ""; - worker += - ""; - worker += - ""; + worker = "
Rx Spot
Age" + - Number(now - report.when).toDHMS() + - "
dB" + - Number(report.snr).formatSignalReport() + - "
Call" + - report.call.formatCallsign() + - "
"; + worker += ""; + worker += ""; + worker += ""; if (report.dxcc > 0) { - worker += - ""; + worker += ""; } - worker += - ""; - worker += - ""; - worker += - ""; + worker += ""; + worker += ""; + worker += ""; - LL = squareToLatLongAll(report.grid); - - report.bearing = parseInt( - MyCircle.bearing( - g_myLat, - g_myLon, - LL.la2 - (LL.la2 - LL.la1) / 2, - LL.lo2 - (LL.lo2 - LL.lo1) / 2 - ) - ); - worker += - ""; - worker += - ""; - - worker += - ""; + LL = squareToCenter(report.grid); + report.bearing = parseInt(MyCircle.bearing(g_myLat, g_myLon, LL.a, LL.o)); + worker += ""; + worker += ""; + worker += ""; worker += "
Rx Spot
Age" + Number(now - report.when).toDHMS() + "
dB" + Number(report.snr).formatSignalReport() + "
Call" + report.call.formatCallsign() + "
DXCC" + - g_dxccToAltName[report.dxcc] + - " (" + - g_dxccInfo[report.dxcc].pp + - ")
DXCC" + g_dxccToAltName[report.dxcc] + " (" + g_dxccInfo[report.dxcc].pp + ")
Grid" + - report.grid + - "
Freq" + - report.freq.formatMhz() + - " (" + - report.band + - ")
Mode" + - report.mode + - "
Grid" + report.grid + "
Freq" + report.freq.formatMhz() + " (" + report.band + ")
Mode" + report.mode + "
Dist" + - parseInt( - MyCircle.distance( - g_myLat, - g_myLon, - LL.la2 - (LL.la2 - LL.la1) / 2, - LL.lo2 - (LL.lo2 - LL.lo1) / 2, - distanceUnit.value - ) * MyCircle.validateRadius(distanceUnit.value) - ) + - distanceUnit.value.toLowerCase() + - "
Azim" + - report.bearing + - "°
Time" + - userTimeString(report.when * 1000) + - "
Dist" + parseInt(MyCircle.distance(g_myLat, g_myLon, LL.a, LL.o, distanceUnit.value) * MyCircle.validateRadius(distanceUnit.value)) + distanceUnit.value.toLowerCase() + "
Azim" + report.bearing + "°
Time" + userTimeString(report.when * 1000) + "
"; var strokeWeight = pathWidthValue.value; + var toPoint = ol.proj.fromLonLat([LL.o, LL.a]); - Lat = LL.la2 - (LL.la2 - LL.la1) / 2; - Lon = LL.lo2 - (LL.lo2 - LL.lo1) / 2; - - var toPoint = ol.proj.fromLonLat([Lon, Lat]); - - var feature = flightFeature( + flightFeature( [fromPoint, toPoint], { weight: strokeWeight, @@ -4087,6 +3981,15 @@ function twoWideToLatLong(qth) return LatLong; } +function squareToCenter(qth) +{ + var LL = squareToLatLongAll(qth); + var obj = {}; + obj.a = LL.la2 - (LL.la2 - LL.la1) / 2; + obj.o = LL.lo2 - (LL.lo2 - LL.lo1) / 2; + return obj; +} + function squareToLatLongAll(qth) { qth = qth.toUpperCase(); @@ -6155,15 +6058,9 @@ function haltAllTx(allTx = false) function initiateQso(thisCall) { - if ( - thisCall in g_callRoster && - g_callRoster[thisCall].message.instance in g_instances - ) + if (thisCall in g_callRoster && g_callRoster[thisCall].message.instance in g_instances) { - if ( - g_mapSettings.focusRig && - g_activeInstance != g_callRoster[thisCall].message.instance - ) + if (g_mapSettings.focusRig && g_activeInstance != g_callRoster[thisCall].message.instance) { activeRig(g_callRoster[thisCall].message.instance); } @@ -6204,11 +6101,7 @@ function spotLookupAndSetCall(spot) var mode = g_receptionReports.spots[spot].mode; for (var instance in g_instances) { - if ( - g_instances[instance].valid && - g_instances[instance].status.Band == band && - g_instances[instance].status.MO == mode - ) + if (g_instances[instance].valid && g_instances[instance].status.Band == band && g_instances[instance].status.MO == mode) { setCallAndGrid(call, grid, instance); return; @@ -6217,7 +6110,7 @@ function spotLookupAndSetCall(spot) setCallAndGrid(call, grid, null); } -function setCallAndGrid(callsign, grid, instance = null) +function setCallAndGrid(callsign, grid, instance = null, genMessages = true) { var thisInstance = null; var port; @@ -6230,7 +6123,10 @@ function setCallAndGrid(callsign, grid, instance = null) port = g_instances[instance].remote.port; address = g_instances[instance].remote.address; } - else alert("major instance error"); + else + { + alert("major instance error"); + } } else { @@ -6241,7 +6137,7 @@ function setCallAndGrid(callsign, grid, instance = null) address = g_instances[g_activeInstance].remote.address; } } - if (thisInstance && thisInstance.TxEnabled == 0) + if (thisInstance && (thisInstance.TxEnabled == 0 || genMessages == false)) { var responseArray = Buffer.alloc(1024); var length = 0; @@ -6255,25 +6151,50 @@ function setCallAndGrid(callsign, grid, instance = null) length = encodeQBOOL(responseArray, length, thisInstance.Fastmode); length = encodeQUINT32(responseArray, length, thisInstance.TRP); length = encodeQUINT32(responseArray, length, thisInstance.RxDF); - length = encodeQUTF8(responseArray, length, callsign); + + if (genMessages == true) + { + length = encodeQUTF8(responseArray, length, callsign); - var hash = liveHash(callsign, thisInstance.Band, thisInstance.MO); - if (hash in g_liveCallsigns && g_liveCallsigns[hash].grid.length > 1) { grid = g_liveCallsigns[hash].grid; } + var hash = liveHash(callsign, thisInstance.Band, thisInstance.MO); + if (hash in g_liveCallsigns && g_liveCallsigns[hash].grid.length > 1) { grid = g_liveCallsigns[hash].grid; } - if (grid.length == 0) grid = " "; + if (grid.length == 0) grid = " "; - length = encodeQUTF8(responseArray, length, grid); - length = encodeQBOOL(responseArray, length, 1); + length = encodeQUTF8(responseArray, length, grid); + length = encodeQBOOL(responseArray, length, 1); + + responseArray = responseArray.slice(0, length); + wsjtUdpMessage(responseArray, responseArray.length, port, address); + addLastTraffic("Generated Msgs"); + } + else + { + // Callsign + length = encodeQUTF8(responseArray, length, " "); + // Grid + length = encodeQUTF8(responseArray, length, " "); + length = encodeQBOOL(responseArray, length, 1); + + responseArray = responseArray.slice(0, length); + wsjtUdpMessage(responseArray, responseArray.length, port, address); - responseArray = responseArray.slice(0, length); - wsjtUdpMessage(responseArray, responseArray.length, port, address); - addLastTraffic("Generated Msgs"); + responseArray = Buffer.alloc(1024); + length = 0; + length = encodeQUINT32(responseArray, length, thisInstance.magic_key); + length = encodeQUINT32(responseArray, length, thisInstance.schema_number); + length = encodeQUINT32(responseArray, length, 9); + length = encodeQUTF8(responseArray, length, thisInstance.Id); + length = encodeQUTF8(responseArray, length, ""); + length = encodeQBOOL(responseArray, length, 0); + + responseArray = responseArray.slice(0, length); + wsjtUdpMessage(responseArray, responseArray.length, port, address); + } } - if (thisInstance && thisInstance.TxEnabled == 1) + if (thisInstance && thisInstance.TxEnabled == 1 && genMessages == true) { - addLastTraffic( - "Transmit Enabled!
Generate Msgs Aborted" - ); + addLastTraffic("Transmit Enabled!
Generate Msgs Aborted"); } } @@ -6321,7 +6242,6 @@ function handleWsjtxQSO(newMessage) function handleWsjtxNotSupported(newMessage) { } -var g_gtShareCount = 0; var g_lastBand = ""; var g_lastMode = ""; @@ -6389,9 +6309,9 @@ function activeRig(instance) } } -var g_lastDecodeCallsign = ""; var g_lastTransmitCallsign = {}; var g_lastStatusCallsign = {}; +var g_lastTxMessage = ""; function handleWsjtxStatus(newMessage) { @@ -6431,11 +6351,7 @@ function handleWsjtxStatus(newMessage) if (!(newMessage.instance in g_lastStatusCallsign)) { g_lastStatusCallsign[newMessage.instance] = ""; } - if ( - lookupOnTx.checked == true && - newMessage.Transmitting == 1 && - g_lastTransmitCallsign[newMessage.instance] != DXcall - ) + if (lookupOnTx.checked == true && newMessage.Transmitting == 1 && g_lastTransmitCallsign[newMessage.instance] != DXcall) { openLookupWindow(true); g_lastTransmitCallsign[newMessage.instance] = DXcall; @@ -6470,8 +6386,7 @@ function handleWsjtxStatus(newMessage) var bandChange = false; var modeChange = false; - var origMode = g_lastMode; - var origBand = g_lastBand; + wsjtxMode.innerHTML = "" + newMessage.MO + ""; myMode = newMessage.MO; myBand = newMessage.Band; @@ -6505,28 +6420,20 @@ function handleWsjtxStatus(newMessage) redrawParks(); redrawPins(); - var msg = ""; - - msg += "" + myBand + " / "; - msg += "" + myMode + ""; + var msg = "" + myBand + " / " + myMode + ""; addLastTraffic(msg); ackAlerts(); updateChatWindow(); } - myRawFreq = newMessage.Frequency; - frequency.innerHTML = - "" + - Number(newMessage.Frequency / 1000).formatMhz(3, 3) + - " Hz (" + - myBand + - ")"; - myRawCall = newMessage.DEcall.trim(); + myRawFreq = newMessage.Frequency; + frequency.innerHTML = "" + Number(newMessage.Frequency / 1000).formatMhz(3, 3) + " Hz (" + myBand + ")"; + myRawCall = newMessage.DEcall.trim(); myRawGrid = newMessage.DEgrid.trim().substr(0, 6); - var LL = squareToLatLongAll(myRawGrid); - g_mapSettings.latitude = g_myLat = LL.la2 - (LL.la2 - LL.la1) / 2; - g_mapSettings.longitude = g_myLon = LL.lo2 - (LL.lo2 - LL.lo1) / 2; + var LL = squareToCenter(myRawGrid); + g_mapSettings.latitude = g_myLat = LL.a; + g_mapSettings.longitude = g_myLon = LL.o; if (myRawGrid != g_lastRawGrid) { g_lastRawGrid = myRawGrid; @@ -6545,6 +6452,18 @@ function handleWsjtxStatus(newMessage) dxCallBoxDiv.className = "DXCallBoxConfirmed"; } + if (newMessage.Transmitting == 1 && newMessage.TxMessage && g_lastTxMessage != newMessage.TxMessage) + { + g_lastTxMessage = newMessage.TxMessage; + addLastTraffic(newMessage.TxMessage); + if (newMessage.TxMessage.substr(0, 2) == "CQ" && DXcall.length > 0) + { + setCallAndGrid("", "", newMessage.instance, false); + DXcall = ""; + newMessage.DXgrid = ""; + } + } + g_localDXcall = DXcall; localDXcall.innerHTML = DXcall.formatCallsign(); if (localDXcall.innerHTML.length == 0) @@ -6556,10 +6475,7 @@ function handleWsjtxStatus(newMessage) if (myDXGrid.length == 0 && hash in g_liveCallsigns) { - localDXGrid.innerHTML = myDXGrid = g_liveCallsigns[hash].grid.substr( - 0, - 4 - ); + localDXGrid.innerHTML = myDXGrid = g_liveCallsigns[hash].grid.substr(0, 4); } if (localDXGrid.innerHTML.length == 0) @@ -6570,39 +6486,28 @@ function handleWsjtxStatus(newMessage) } else { - var LL = squareToLatLongAll(myDXGrid); - localDXDistance.innerHTML = - parseInt( - MyCircle.distance( - g_myLat, - g_myLon, - LL.la2 - (LL.la2 - LL.la1) / 2, - LL.lo2 - (LL.lo2 - LL.lo1) / 2, - distanceUnit.value - ) * MyCircle.validateRadius(distanceUnit.value) - ) + distanceUnit.value.toLowerCase(); - localDXAzimuth.innerHTML = - parseInt( - MyCircle.bearing( - g_myLat, - g_myLon, - LL.la2 - (LL.la2 - LL.la1) / 2, - LL.lo2 - (LL.lo2 - LL.lo1) / 2 - ) - ) + "°"; + var LL = squareToCenter(myDXGrid); + localDXDistance.innerHTML = parseInt(MyCircle.distance(g_myLat, g_myLon, LL.a, distanceUnit.value) * MyCircle.validateRadius(distanceUnit.value)) + distanceUnit.value.toLowerCase(); + localDXAzimuth.innerHTML = parseInt(MyCircle.bearing(g_myLat, g_myLon, LL.a, LL.o)) + "°"; } + if (localDXcall.innerHTML != "-") { - localDXReport.innerHTML = Number( - newMessage.Report.trim() - ).formatSignalReport(); - if (DXcall.length > 0) { localDXCountry.innerHTML = g_dxccToAltName[callsignToDxcc(DXcall)]; } - else localDXCountry.innerHTML = " "; + localDXReport.innerHTML = Number(newMessage.Report.trim()).formatSignalReport(); + if (DXcall.length > 0) + { + localDXCountry.innerHTML = g_dxccToAltName[callsignToDxcc(DXcall)]; + } + else + { + localDXCountry.innerHTML = " "; + } } else { localDXReport.innerHTML = localDXCountry.innerHTML = ""; } + myDEcall = newMessage.DEcall; myDEGrid = newMessage.DEgrid.trim().substr(0, 6); if (myDEGrid.length > 0) setHomeGridsquare(); @@ -6632,37 +6537,24 @@ function handleWsjtxStatus(newMessage) if (g_appSettings.gtShareEnable == "true") { g_gtLiveStatusUpdate = true; - g_gtShareCount++; } - else g_gtShareCount = 0; if (bandChange || modeChange) reloadInfo(bandChange || modeChange); var worker = ""; - worker += - "
"; + worker += "
"; worker += ""; - worker += - ""; - worker += - ""; + worker += ""; + worker += ""; worker += g_lastMessages.join(""); worker += "
Last " + - g_lastMessages.length + - " Decoded Messages
TimedBDTFreqModeMessageDXCC
Last " + g_lastMessages.length + " Decoded Messages
TimedBDTFreqModeMessageDXCC
"; setStatsDiv("decodeLastListDiv", worker); - setStatsDivHeight( - "decodeLastListDiv", - getStatsWindowHeight() + 26 + "px" - ); + setStatsDivHeight("decodeLastListDiv", getStatsWindowHeight() + 26 + "px"); - if ( - g_appSettings.gtShareEnable === true && - Object.keys(g_spotCollector).length > 0 - ) + if (g_appSettings.gtShareEnable === true && Object.keys(g_spotCollector).length > 0) { gtChatSendSpots(g_spotCollector, g_spotDetailsCollector); g_spotCollector = {}; @@ -6677,10 +6569,7 @@ function handleWsjtxStatus(newMessage) if (newMessage.TxEnabled) { - if ( - g_mapSettings.fitQRZ && - (!g_spotsEnabled || g_receptionSettings.mergeSpots) - ) + if (g_mapSettings.fitQRZ && (!g_spotsEnabled || g_receptionSettings.mergeSpots)) { if (g_lastMapView == null) { @@ -6692,19 +6581,12 @@ function handleWsjtxStatus(newMessage) { fitViewBetweenPoints([getPoint(myRawGrid), getPoint(myDXGrid)]); } - else if ( - g_mapSettings.qrzDxccFallback && - DXcall.length > 0 && - callsignToDxcc(DXcall) > 0 - ) + else if (g_mapSettings.qrzDxccFallback && DXcall.length > 0 && callsignToDxcc(DXcall) > 0) { var dxcc = callsignToDxcc(DXcall); var Lat = g_dxccInfo[dxcc].lat; var Lon = g_dxccInfo[dxcc].lon; - fitViewBetweenPoints( - [getPoint(myRawGrid), ol.proj.fromLonLat([Lon, Lat])], - 15 - ); + fitViewBetweenPoints([getPoint(myRawGrid), ol.proj.fromLonLat([Lon, Lat])], 15); } } } @@ -6721,6 +6603,7 @@ function handleWsjtxStatus(newMessage) if (newMessage.Transmitting == 0) { // Not Transmitting + g_lastTxMessage = ""; g_layerSources.transmit.clear(); g_transmitFlightPath = null; } @@ -6733,53 +6616,31 @@ function handleWsjtxStatus(newMessage) txrxdec.innerHTML = "TRANSMIT"; g_layerSources.transmit.clear(); g_transmitFlightPath = null; - if ( - qrzPathWidthValue.value != 0 && - g_appSettings.gridViewMode != 2 && - validateGridFromString(myRawGrid) - ) + + if (qrzPathWidthValue.value != 0 && g_appSettings.gridViewMode != 2 && validateGridFromString(myRawGrid)) { var strokeColor = getQrzPathColor(); var strokeWeight = qrzPathWidthValue.value; - var LL = squareToLatLongAll(myRawGrid); - var Lat = LL.la2 - (LL.la2 - LL.la1) / 2; - var Lon = LL.lo2 - (LL.lo2 - LL.lo1) / 2; - var fromPoint = ol.proj.fromLonLat([Lon, Lat]); + var LL = squareToCenter(myRawGrid); + var fromPoint = ol.proj.fromLonLat([LL.o, LL.a]); var toPoint = null; if (validateGridFromString(myDXGrid)) { - LL = squareToLatLongAll(myDXGrid); - Lat = LL.la2 - (LL.la2 - LL.la1) / 2; - Lon = LL.lo2 - (LL.lo2 - LL.lo1) / 2; - - toPoint = ol.proj.fromLonLat([Lon, Lat]); + LL = squareToCenter(myDXGrid); + toPoint = ol.proj.fromLonLat([LL.o, LL.a]); } - else if ( - g_mapSettings.qrzDxccFallback && - DXcall.length > 0 && - callsignToDxcc(DXcall) > 0 - ) + else if (g_mapSettings.qrzDxccFallback && DXcall.length > 0 && callsignToDxcc(DXcall) > 0) { var dxcc = callsignToDxcc(DXcall); - Lat = g_dxccInfo[dxcc].lat; - Lon = g_dxccInfo[dxcc].lon; - - toPoint = ol.proj.fromLonLat([Lon, Lat]); + toPoint = ol.proj.fromLonLat([g_dxccInfo[dxcc].lon, g_dxccInfo[dxcc].lat]); var locality = g_dxccInfo[dxcc].geo; if (locality == "deleted") locality = null; if (locality != null) { - var feature = shapeFeature( - "qrz", - locality, - "qrz", - "#FFFF0010", - "#FF0000FF", - 1.0 - ); + var feature = shapeFeature("qrz", locality, "qrz", "#FFFF0010", "#FF0000FF", 1.0); g_layerSources.transmit.addFeature(feature); } } @@ -6847,14 +6708,12 @@ function drawTraffic() } trafficDiv.innerHTML = worker; } + function getPoint(grid) { - var LL = squareToLatLongAll(grid); - var Lat = LL.la2 - (LL.la2 - LL.la1) / 2; - var Lon = LL.lo2 - (LL.lo2 - LL.lo1) / 2; - return ol.proj.fromLonLat([Lon, Lat]); + var LL = squareToCenter(grid); + return ol.proj.fromLonLat([LL.o, LL.a]); } -var g_showCQRU = true; function fitViewBetweenPoints(points, maxZoom = 20) { @@ -7143,25 +7002,13 @@ function handleWsjtxDecode(newMessage) callsign.CQ = CQ; callsign.RR73 = RR73; - if (msgDXcallsign == myDEcall) callsign.qrz = true; - else callsign.qrz = false; + callsign.qrz = (msgDXcallsign == myDEcall); if (callsign.grid.length > 0 && callsign.distance == 0) { - var LL = squareToLatLongAll(callsign.grid); - callsign.distance = MyCircle.distance( - g_myLat, - g_myLon, - LL.la2 - (LL.la2 - LL.la1) / 2, - LL.lo2 - (LL.lo2 - LL.lo1) / 2, - distanceUnit.value - ); - callsign.heading = MyCircle.bearing( - g_myLat, - g_myLon, - LL.la2 - (LL.la2 - LL.la1) / 2, - LL.lo2 - (LL.lo2 - LL.lo1) / 2 - ); + var LL = squareToCenter(callsign.grid); + callsign.distance = MyCircle.distance(g_myLat, g_myLon, LL.a, LL.o, distanceUnit.value); + callsign.heading = MyCircle.bearing(g_myLat, g_myLon, LL.a, LL.o); } if (g_appSettings.potaEnabled == 1) @@ -9524,16 +9371,8 @@ function renderStatsBox() if (finalGrid.length > 0) { - LL = squareToLatLongAll(finalGrid); - unit = parseInt( - MyCircle.distance( - g_myLat, - g_myLon, - LL.la2 - (LL.la2 - LL.la1) / 2, - LL.lo2 - (LL.lo2 - LL.lo1) / 2, - distanceUnit.value - ) * MyCircle.validateRadius(distanceUnit.value) - ); + LL = squareToCenter(finalGrid); + unit = parseInt(MyCircle.distance(g_myLat, g_myLon, LL.a, LL.o, distanceUnit.value) * MyCircle.validateRadius(distanceUnit.value)); if (unit > long_distance.worked_unit) { @@ -12324,9 +12163,7 @@ function drawAllGrids() } } - var LL = twoWideToLatLong( - String.fromCharCode(x) + String.fromCharCode(y) - ); + var LL = twoWideToLatLong(String.fromCharCode(x) + String.fromCharCode(y)); var Lat = LL.la2 - (LL.la2 - LL.la1) / 2; var Lon = LL.lo2 - (LL.lo2 - LL.lo1) / 2; var point = ol.proj.fromLonLat([Lon, Lat]); @@ -13914,6 +13751,15 @@ function updateWsjtxListener(port) { newMessage.ConfName = null; } + if (message.length > 0) + { + newMessage.TxMessage = decodeQUTF8(message); + message = message.slice(g_qtToSplice); + } + else + { + newMessage.TxMessage = null; + } g_instances[instanceId].oldStatus = g_instances[instanceId].status; g_instances[instanceId].status = newMessage; g_instances[instanceId].valid = true; @@ -15945,38 +15791,33 @@ function createSpot(report, key, fromPoint, addToLayer = true) { try { - var LL = squareToLatLongAll(report.grid); + var LL = squareToCenter(report.grid); - if (isNaN(LL.la1)) + if (isNaN(LL.a)) { // Bad value in grid, don't map // return; } - var Lat = LL.la2 - (LL.la2 - LL.la1) / 2; - var Lon = LL.lo2 - (LL.lo2 - LL.lo1) / 2; - - var spot = spotFeature([Lon, Lat]); + var spot = spotFeature([LL.o, LL.a]); var colorNoAlpha = "#" + g_bandToColor[report.band]; var colorAlpha = intAlphaToRGB(colorNoAlpha, report.color); var spotColor = colorAlpha; - var workingColor = - g_mapSettings.nightMapEnable && g_nightTime - ? g_receptionSettings.pathNightColor - : g_receptionSettings.pathColor; + var workingColor = g_mapSettings.nightMapEnable && g_nightTime ? g_receptionSettings.pathNightColor : g_receptionSettings.pathColor; if (workingColor != -1) { - var testColor = - workingColor < 1 - ? "#0000000" - : workingColor == 361 - ? "#FFFFFF" - : "hsla(" + workingColor + ", 100%, 50%," + report.color / 255 + ")"; - if (workingColor < 1 || workingColor == 361) { spotColor = intAlphaToRGB(testColor.substr(0, 7), report.color); } - else spotColor = testColor; + var testColor = workingColor < 1 ? "#0000000" : workingColor == 361 ? "#FFFFFF" : "hsla(" + workingColor + ", 100%, 50%," + report.color / 255 + ")"; + if (workingColor < 1 || workingColor == 361) + { + spotColor = intAlphaToRGB(testColor.substr(0, 7), report.color); + } + else + { + spotColor = testColor; + } } featureStyle = new ol.style.Style({ @@ -15993,7 +15834,7 @@ function createSpot(report, key, fromPoint, addToLayer = true) spot.size = 6; // Mouseover detection g_layerSources["psk-spots"].addFeature(spot); - var toPoint = ol.proj.fromLonLat([Lon, Lat]); + var toPoint = ol.proj.fromLonLat([LL.o, LL.a]); var lonLat = new ol.geom.Point(toPoint); @@ -16015,7 +15856,7 @@ function createSpot(report, key, fromPoint, addToLayer = true) ? g_spotNightFlightColor : g_spotFlightColor; - var feature = flightFeature( + flightFeature( [fromPoint, toPoint], { weight: strokeWeight, diff --git a/package.nw/lib/gtws.js b/package.nw/lib/gtws.js index 66d8c5b..1eeb449 100644 --- a/package.nw/lib/gtws.js +++ b/package.nw/lib/gtws.js @@ -165,17 +165,23 @@ function gtClosedSocket() g_gtState = ChatState.none; } +var g_lastConnectAttempt = 0; + function gtCanConnect() { + g_lastConnectAttempt = timeNowSec(); g_gtState = ChatState.connect; } function gtSetIdle() { - g_gtStatusCount = 0; - g_gtNeedUsersList = true; - g_gtState = ChatState.idle; - g_lastGtStatus = ""; + if (timeNowSec() - g_lastConnectAttempt >= 30) + { + g_gtStatusCount = 0; + g_gtNeedUsersList = true; + g_gtState = ChatState.idle; + g_lastGtStatus = ""; + } } function gtStatusCheck() @@ -220,7 +226,8 @@ function sendGtJson(json) } } } - else g_gtState = ChatState.closed; + // if we don't have a socketHandle, don't go changing the state willy nilly! + // else g_gtState = ChatState.closed; } var g_lastGtStatus = ""; @@ -370,7 +377,9 @@ function redrawPins() makeGtPin(g_gtFlagPins[cid]); if (g_gtFlagPins[cid].pin != null) - { g_layerSources.gtflags.addFeature(g_gtFlagPins[cid].pin); } + { + g_layerSources.gtflags.addFeature(g_gtFlagPins[cid].pin); + } } } @@ -381,7 +390,9 @@ function makeGtPin(obj) if (obj.pin) { if (g_layerSources.gtflags.hasFeature(obj.pin)) - { g_layerSources.gtflags.removeFeature(obj.pin); } + { + g_layerSources.gtflags.removeFeature(obj.pin); + } delete obj.pin; obj.pin = null; } @@ -394,19 +405,13 @@ function makeGtPin(obj) if (validateGridFromString(obj.grid) == false) return; - if ( - g_appSettings.gtFlagImgSrc == 2 && - (obj.mode != myMode || obj.band != myBand) - ) - { return; } + if (g_appSettings.gtFlagImgSrc == 2 && (obj.mode != myMode || obj.band != myBand)) + { + return; + } - var LL = squareToLatLongAll(obj.grid); - var myLonLat = [ - LL.lo2 - (LL.lo2 - LL.lo1) / 2, - LL.la2 - (LL.la2 - LL.la1) / 2 - ]; - - obj.pin = iconFeature(ol.proj.fromLonLat(myLonLat), g_gtFlagIcon, 100); + var LL = squareToCenter(obj.grid); + obj.pin = iconFeature(ol.proj.fromLonLat([LL.o, LL.a]), g_gtFlagIcon, 100); obj.pin.key = obj.cid; obj.pin.isGtFlag = true; obj.pin.size = 1; @@ -570,10 +575,7 @@ function gtChatSetUUID(jsmesg) function gtChatStateMachine() { - if ( - g_appSettings.gtShareEnable == true && - g_mapSettings.offlineMode == false - ) + if (g_appSettings.gtShareEnable == true && g_mapSettings.offlineMode == false) { var now = timeNowSec(); g_gtStateToFunction[g_gtState](); @@ -584,10 +586,7 @@ function gtChatStateMachine() } else msgImg.style.webkitFilter = ""; - if ( - g_msgSettings.msgFrequencySelect > 0 && - Object.keys(g_gtUnread).length > 0 - ) + if (g_msgSettings.msgFrequencySelect > 0 && Object.keys(g_gtUnread).length > 0) { if (now - g_lastChatMsgAlert > g_msgSettings.msgFrequencySelect * 60) { From ffb9d2f411600661c891cf913013abd793352b8b Mon Sep 17 00:00:00 2001 From: Tag Date: Sun, 27 Nov 2022 14:00:19 -0800 Subject: [PATCH 02/18] Delay connecting intially for atleast 15 seconds from startup --- package.nw/lib/gtws.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.nw/lib/gtws.js b/package.nw/lib/gtws.js index 1eeb449..7c6f397 100644 --- a/package.nw/lib/gtws.js +++ b/package.nw/lib/gtws.js @@ -165,7 +165,8 @@ function gtClosedSocket() g_gtState = ChatState.none; } -var g_lastConnectAttempt = 0; +// Connect 15 seconds after startup +var g_lastConnectAttempt = parseInt(Date.now() / 1000) - 15; function gtCanConnect() { From 8d0eb92004c37c10b27574279e8e4760c387f1d1 Mon Sep 17 00:00:00 2001 From: Tag Date: Sun, 27 Nov 2022 14:23:34 -0800 Subject: [PATCH 03/18] Don't send message unless it is a UUID request or our UUID is valid --- package.nw/lib/gtws.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/package.nw/lib/gtws.js b/package.nw/lib/gtws.js index 7c6f397..93c1609 100644 --- a/package.nw/lib/gtws.js +++ b/package.nw/lib/gtws.js @@ -47,6 +47,7 @@ var g_gtStatusCount = 0; var g_gtStatusTime = 500; var g_gtMaxChatMessages = 100; var g_gtNeedUsersList = true; +var g_gtUuidValid = false; var g_gtLiveStatusUpdate = false; @@ -183,6 +184,7 @@ function gtSetIdle() g_gtState = ChatState.idle; g_lastGtStatus = ""; } + g_gtUuidValid = false; } function gtStatusCheck() @@ -211,11 +213,11 @@ function gtStatusCheck() } } -function sendGtJson(json) +function sendGtJson(json, isUUIDrequest = false) { if (g_gtChatSocket != null) { - if (g_gtChatSocket.readyState === WebSocket.OPEN) + if (g_gtChatSocket.readyState === WebSocket.OPEN && (isUUIDrequest || g_gtUuidValid)) { g_gtChatSocket.send(json); } @@ -561,7 +563,7 @@ function gtChatSendUUID() msg.call = myDEcall; msg.ver = gtShortVersion; - sendGtJson(JSON.stringify(msg)); + sendGtJson(JSON.stringify(msg), true); } function gtChatSetUUID(jsmesg) @@ -569,6 +571,7 @@ function gtChatSetUUID(jsmesg) g_appSettings.chatUUID = jsmesg.uuid; myChatId = jsmesg.id; + g_gtUuidValid = true; gtChatSendStatus(); g_gtState = ChatState.status; From e3d18d7e9de4e3cc6ddb06300a408e460083771b Mon Sep 17 00:00:00 2001 From: Tag Date: Sun, 27 Nov 2022 14:46:46 -0800 Subject: [PATCH 04/18] Dont redraw pin if they haven't moved --- package.nw/lib/gtws.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.nw/lib/gtws.js b/package.nw/lib/gtws.js index 93c1609..666a57b 100644 --- a/package.nw/lib/gtws.js +++ b/package.nw/lib/gtws.js @@ -313,7 +313,7 @@ function gtChatUpdateCall(jsmesg) { g_gtFlagPins[cid].ids[id] = true; // Did they move grid location? - if (g_gtFlagPins[cid].pin != null) + if (jsmesg.grid != g_gtFlagPins[cid].grid && g_gtFlagPins[cid].pin != null) { // remove pin from map here if (g_layerSources.gtflags.hasFeature(g_gtFlagPins[cid].pin)) From b381c16e4e59e89e0ff20679c9ea3b95fa785d5a Mon Sep 17 00:00:00 2001 From: Tag Date: Sun, 27 Nov 2022 15:55:03 -0800 Subject: [PATCH 05/18] Don't check EVERY callsign on just an individual update --- package.nw/gt_chat.html | 116 ++++++++++++++++++++++++++++++---------- package.nw/lib/gtws.js | 15 ++++-- 2 files changed, 98 insertions(+), 33 deletions(-) diff --git a/package.nw/gt_chat.html b/package.nw/gt_chat.html index a76f692..57df60d 100644 --- a/package.nw/gt_chat.html +++ b/package.nw/gt_chat.html @@ -204,6 +204,7 @@ function makeCallsignRow(callObj, show) { + var isNewObj = false; var obj = document.getElementById(callObj.cid); if (obj && obj.fCall != callObj.fCall) { @@ -213,6 +214,7 @@ } if (!obj) { + isNewObj = true; var low = 0; var mid = 0; var target = null; @@ -260,6 +262,65 @@ } obj.style.display = show ? "" : "none"; } + return isNewObj; + } + + function updateCallsign(id) + { + var count = parseInt(userCount.innerHTML); + var shouldCount = false; + if (id in window.opener.g_gtFlagPins) + { + var obj = window.opener.g_gtFlagPins[id]; + if (obj.call != "" && obj.call != "NOCALL") + { + var show = true; + try { + if (searchBox.value.length > 0 && !obj.call.match(searchBox.value)) + { + show = false; + } + } + catch (e) {} + + if (g_viewBand > 0 && window.opener.myBand != obj.band) show = false; + + if (g_viewMode > 0 && window.opener.myMode != obj.mode) show = false; + + if (obj.canmsg == false) show = false; + + if (makeCallsignRow(obj, show) && show) + { + count++; + } + + if (obj.cid == g_currentId && messageInput.disabled == true && obj.live == true) + { + messageTextDiv.innerHTML += makeViewMessage("system", "GT", "Session resumed", null); + messageInput.value = ""; + scrollDown(messageTextDiv); + messageInput.disabled = false; + } + } + if (id == g_currentId) + { + updateBar(g_currentId); + } + + } + else + { + var obj = document.getElementById(id); + if (obj) + { + if (obj.style.display == "") + { + count--; + } + allCallDiv.removeChild(obj); + } + } + userCount.innerHTML = count; } function showAllCallsigns() @@ -319,14 +380,18 @@ if (g_viewBand) { viewBand.innerHTML = window.opener.myBand; - } else { + } + else + { viewBand.innerHTML = "All"; } if (g_viewMode) { viewMode.innerHTML = window.opener.myMode; - } else { + } + else + { viewMode.innerHTML = "All"; } @@ -336,31 +401,32 @@ function showAllMessages() { + activeCallsignsDiv.innerHTML = "no message history"; if (Object.keys(window.opener.g_gtMessages).length > 0) { - var worker = ""; + var worker = ""; for (const key in window.opener.g_gtMessages) { - worker += ""; - worker += - ""; + worker += ""; + worker += ""; + } + } + if (worker.length > 0) + { + activeCallsignsDiv.innerHTML = "
"; - if (key in window.opener.g_gtUnread) worker += "🔥"; - else worker += "💬"; + if (key in window.opener.g_gtFlagPins) + { + worker += "
"; + if (key in window.opener.g_gtUnread) + { + worker += "🔥"; + } + else + { + worker += "💬"; + } - worker += - "" + - window.opener.g_gtFlagPins[key].call.formatCallsign() + - "
" + window.opener.g_gtFlagPins[key].call.formatCallsign() + "
" + worker + "
"; } - - worker += ""; - activeCallsignsDiv.innerHTML = worker; - } else { - activeCallsignsDiv.innerHTML = "no message history"; } } @@ -435,14 +501,6 @@ scrollDown(messageTextDiv); messageInput.disabled = true; } - else - { - var obj = document.getElementById(id); - if (obj) - { - allCallDiv.removeChild(obj); - } - } } function updateBar(id) diff --git a/package.nw/lib/gtws.js b/package.nw/lib/gtws.js index 666a57b..fe0bb2f 100644 --- a/package.nw/lib/gtws.js +++ b/package.nw/lib/gtws.js @@ -297,7 +297,7 @@ function gtChatRemoveCall(jsmesg) delete g_gtFlagPins[cid]; } - updateChatWindow(); + updateChatWindow(cid); } } delete g_gtIdToCid[id]; @@ -354,7 +354,7 @@ function gtChatUpdateCall(jsmesg) } g_gtChatlistChangeCount++; g_gtCallsigns[g_gtFlagPins[cid].call] = cid; - updateChatWindow(); + updateChatWindow(cid); } function gtChatGetList() @@ -693,13 +693,20 @@ function notifyNoChat(id) } } -function updateChatWindow() +function updateChatWindow(id = null) { if (g_chatWindowHandle != null) { try { - g_chatWindowHandle.window.updateEverything(); + if (id) + { + g_chatWindowHandle.window.updateCallsign(id); + } + else + { + g_chatWindowHandle.window.updateEverything(); + } } catch (e) {} } From 97fc00d88dc010a339bc8c3fb5bf488d9c7262c7 Mon Sep 17 00:00:00 2001 From: Tag Date: Sun, 27 Nov 2022 16:07:21 -0800 Subject: [PATCH 06/18] unreferenced var --- package.nw/gt_chat.html | 1 - 1 file changed, 1 deletion(-) diff --git a/package.nw/gt_chat.html b/package.nw/gt_chat.html index 57df60d..c2ef12a 100644 --- a/package.nw/gt_chat.html +++ b/package.nw/gt_chat.html @@ -268,7 +268,6 @@ function updateCallsign(id) { var count = parseInt(userCount.innerHTML); - var shouldCount = false; if (id in window.opener.g_gtFlagPins) { var obj = window.opener.g_gtFlagPins[id]; From a34d51d382881f7cb24103d3724aad8572fddd4e Mon Sep 17 00:00:00 2001 From: Tag Date: Sun, 27 Nov 2022 17:31:12 -0800 Subject: [PATCH 07/18] Stop doing more than needed --- package.nw/lib/gtws.js | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/package.nw/lib/gtws.js b/package.nw/lib/gtws.js index fe0bb2f..88e4748 100644 --- a/package.nw/lib/gtws.js +++ b/package.nw/lib/gtws.js @@ -577,6 +577,8 @@ function gtChatSetUUID(jsmesg) g_gtState = ChatState.status; } +var g_getEngineWasRunning = false; + function gtChatStateMachine() { if (g_appSettings.gtShareEnable == true && g_mapSettings.offlineMode == false) @@ -597,12 +599,17 @@ function gtChatStateMachine() alertChatMessage(); } } + g_getEngineWasRunning = true; } else { - closeGtSocket(); - g_gtChatlistChangeCount = 0; - g_lastGtStatus = ""; + if (g_getEngineWasRunning == true) + { + g_getEngineWasRunning = false; + closeGtSocket(); + g_gtChatlistChangeCount = 0; + g_lastGtStatus = ""; + } } } From afda20091cdbcc0c3541e74efa37e54a82e312f5 Mon Sep 17 00:00:00 2001 From: Tag Date: Sun, 27 Nov 2022 17:58:56 -0800 Subject: [PATCH 08/18] Only send status once on connect --- package.nw/lib/gtws.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.nw/lib/gtws.js b/package.nw/lib/gtws.js index 88e4748..3cc9dfa 100644 --- a/package.nw/lib/gtws.js +++ b/package.nw/lib/gtws.js @@ -573,7 +573,8 @@ function gtChatSetUUID(jsmesg) g_gtUuidValid = true; gtChatSendStatus(); - + g_gtLiveStatusUpdate = false; + g_gtStatusCount = g_gtStatusTime; g_gtState = ChatState.status; } From 8f1c20dd1ddf1f687641b14fc1567ad1bdf5dadc Mon Sep 17 00:00:00 2001 From: Tag Date: Mon, 28 Nov 2022 20:26:59 -0800 Subject: [PATCH 09/18] POTA fixes --- package.nw/lib/adif.js | 7 +- package.nw/lib/gt.js | 30 ++- package.nw/lib/pota.js | 197 ++++++++++-------- package.nw/lib/roster/processRosterHunting.js | 12 +- package.nw/lib/roster/rosterColumns.js | 20 +- 5 files changed, 135 insertions(+), 131 deletions(-) diff --git a/package.nw/lib/adif.js b/package.nw/lib/adif.js index 69a09b9..753907a 100644 --- a/package.nw/lib/adif.js +++ b/package.nw/lib/adif.js @@ -1882,12 +1882,11 @@ function sendToLogger(ADIF) record.GRIDSQUARE = g_liveCallsigns[localHash].grid.substr(0, 4); } - if (g_appSettings.potaEnabled == 1 && localHash in g_liveCallsigns && g_liveCallsigns[localHash].pota.length > 0) + if (g_appSettings.potaEnabled == 1 && localHash in g_liveCallsigns && g_liveCallsigns[localHash].pota) { - var pota = g_liveCallsigns[localHash].pota[0]; - if (pota != "?-????") + if (g_liveCallsigns[localHash].pota != "?-????") { - record.POTA = pota; + record.POTA = g_liveCallsigns[localHash].pota; } } diff --git a/package.nw/lib/gt.js b/package.nw/lib/gt.js index 18813d0..a3381a1 100644 --- a/package.nw/lib/gt.js +++ b/package.nw/lib/gt.js @@ -1537,7 +1537,7 @@ function addDeDx( newCallsign.distance = 0; newCallsign.px = null; newCallsign.zone = null; - newCallsign.pota = []; + newCallsign.pota = null; newCallsign.cnty = finalCnty; newCallsign.cont = finalCont; if (finalDxcc > -1) @@ -6455,7 +6455,6 @@ function handleWsjtxStatus(newMessage) if (newMessage.Transmitting == 1 && newMessage.TxMessage && g_lastTxMessage != newMessage.TxMessage) { g_lastTxMessage = newMessage.TxMessage; - addLastTraffic(newMessage.TxMessage); if (newMessage.TxMessage.substr(0, 2) == "CQ" && DXcall.length > 0) { setCallAndGrid("", "", newMessage.instance, false); @@ -6904,7 +6903,7 @@ function handleWsjtxDecode(newMessage) newCallsign.qso = false; newCallsign.dxcc = callsignToDxcc(newCallsign.DEcall); newCallsign.px = null; - newCallsign.pota = []; + newCallsign.pota = null; newCallsign.zone = null; newCallsign.vucc_grids = []; newCallsign.propMode = ""; @@ -7013,38 +7012,40 @@ function handleWsjtxDecode(newMessage) if (g_appSettings.potaEnabled == 1) { + callsign.pota = null; if (callsign.DEcall in g_pota.callSpots || callsign.DEcall in g_pota.callSchedule) { - callsign.pota = []; + var now = Date.now(); if (callsign.DEcall in g_pota.callSpots) { - // copies the entire array - callsign.pota = [...g_pota.callSpots[callsign.DEcall]]; + if (g_pota.callSpots[callsign.DEcall] in g_pota.parkSpots && g_pota.parkSpots[g_pota.callSpots[callsign.DEcall]][callsign.DEcall].expire > now) + { + callsign.pota = g_pota.callSpots[callsign.DEcall]; + } } else if (callsign.DEcall in g_pota.callSchedule) { - var now = Date.now(); for (var i in g_pota.callSchedule[callsign.DEcall]) { if (now < g_pota.callSchedule[callsign.DEcall][i].end && now >= g_pota.callSchedule[callsign.DEcall][i].start) { - callsign.pota.push(g_pota.callSchedule[callsign.DEcall][i].id); + callsign.pota = g_pota.callSchedule[callsign.DEcall][i].id; break; } } } - if (callsign.pota.length > 0) + if (callsign.pota) { potaSpotFromDecode(callsign); } else if (CQ == true && msgDXcallsign == "CQ POTA") { - callsign.pota = ["?-????"]; + callsign.pota = "?-????"; } } else if (CQ == true && msgDXcallsign == "CQ POTA") { - callsign.pota = ["?-????"]; + callsign.pota = "?-????"; } } @@ -15516,11 +15517,8 @@ function mediaCheck() } } - if (typeof g_QSOhash[i].pota == "undefined" || g_QSOhash[i].pota == null) - { - g_QSOhash[i].pota = []; - } - + g_QSOhash[i].pota = null; + g_QSOcount++; if (g_QSOhash[i].confirmed) g_QSLcount++; } diff --git a/package.nw/lib/pota.js b/package.nw/lib/pota.js index 833e282..8e6825d 100644 --- a/package.nw/lib/pota.js +++ b/package.nw/lib/pota.js @@ -24,6 +24,7 @@ var g_potaSpotTemplate = { band: "", reference: "", spotTime: 0, + expire: 0, spotter: "", comments: "", source: "GT", @@ -132,10 +133,10 @@ function makeParkFeatures() { if (park in g_pota.parks) { - let parkObj = Object.assign({}, g_parkTemplate); + var parkObj = Object.assign({}, g_parkTemplate); for (const call in g_pota.parkSpots[park]) { - let report = g_pota.parkSpots[park][call]; + var report = g_pota.parkSpots[park][call]; if (parkObj.feature == null && validateMapBandAndMode(report.band, report.mode)) { parkObj.feature = iconFeature(ol.proj.fromLonLat([Number(g_pota.parks[park].longitude), Number(g_pota.parks[park].latitude)]), g_gtParkIconActive, 1); @@ -158,85 +159,106 @@ function makeParkFeatures() function potaSpotFromDecode(callObj) { - for (const i in callObj.pota) + if (myDEcall != "" && myDEcall != "NOCALL") { - let park = callObj.pota[i]; - let spotObj = null; + var park = callObj.pota; - if (!(callObj.DEcall in g_pota.callSpots)) + if (callObj.DEcall in g_pota.callSpots && park in g_pota.parkSpots) { - // new call and park - g_pota.callSpots[callObj.DEcall] = [park]; - } - else if (!g_pota.callSpots[callObj.DEcall].includes(park)) - { - // new park - g_pota.callSpots[callObj.DEcall].push(park); - } + // update spot + var newObj = spotFromCallObj(callObj, park, g_pota.parkSpots[park][callObj.DEcall].count); + g_pota.parkSpots[park][callObj.DEcall] = fillObjectFromTemplate(g_pota.parkSpots[park][callObj.DEcall], newObj); - if (!(park in g_pota.parkSpots)) - { - g_pota.parkSpots[park] = {}; - g_pota.parkSpots[park][callObj.DEcall] = spotFromCallObj(callObj, park, 0, 0); + // may or may not be on screen, so try + if (g_appSettings.potaMapEnabled) + { + addParkSpotFeature(park, g_pota.parkSpots[park][callObj.DEcall]); + } + + var hash = park + callObj.DEcall; + if (!(hash in g_pota.rbnReportTimes) || Date.now() > g_pota.rbnReportTimes[hash]) + { + g_pota.rbnReportTimes[hash] = Date.now() + g_pota.rbnFrequency; + reportPotaRBN(g_pota.parkSpots[park][callObj.DEcall]); + } } - else if (!(callObj.DEcall in g_pota.parkSpots[park])) + else if (callObj.DEcall in g_pota.callSchedule) { - g_pota.parkSpots[park][callObj.DEcall] = spotFromCallObj(callObj, park, 0, 0); + // Looks like it's scheduled, so it's new + g_pota.callSpots[callObj.DEcall] = park; + + if (!(park in g_pota.parkSpots)) + { + g_pota.parkSpots[park] = {}; + } + + var newObj = spotFromCallObj(callObj, park, 0); + newObj.expire = newObj.spotTime + 300000; + g_pota.parkSpots[park][callObj.DEcall] = newObj; + + if (g_appSettings.potaMapEnabled) + { + addParkSpotFeature(park, g_pota.parkSpots[park][callObj.DEcall]); + } + + var hash = park + callObj.DEcall; + if (!(hash in g_pota.rbnReportTimes) || Date.now() > g_pota.rbnReportTimes[hash]) + { + g_pota.rbnReportTimes[hash] = Date.now() + g_pota.rbnFrequency; + reportPotaRBN(g_pota.parkSpots[park][callObj.DEcall]); + } } else { - // update spot - g_pota.parkSpots[park][callObj.DEcall] = spotFromCallObj(callObj, park, g_pota.parkSpots[park][callObj.DEcall].count); - } - - // may or may not be on screen, so try - if (g_appSettings.potaMapEnabled) - { - addParkSpotFeature(park, g_pota.parkSpots[park][callObj.DEcall]); - } - - let hash = park + callObj.DEcall; - if (!(hash in g_pota.rbnReportTimes) || Date.now() > g_pota.rbnReportTimes[hash]) - { - g_pota.rbnReportTimes[hash] = Date.now() + g_pota.rbnFrequency; - reportPotaRBN(g_pota.parkSpots[park][callObj.DEcall]); + console.log("No spot data found"); + if (!(callObj.DEcall in g_pota.callSpots)) + { + console.log("No call spot: " + callObj.DEcall); + } + if (!(park in g_pota.parkSpots)) + { + console.log("No park spot: " + park); + } } } } function reportPotaRBN(callSpot) { - let report = { - activator: callSpot.activator, - spotter: myDEcall + "-#", - frequency: String(parseInt(callSpot.frequency * 1000)), - reference: callSpot.reference, - mode: callSpot.mode, - source: "RBN", - comments: callSpot.comments, - activatorGrid: callSpot.activatorGrid, - spotterGrid: callSpot.spotterGrid - } - - if (Number(report.frequency) > 0) + if (Date.now() < callSpot.expire) { - getPostJSONBuffer( - "https://api.pota.app/spot", - rbnReportResult, - null, - "https", - 443, - report, - 10000, - null, - null - ); + var report = { + activator: callSpot.activator, + spotter: myDEcall + "-#", + frequency: String(parseInt(callSpot.frequency * 1000)), + reference: callSpot.reference, + mode: callSpot.mode, + source: "RBN", + comments: callSpot.comments, + activatorGrid: callSpot.activatorGrid, + spotterGrid: callSpot.spotterGrid + } + + if (Number(report.frequency) > 0) + { + getPostJSONBuffer( + "https://api.pota.app/spot", + rbnReportResult, + null, + "https", + 443, + report, + 10000, + null, + null + ); + } } } function reportPotaQSO(record) { - let report = { + var report = { activator: record.CALL, spotter: record.STATION_CALLSIGN, frequency: record.FREQ, @@ -282,7 +304,7 @@ function rbnReportResult(buffer, flag, cookies) function spotFromCallObj(callObj, park, inCount, rbnTime) { - let callSpot = { + var callSpot = { activator: callObj.DEcall, activatorGrid: callObj.grid, spotter: myDEcall + "-#", @@ -301,7 +323,7 @@ function spotFromCallObj(callObj, park, inCount, rbnTime) function addParkSpotFeature(park, report) { - let parkObj = Object.assign({}, g_parkTemplate); + var parkObj = Object.assign({}, g_parkTemplate); if (park in g_pota.mapParks) { parkObj = g_pota.mapParks[park]; @@ -326,11 +348,11 @@ function processPotaParks(buffer) { try { - let data = JSON.parse(buffer); - let newParks = data.parks; + var data = JSON.parse(buffer); + var newParks = data.parks; for (const park in newParks) { - let locations = newParks[park].locationDesc.split(","); + var locations = newParks[park].locationDesc.split(","); for (const i in locations) { if (locations[i] in data.locations) @@ -381,7 +403,7 @@ function getPotaParks() // This is a shallow copy, don't use with objects that contain other objects or arrays function fillObjectFromTemplate(template, input) { - let object = {}; + var object = {}; for (const key in template) { if (key in input) @@ -399,7 +421,7 @@ function fillObjectFromTemplate(template, input) function uniqueArrayFromArray(input) { - let unique = []; + var unique = []; input.forEach((c) => { if (!unique.includes(c)) @@ -416,37 +438,36 @@ function processPotaSpots(buffer) { try { - let spots = JSON.parse(buffer); + var spots = JSON.parse(buffer); g_pota.callSpots = {}; g_pota.parkSpots = {}; for (const spot in spots) { if (spots[spot].reference in g_pota.parks) { - let newSpot = fillObjectFromTemplate(g_potaSpotTemplate, spots[spot]); + var newSpot = fillObjectFromTemplate(g_potaSpotTemplate, spots[spot]); newSpot.spotTime = Date.parse(newSpot.spotTime + "Z"); newSpot.frequency = parseInt(newSpot.frequency) / 1000; + newSpot.expire = newSpot.spotTime + (Number(newSpot.expire) * 1000); newSpot.band = newSpot.frequency.formatBand(); if (newSpot.spotter == newSpot.activator && newSpot.comments.match(/qrt/gi)) { // don't add the spot, they have self-QRT'ed } + else if (Date.now() > newSpot.expire) + { + // Spot is expired! + } else { - (g_pota.callSpots[newSpot.activator] = g_pota.callSpots[newSpot.activator] || []).push(newSpot.reference); + g_pota.callSpots[newSpot.activator] = newSpot.reference; if (!(newSpot.reference in g_pota.parkSpots)) { g_pota.parkSpots[newSpot.reference] = {}; } - if (newSpot.activator in g_pota.parkSpots[newSpot.reference]) - { - g_pota.parkSpots[newSpot.reference][newSpot.activator] = fillObjectFromTemplate(g_pota.parkSpots[newSpot.reference][newSpot.activator], newSpot); - } - else - { - g_pota.parkSpots[newSpot.reference][newSpot.activator] = newSpot; - } + + g_pota.parkSpots[newSpot.reference][newSpot.activator] = newSpot; } } else @@ -454,12 +475,6 @@ function processPotaSpots(buffer) console.log("PotaSpots: unknown park id: " + spots[spot].reference); } } - - // Sanity dedupe checks - for (const spot in g_pota.callSpots) - { - g_pota.callSpots[spot] = uniqueArrayFromArray(g_pota.callSpots[spot]); - } redrawParks(); } @@ -498,12 +513,12 @@ function processPotaSchedule(buffer) { try { - let schedules = JSON.parse(buffer); + var schedules = JSON.parse(buffer); g_pota.callSchedule = {}; g_pota.parkSchedule = {}; for (const i in schedules) { - let newObj = {}; + var newObj = {}; newObj.id = schedules[i].reference; newObj.start = Date.parse(schedules[i].startDate + "T" + schedules[i].startTime + "Z"); newObj.end = Date.parse(schedules[i].endDate + "T" + schedules[i].endTime + "Z"); @@ -608,10 +623,10 @@ function mouseParkMove() function createParkTipTable(toolElement) { - let worker = ""; + var worker = ""; - let key = toolElement.key; - let now = Date.now(); + var key = toolElement.key; + var now = Date.now(); worker += "
" + key + @@ -645,8 +660,8 @@ function createParkTipTable(toolElement) buffer += "ActivatorStartEndFrequenciesComment"; for (const i in g_pota.parkSchedule[key]) { - let start = g_pota.parkSchedule[key][i].start; - let end = g_pota.parkSchedule[key][i].end; + var start = g_pota.parkSchedule[key][i].start; + var end = g_pota.parkSchedule[key][i].end; if (now < end) { buffer += ""; diff --git a/package.nw/lib/roster/processRosterHunting.js b/package.nw/lib/roster/processRosterHunting.js index 28c50bb..87f83f1 100644 --- a/package.nw/lib/roster/processRosterHunting.js +++ b/package.nw/lib/roster/processRosterHunting.js @@ -518,17 +518,15 @@ function processRosterHunting(callRoster, rosterSettings, awardTracker) } // Hunting for POTAs - if (potaEnabled && huntPOTA.checked == true && callObj.pota.length > 0) + if (potaEnabled && huntPOTA.checked == true && callObj.pota) { - let huntTotal = callObj.pota.length; + let huntTotal = 1; let workedFound = 0; - for (const index in callObj.pota) - { - let hash = g_dayAsString + callsign + callObj.pota[index] + (rosterSettings.layeredMode ? layeredHashSuffix : workHashSuffix); + let hash = g_dayAsString + callsign + callObj.pota + (rosterSettings.layeredMode ? layeredHashSuffix : workHashSuffix); - if (rosterSettings.workedIndex && hash in rosterSettings.workedIndex.pota) workedFound++; - } + if (rosterSettings.workedIndex && hash in rosterSettings.workedIndex.pota) workedFound++; + if (workedFound != huntTotal) { shouldAlert = true; diff --git a/package.nw/lib/roster/rosterColumns.js b/package.nw/lib/roster/rosterColumns.js index 535854c..d3638d5 100644 --- a/package.nw/lib/roster/rosterColumns.js +++ b/package.nw/lib/roster/rosterColumns.js @@ -400,14 +400,9 @@ const ROSTER_COLUMNS = { function potaColumnRef(callObj) { - if (callObj.pota.length > 0) + if (callObj.pota) { - let value = callObj.pota[0]; - if (callObj.pota.length > 1) - { - value += " +" + String(callObj.pota.length - 1); - } - return value; + return callObj.pota; } else { @@ -417,14 +412,13 @@ function potaColumnRef(callObj) function potaColumnHover(callObj) { - let value = "" - for (let i in callObj.pota) + let value = ""; + + if (callObj.pota in window.opener.g_pota.parks) { - if (callObj.pota[i] in window.opener.g_pota.parks) - { - value += callObj.pota[i] + " - " + window.opener.g_pota.parks[callObj.pota[i]].name + "\n"; - } + value += callObj.pota + " - " + window.opener.g_pota.parks[callObj.pota].name + "\n"; } + return value; } From 1942cd1906b2d284207ca7f95f0403c6c44b828c Mon Sep 17 00:00:00 2001 From: Tag Date: Tue, 29 Nov 2022 12:47:52 -0800 Subject: [PATCH 10/18] removed extraneous console log --- package.nw/lib/pota.js | 1 - 1 file changed, 1 deletion(-) diff --git a/package.nw/lib/pota.js b/package.nw/lib/pota.js index 8e6825d..d828c14 100644 --- a/package.nw/lib/pota.js +++ b/package.nw/lib/pota.js @@ -210,7 +210,6 @@ function potaSpotFromDecode(callObj) } else { - console.log("No spot data found"); if (!(callObj.DEcall in g_pota.callSpots)) { console.log("No call spot: " + callObj.DEcall); From 8a6d7ce505a5810df9151b08d00b4364517b0bb6 Mon Sep 17 00:00:00 2001 From: Tag Date: Tue, 29 Nov 2022 12:51:58 -0800 Subject: [PATCH 11/18] Clear Messages on CQ in developer mode only for now --- package.nw/lib/gt.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.nw/lib/gt.js b/package.nw/lib/gt.js index a3381a1..d8a1f29 100644 --- a/package.nw/lib/gt.js +++ b/package.nw/lib/gt.js @@ -6452,10 +6452,10 @@ function handleWsjtxStatus(newMessage) dxCallBoxDiv.className = "DXCallBoxConfirmed"; } - if (newMessage.Transmitting == 1 && newMessage.TxMessage && g_lastTxMessage != newMessage.TxMessage) + if (g_developerMode && newMessage.Transmitting == 1 && newMessage.TxMessage && g_lastTxMessage != newMessage.TxMessage) { g_lastTxMessage = newMessage.TxMessage; - if (newMessage.TxMessage.substr(0, 2) == "CQ" && DXcall.length > 0) + if (newMessage.TxMessage.substring(0, 2) == "CQ" && DXcall.length > 0) { setCallAndGrid("", "", newMessage.instance, false); DXcall = ""; From d92ea914c416a3b60269d2245c7c7c0704e353bf Mon Sep 17 00:00:00 2001 From: Tag Date: Tue, 29 Nov 2022 13:42:37 -0800 Subject: [PATCH 12/18] Clear on CQ features and version update --- debian/changelog | 8 ++++++++ gridtracker.spec | 6 ++++++ package.nw/GridTracker.html | 13 ++++++++----- package.nw/gt_update.odt | Bin 87680 -> 78700 bytes package.nw/gt_update.pdf | Bin 84499 -> 66530 bytes package.nw/lib/adif.js | 3 +-- package.nw/lib/defaults.js | 1 + package.nw/lib/gt.js | 14 +++++++++++--- package.nw/lib/pota.js | 4 ++-- package.nw/package.json | 2 +- 10 files changed, 38 insertions(+), 13 deletions(-) diff --git a/debian/changelog b/debian/changelog index 8074aa0..03d1ba2 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,11 @@ +gridtracker (1.22.1129) unstable; urgency=low + - Fixed CPU usage issue with messaging + - Fixed Logging -> Local File(s) not showing files selected + - Honor POTA spot expiration + - New option 'Clear DX Call, DX Grid, Tx1-Tx5 when calling CQ in WSJT-X' + -- Settings -> Lookups -> Feature Control -> Clear on CQ +-- Tag Loomis Tue, 29 Nov 2022 00:00:00 -0000 + gridtracker (1.22.1123) unstable; urgency=low - LoTW QSL downloading issue fixed - CQ Only in Call Roster fixed diff --git a/gridtracker.spec b/gridtracker.spec index 2585caf..3568468 100644 --- a/gridtracker.spec +++ b/gridtracker.spec @@ -40,6 +40,12 @@ DESTDIR=${RPM_BUILD_ROOT} make clean %license %{_docdir}/%{name}/ %changelog +* Tue Nov 29 2022 Tag Loomis - 1.22.1129-1 + - Fixed CPU usage issue with messaging + - Fixed Logging -> Local File(s) not showing files selected + - Honor POTA spot expiration + - New option 'Clear DX Call, DX Grid, Tx1-Tx5 when calling CQ in WSJT-X' + -- Settings -> Lookups -> Feature Control -> Clear on CQ * Wed Nov 23 2022 Tag Loomis - 1.22.1123-1 - LoTW QSL downloading issue fixed - CQ Only in Call Roster fixed diff --git a/package.nw/GridTracker.html b/package.nw/GridTracker.html index b58d783..136b3c2 100644 --- a/package.nw/GridTracker.html +++ b/package.nw/GridTracker.html @@ -1379,7 +1379,12 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - + + + Clear on CQ + + + @@ -2111,12 +2116,10 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
Add - File
+
Add File
-
No file(s) - selected
+
diff --git a/package.nw/gt_update.odt b/package.nw/gt_update.odt index b52ee25ab4f0d19bd6f0ad5a4fc840464c6c3dfe..d3498a522bdf3af8f9951c63ec39e050f66d537d 100644 GIT binary patch delta 26413 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 delta 35511 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у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 Iqa;iIKZ*jB^#A|> diff --git a/package.nw/lib/adif.js b/package.nw/lib/adif.js index 753907a..56f32c0 100644 --- a/package.nw/lib/adif.js +++ b/package.nw/lib/adif.js @@ -1381,8 +1381,7 @@ function setAdifStartup(checkbox) worker += ""; for (var i in g_startupLogs) { - worker += - "
" + g_startupLogs[i].name + diff --git a/package.nw/lib/defaults.js b/package.nw/lib/defaults.js index 3a82363..cccdab3 100644 --- a/package.nw/lib/defaults.js +++ b/package.nw/lib/defaults.js @@ -36,6 +36,7 @@ var def_appSettings = { rosterAlwaysOnTop: false, centerGridsquare: "", chatUUID: "", + clearOnCQ: false, crScript: 0, distanceUnit: "MI", earthImgSrc: 0, diff --git a/package.nw/lib/gt.js b/package.nw/lib/gt.js index d8a1f29..ef04ae1 100644 --- a/package.nw/lib/gt.js +++ b/package.nw/lib/gt.js @@ -6311,7 +6311,7 @@ function activeRig(instance) var g_lastTransmitCallsign = {}; var g_lastStatusCallsign = {}; -var g_lastTxMessage = ""; +var g_lastTxMessage = null; function handleWsjtxStatus(newMessage) { @@ -6452,7 +6452,7 @@ function handleWsjtxStatus(newMessage) dxCallBoxDiv.className = "DXCallBoxConfirmed"; } - if (g_developerMode && newMessage.Transmitting == 1 && newMessage.TxMessage && g_lastTxMessage != newMessage.TxMessage) + if (g_appSettings.clearOnCQ && newMessage.Transmitting == 1 && newMessage.TxMessage && g_lastTxMessage != newMessage.TxMessage) { g_lastTxMessage = newMessage.TxMessage; if (newMessage.TxMessage.substring(0, 2) == "CQ" && DXcall.length > 0) @@ -6602,7 +6602,7 @@ function handleWsjtxStatus(newMessage) if (newMessage.Transmitting == 0) { // Not Transmitting - g_lastTxMessage = ""; + g_lastTxMessage = null; g_layerSources.transmit.clear(); g_transmitFlightPath = null; } @@ -12918,6 +12918,12 @@ function setPins() } } +function changeClearOnCQ() +{ + g_appSettings.clearOnCQ = clearOnCQ.checked; + saveAppSettings(); +} + function loadViewSettings() { gtBandFilter.value = g_appSettings.gtBandFilter; @@ -12980,6 +12986,8 @@ function loadViewSettings() lookupMerge.checked = g_appSettings.lookupMerge; lookupMissingGrid.checked = g_appSettings.lookupMissingGrid; + clearOnCQ.checked = g_appSettings.clearOnCQ; + if (g_appSettings.lookupMerge == true) { lookupMissingGridDiv.style.display = "inline-block"; diff --git a/package.nw/lib/pota.js b/package.nw/lib/pota.js index d828c14..48789c5 100644 --- a/package.nw/lib/pota.js +++ b/package.nw/lib/pota.js @@ -236,7 +236,7 @@ function reportPotaRBN(callSpot) comments: callSpot.comments, activatorGrid: callSpot.activatorGrid, spotterGrid: callSpot.spotterGrid - } + }; if (Number(report.frequency) > 0) { @@ -267,7 +267,7 @@ function reportPotaQSO(record) comments: record.COMMENT ? record.COMMENT : "", activatorGrid: record.GRIDSQUARE ? record.GRIDSQUARE : "", spotterGrid: record.MY_GRIDSQUARE ? record.MY_GRIDSQUARE : "" - } + }; if ("SUBMODE" in record) { diff --git a/package.nw/package.json b/package.nw/package.json index db1f0d6..33c3d27 100644 --- a/package.nw/package.json +++ b/package.nw/package.json @@ -1,7 +1,7 @@ { "name": "GridTracker", "product_string_do_not_use": "gridtracker", - "version": "1.22.1123", + "version": "1.22.1129", "betaVersion": "", "description": "GridTracker, an amateur radio companion", "author": "GridTracker.org", From 6f336256504f2678168dcb587989663be837d494 Mon Sep 17 00:00:00 2001 From: Tag Date: Wed, 30 Nov 2022 17:36:14 -0800 Subject: [PATCH 13/18] More chat code --- package.nw/gt_chat.html | 76 ++++++++++++++++++++++++----------------- package.nw/lib/gt.js | 14 ++++++-- package.nw/lib/gtws.js | 7 ++-- 3 files changed, 57 insertions(+), 40 deletions(-) diff --git a/package.nw/gt_chat.html b/package.nw/gt_chat.html index c2ef12a..7ac2f63 100644 --- a/package.nw/gt_chat.html +++ b/package.nw/gt_chat.html @@ -267,7 +267,6 @@ function updateCallsign(id) { - var count = parseInt(userCount.innerHTML); if (id in window.opener.g_gtFlagPins) { var obj = window.opener.g_gtFlagPins[id]; @@ -288,10 +287,7 @@ if (obj.canmsg == false) show = false; - if (makeCallsignRow(obj, show) && show) - { - count++; - } + makeCallsignRow(obj, show); if (obj.cid == g_currentId && messageInput.disabled == true && obj.live == true) { @@ -312,19 +308,44 @@ var obj = document.getElementById(id); if (obj) { - if (obj.style.display == "") - { - count--; - } allCallDiv.removeChild(obj); } } + updateCount(); + } + + function updateCount() + { + var count = 0; + if(allCallDiv.childElementCount > 0) + { + for (var x = allCallDiv.childNodes.length-1; x > -1; x--) + { + if (allCallDiv.childNodes[x].style.display != "none") + { + count++; + } + } + } userCount.innerHTML = count; } - function showAllCallsigns() + function removeAllChildNodes(parent) { - var count = 0; + while (parent.firstChild) + { + parent.removeChild(parent.firstChild); + } + } + + function showAllCallsigns(justSearching = false) + { + allCallDiv.style.display = "none"; + if (justSearching == false) + { + removeAllChildNodes(allCallDiv); + } + for (const x in window.opener.g_gtFlagPins) { var obj = window.opener.g_gtFlagPins[x]; @@ -345,11 +366,6 @@ if (obj.canmsg == false) show = false; - if (show) - { - count++; - } - makeCallsignRow(obj, show); if (obj.cid == g_currentId && messageInput.disabled == true && obj.live == true) @@ -362,19 +378,8 @@ } } - if(allCallDiv.childElementCount > 0) - { - for (var x = allCallDiv.childNodes.length-1; x > -1; x--) - { - if (!(allCallDiv.childNodes[x].id in window.opener.g_gtFlagPins)) - { - allCallDiv.removeChild(allCallDiv.childNodes[x]); - } - } - } - updateBar(g_currentId); - userCount.innerHTML = count; + updateCount(); if (g_viewBand) { @@ -394,6 +399,13 @@ viewMode.innerHTML = "All"; } + allCallDiv.style.display = ""; + + messagesRedraw(); + } + + function messagesRedraw() + { showAllMessages(); Resize(); } @@ -443,8 +455,7 @@ g_currentId = ""; openId(what); } - showAllMessages(); - Resize(); + messagesRedraw(); } function updateEverything() @@ -548,7 +559,8 @@ if (id in window.opener.g_gtUnread) { delete window.opener.g_gtUnread[id]; - showAllCallsigns(); + updateCallsign(id); + showAllMessages(); } } messageTextDiv.innerHTML = worker; @@ -613,7 +625,7 @@ } else { clearSearch.style.display = "none"; } - showAllCallsigns(); + showAllCallsigns(true); } function doLookup(what) diff --git a/package.nw/lib/gt.js b/package.nw/lib/gt.js index ef04ae1..9acbacc 100644 --- a/package.nw/lib/gt.js +++ b/package.nw/lib/gt.js @@ -10638,22 +10638,30 @@ function setGtShareButtons() g_layerVectors.gtflags.setVisible(false); clearGtFlags(); // Clear list - g_gtFlagPins = {}; + g_gtFlagPins = Object() + g_gtMessages = Object(); + g_gtUnread = Object(); + g_gtIdToCid = Object(); + g_gtCallsigns = Object(); + g_gtSentAwayToCid = Object(); + if (g_chatWindowHandle != null) { try { g_chatWindowHandle.hide(); + g_chatWindowHandle.window.allCallDiv.innerHTML = ""; + g_chatWindowHandle.window.updateCount(); } catch (e) { console.error(e); } } + goProcessRoster(); } - gtShareFlagImg.src = - g_gtShareFlagImageArray[g_appSettings.gtShareEnable == false ? 0 : 1]; + gtShareFlagImg.src = g_gtShareFlagImageArray[g_appSettings.gtShareEnable == false ? 0 : 1]; } function setMulticastIp() diff --git a/package.nw/lib/gtws.js b/package.nw/lib/gtws.js index 3cc9dfa..8438ff3 100644 --- a/package.nw/lib/gtws.js +++ b/package.nw/lib/gtws.js @@ -54,7 +54,7 @@ var g_gtLiveStatusUpdate = false; var myChatId = 0; var myRoom = 0; -var g_gtChatlistChangeCount = 0; + var g_gtCurrentMessageCount = 0; function gtConnectChat() @@ -352,7 +352,6 @@ function gtChatUpdateCall(jsmesg) g_layerSources.gtflags.addFeature(g_gtFlagPins[cid].pin); } } - g_gtChatlistChangeCount++; g_gtCallsigns[g_gtFlagPins[cid].call] = cid; updateChatWindow(cid); } @@ -476,7 +475,6 @@ function gtChatNewList(jsmesg) } } } - g_gtChatlistChangeCount++; updateChatWindow(); } @@ -608,7 +606,6 @@ function gtChatStateMachine() { g_getEngineWasRunning = false; closeGtSocket(); - g_gtChatlistChangeCount = 0; g_lastGtStatus = ""; } } @@ -730,9 +727,9 @@ function newChatMessage(id, jsmesg) try { hasFocus = g_chatWindowHandle.window.newChatMessage(id, jsmesg); + g_chatWindowHandle.window.messagesRedraw(); } catch (e) {} - updateChatWindow(); } return hasFocus; } From a1a91feb748c2c3f65a7455846ca354255fbad20 Mon Sep 17 00:00:00 2001 From: Tag Date: Wed, 30 Nov 2022 17:54:55 -0800 Subject: [PATCH 14/18] name change --- package.nw/gt_chat.html | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/package.nw/gt_chat.html b/package.nw/gt_chat.html index 7ac2f63..bacef91 100644 --- a/package.nw/gt_chat.html +++ b/package.nw/gt_chat.html @@ -154,10 +154,10 @@ } else { - var obj = document.getElementById(from.currentTarget.id); - if (obj) + var node = document.getElementById(from.currentTarget.id); + if (node) { - allCallDiv.removeChild(obj); + allCallDiv.removeChild(node); } } } @@ -172,10 +172,10 @@ } else { - var obj = document.getElementById(from.currentTarget.id); - if (obj) + var node = document.getElementById(from.currentTarget.id); + if (node) { - allCallDiv.removeChild(obj); + allCallDiv.removeChild(node); } } } @@ -189,10 +189,10 @@ } else { - var obj = document.getElementById(cid); - if (obj) + var node = document.getElementById(cid); + if (node) { - allCallDiv.removeChild(obj); + allCallDiv.removeChild(node); } } } @@ -305,10 +305,10 @@ } else { - var obj = document.getElementById(id); - if (obj) + var node = document.getElementById(id); + if (node) { - allCallDiv.removeChild(obj); + allCallDiv.removeChild(node); } } updateCount(); From 7936c4679e1741bba2bd9ddd7a4adb5cf4b77102 Mon Sep 17 00:00:00 2001 From: Tag Date: Wed, 30 Nov 2022 19:40:21 -0800 Subject: [PATCH 15/18] Clear everything on a list result --- package.nw/lib/gtws.js | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/package.nw/lib/gtws.js b/package.nw/lib/gtws.js index 8438ff3..87a3e9d 100644 --- a/package.nw/lib/gtws.js +++ b/package.nw/lib/gtws.js @@ -300,8 +300,8 @@ function gtChatRemoveCall(jsmesg) updateChatWindow(cid); } } - delete g_gtIdToCid[id]; } + delete g_gtIdToCid[id]; } function gtChatUpdateCall(jsmesg) @@ -425,14 +425,13 @@ function gtChatNewList(jsmesg) { clearGtFlags(); - for (var cid in g_gtFlagPins) - { - g_gtFlagPins[cid].live = false; - if (!(cid in g_gtMessages)) - { - delete g_gtFlagPins[cid]; - } - } + // starting clean if we're getting a new chat list + g_gtFlagPins = Object() + g_gtMessages = Object(); + g_gtUnread = Object(); + g_gtIdToCid = Object(); + g_gtCallsigns = Object(); + g_gtSentAwayToCid = Object(); for (var key in jsmesg.data.calls) { From c113e37e477abdd58429db0d3250f6b14ab26c1d Mon Sep 17 00:00:00 2001 From: Tag Date: Thu, 1 Dec 2022 15:49:05 -0800 Subject: [PATCH 16/18] No longer depend on a idToCid lookup --- package.nw/lib/gtws.js | 60 ++++++++++++++++++++++++------------------ 1 file changed, 34 insertions(+), 26 deletions(-) diff --git a/package.nw/lib/gtws.js b/package.nw/lib/gtws.js index 87a3e9d..ca86885 100644 --- a/package.nw/lib/gtws.js +++ b/package.nw/lib/gtws.js @@ -38,7 +38,6 @@ var g_gtChatSocket = null; var g_gtFlagPins = Object(); var g_gtMessages = Object(); var g_gtUnread = Object(); -var g_gtIdToCid = Object(); var g_gtCallsigns = Object(); var g_gtSentAwayToCid = Object(); @@ -273,35 +272,47 @@ function gtChatSendSpots(spotsObject, detailsObject) function gtChatRemoveCall(jsmesg) { var id = jsmesg.id; - if (id in g_gtIdToCid) + var cid = jsmesg.cid; + + if (cid in g_gtFlagPins) { - var cid = g_gtIdToCid[id]; - if (cid in g_gtFlagPins) + if (id in g_gtFlagPins[cid].ids) { delete g_gtFlagPins[cid].ids[id]; - if (Object.keys(g_gtFlagPins[cid].ids).length == 0) - { - if (g_gtFlagPins[cid].pin != null) - { - // remove pin from map here - if (g_layerSources.gtflags.hasFeature(g_gtFlagPins[cid].pin)) - { g_layerSources.gtflags.removeFeature(g_gtFlagPins[cid].pin); } - delete g_gtFlagPins[cid].pin; - g_gtFlagPins[cid].pin = null; - } - g_gtFlagPins[cid].live = false; - notifyNoChat(cid); - if (!(cid in g_gtMessages)) - { - delete g_gtCallsigns[g_gtFlagPins[cid].call]; - delete g_gtFlagPins[cid]; - } + } + else + { + console.log("drop: No such id in gtCall:"); + console.log(jsmesg); + console.log(g_gtFlagPins[cid].ids); + } - updateChatWindow(cid); + if (Object.keys(g_gtFlagPins[cid].ids).length == 0) + { + if (g_gtFlagPins[cid].pin != null) + { + // remove pin from map here + if (g_layerSources.gtflags.hasFeature(g_gtFlagPins[cid].pin)) + { g_layerSources.gtflags.removeFeature(g_gtFlagPins[cid].pin); } + delete g_gtFlagPins[cid].pin; + g_gtFlagPins[cid].pin = null; } + g_gtFlagPins[cid].live = false; + notifyNoChat(cid); + if (!(cid in g_gtMessages)) + { + delete g_gtCallsigns[g_gtFlagPins[cid].call]; + delete g_gtFlagPins[cid]; + } + + updateChatWindow(cid); } } - delete g_gtIdToCid[id]; + else + { + console.log("drop: No such cid in gtCall"); + console.log(jsmesg); + } } function gtChatUpdateCall(jsmesg) @@ -329,7 +340,6 @@ function gtChatUpdateCall(jsmesg) g_gtFlagPins[cid].ids = Object(); g_gtFlagPins[cid].ids[id] = true; } - g_gtIdToCid[jsmesg.id] = jsmesg.cid; g_gtFlagPins[cid].cid = jsmesg.cid; g_gtFlagPins[cid].call = jsmesg.call; @@ -429,7 +439,6 @@ function gtChatNewList(jsmesg) g_gtFlagPins = Object() g_gtMessages = Object(); g_gtUnread = Object(); - g_gtIdToCid = Object(); g_gtCallsigns = Object(); g_gtSentAwayToCid = Object(); @@ -451,7 +460,6 @@ function gtChatNewList(jsmesg) g_gtFlagPins[cid].pin = null; } - g_gtIdToCid[id] = cid; g_gtFlagPins[cid].call = jsmesg.data.calls[key]; g_gtFlagPins[cid].fCall = g_gtFlagPins[cid].call.formatCallsign(); g_gtFlagPins[cid].grid = jsmesg.data.grid[key]; From 6a7046af500e8bd946480978905ddf753f67bcdf Mon Sep 17 00:00:00 2001 From: Tag Date: Sat, 3 Dec 2022 17:07:35 -0800 Subject: [PATCH 17/18] Fixed issue with multiple same callsigns --- package.nw/gt_roster.html | 1 + package.nw/lib/gt.js | 11 +++--- package.nw/lib/gtws.js | 38 ++++++++++++++----- package.nw/lib/roster/processRosterHunting.js | 22 ++++++----- 4 files changed, 48 insertions(+), 24 deletions(-) diff --git a/package.nw/gt_roster.html b/package.nw/gt_roster.html index 123f9c9..d309a94 100644 --- a/package.nw/gt_roster.html +++ b/package.nw/gt_roster.html @@ -1,3 +1,4 @@ +