+
+
diff --git a/package.nw/gt_bandactivity.html b/package.nw/gt_bandactivity.html
index a2524bb..6e63626 100644
--- a/package.nw/gt_bandactivity.html
+++ b/package.nw/gt_bandactivity.html
@@ -40,6 +40,7 @@
...no data yet...
diff --git a/package.nw/i18n/cn-t.json b/package.nw/i18n/cn-t.json
index e476fef..d1619a3 100644
--- a/package.nw/i18n/cn-t.json
+++ b/package.nw/i18n/cn-t.json
@@ -426,6 +426,10 @@
"settings.OAMS.message.enable.hover": "啟用消息傳遞",
"settings.OAMS.spotting.enable.label": "啟用定位",
"settings.OAMS.spotting.enable.hover": "通過OAMS網絡發送和接收現場報告",
+ "settings.OAMS.BandActivity.enable.label": "Band Activity",
+ "settings.OAMS.BandActivity.enable.hover": "Receive Band Activity Reports through the OAMS network",
+ "settings.OAMS.BandActivity.neighbor.enable.label": "Neighboring Grids",
+ "settings.OAMS.BandActivity.neighbor.enable.hover": "Include your 8 neighboring grids in report",
"settings.OAMS.message.newAlert.label": "新消息警報",
"settings.OAMS.message.newAlert.hover": "收到新消息時發出警報。",
"settings.OAMS.message.newAlert.none": "None",
diff --git a/package.nw/i18n/cn.json b/package.nw/i18n/cn.json
index 9e638d4..480edfb 100644
--- a/package.nw/i18n/cn.json
+++ b/package.nw/i18n/cn.json
@@ -425,6 +425,10 @@
"settings.OAMS.message.enable.hover": "启用消息传递",
"settings.OAMS.spotting.enable.label": "启用定位",
"settings.OAMS.spotting.enable.hover": "通过OAMS网络发送和接收现场报告",
+ "settings.OAMS.BandActivity.enable.label": "Band Activity",
+ "settings.OAMS.BandActivity.enable.hover": "Receive Band Activity Reports through the OAMS network",
+ "settings.OAMS.BandActivity.neighbor.enable.label": "Neighboring Grids",
+ "settings.OAMS.BandActivity.neighbor.enable.hover": "Include your 8 neighboring grids in report",
"settings.OAMS.message.newAlert.label": "新消息警报",
"settings.OAMS.message.newAlert.hover": "收到新消息时发出警报。",
"settings.OAMS.message.newAlert.none": "None",
diff --git a/package.nw/i18n/en.json b/package.nw/i18n/en.json
index d573ab7..dbf4f8c 100644
--- a/package.nw/i18n/en.json
+++ b/package.nw/i18n/en.json
@@ -43,7 +43,7 @@
"info.DXDistance.hover": "Distance",
"info.DXAzimuth.hover": "Heading",
"operatingMode.hover": "Click to ignore incoming messages",
- "bandActivity.hover": "PSK-Reporter band Activity",
+ "bandActivity.hover": "Band Activity",
"quickStats.hover": "Quick Stats",
"quickStats.CallRX.hover": "Callsigns Heard",
"quickStats.CallRX.label": "Rx Calls",
@@ -420,10 +420,14 @@
"settings.alerts.CustomAlerts.new.repeat.once": "Only Once",
"settings.alerts.CustomAlerts.new.repeat.never": "Never Repeat",
"settings.alerts.CustomAlerts.new.addButton": "ADD",
- "settings.OAMS.message.enable.label": "Messaging Enable",
- "settings.OAMS.message.enable.hover": "Messaging Enable",
- "settings.OAMS.spotting.enable.label": "Spotting Enable",
+ "settings.OAMS.message.enable.label": "Messaging",
+ "settings.OAMS.message.enable.hover": "Messaging",
+ "settings.OAMS.spotting.enable.label": "Spotting",
"settings.OAMS.spotting.enable.hover": "Send and Receivev Spot Reports through the OAMS network",
+ "settings.OAMS.BandActivity.enable.label": "Band Activity",
+ "settings.OAMS.BandActivity.enable.hover": "Receive Band Activity Reports through the OAMS network",
+ "settings.OAMS.BandActivity.neighbor.enable.label": "Neighboring Grids",
+ "settings.OAMS.BandActivity.neighbor.enable.hover": "Include your 8 neighboring grids in report",
"settings.OAMS.message.newAlert.label": "New Message Alert",
"settings.OAMS.message.newAlert.hover": "Alert when new messages received.",
"settings.OAMS.message.newAlert.none": "None",
diff --git a/package.nw/lib/defaults.js b/package.nw/lib/defaults.js
index 63e124a..eae0255 100644
--- a/package.nw/lib/defaults.js
+++ b/package.nw/lib/defaults.js
@@ -74,6 +74,8 @@ var def_appSettings = {
myRawCall: "NOCALL",
myRawFreq: "",
myRawGrid: "",
+ oamsBandActivity: true,
+ oamsBandActivityNeighbors: false,
pathWidthWeight: 1.0,
potaEnabled: 1,
potaShowMenu: true,
diff --git a/package.nw/lib/grid-math.js b/package.nw/lib/grid-math.js
new file mode 100644
index 0000000..05c5015
--- /dev/null
+++ b/package.nw/lib/grid-math.js
@@ -0,0 +1,88 @@
+// Copyright © 2023 N7YHF
+// Permission granted to GridTracker.org for use.
+
+function fieldNumberToLetter(number)
+{
+ return String.fromCharCode(number + 65);
+}
+
+// Input already uppercased
+function squareToNeighbors(square)
+{
+ const neighborMatrix = [
+ [-1, +1], // NW
+ [0, +1], // N
+ [+1, +1], // NE
+
+ [-1, 0], // W
+ [0, 0], // Self
+ [+1, 0], // E
+
+ [-1, -1], // SW
+ [0, -1], // S
+ [+1, -1] // SE
+ ];
+
+ // RL90
+ // ^^---- RL is the "field"
+ // ^^---- 90 is the "square"
+
+ const fieldX = square.charCodeAt(0) - 65;
+ const fieldY = square.charCodeAt(1) - 65;
+
+ const squareX = square.charCodeAt(2) - 48;
+ const squareY = square.charCodeAt(3) - 48;
+
+ const neighbors = [];
+
+ for (const [dx, dy] of neighborMatrix)
+ {
+ let neighborFieldX = fieldX;
+ let neighborFieldY = fieldY;
+
+ let neighborSquareX = squareX + dx;
+ let neighborSquareY = squareY + dy;
+
+ if (neighborSquareX < 0)
+ {
+ neighborSquareX += 10;
+ neighborFieldX -= 1;
+ }
+ else if (neighborSquareX > 9)
+ {
+ neighborSquareX -= 10;
+ neighborFieldX += 1;
+ }
+
+ if (neighborSquareY < 0)
+ {
+ neighborSquareY += 10;
+ neighborFieldY -= 1;
+ }
+ else if (neighborSquareY > 9)
+ {
+ neighborSquareY -= 10;
+ neighborFieldY += 1;
+ }
+
+ if (neighborFieldX < 0)
+ {
+ neighborFieldX += 18;
+ }
+ else if (neighborFieldX > 17)
+ {
+ neighborFieldX -= 18;
+ }
+
+ if (neighborFieldY < 0 || neighborFieldY > 17)
+ {
+ continue;
+ }
+
+ const neighbor = `${fieldNumberToLetter(neighborFieldX)}${fieldNumberToLetter(neighborFieldY)}${neighborSquareX}${neighborSquareY}`;
+
+ neighbors.push(neighbor);
+ }
+
+ return neighbors;
+}
diff --git a/package.nw/lib/gt.js b/package.nw/lib/gt.js
index 8223071..2963885 100644
--- a/package.nw/lib/gt.js
+++ b/package.nw/lib/gt.js
@@ -65,7 +65,7 @@ var g_statsWindowHandle = null;
var g_lookupWindowHandle = null;
var g_lookupWindowInitialized = false;
var g_baWindowHandle = null;
-
+var g_baWindowInitialized = false;
var g_appSettings = {};
var g_mapSettings = {};
var g_legendColors = {};
@@ -173,6 +173,8 @@ function loadAllSettings()
loadAllSettings();
+const k_frequencyBucket = 10000;
+
var myDEcall = g_appSettings.myDEcall;
var myDEGrid = g_appSettings.myDEGrid;
var myDXGrid = "";
@@ -862,7 +864,7 @@ function toggleOffline()
document.getElementById(where).style.display = "none";
}
}
- pskReporterBandActivityDiv.style.display = "block";
+ bandActivityDiv.style.display = "block";
}
else
{
@@ -875,7 +877,7 @@ function toggleOffline()
buttonLOTWCheckBoxDiv.style.display = "none";
buttonClubCheckBoxDiv.style.display = "none";
gtFlagButton.style.display = "none";
- pskReporterBandActivityDiv.style.display = "none";
+ bandActivityDiv.style.display = "none";
gtShareButton.style.display = "none";
msgButton.style.display = "none";
donateButton.style.display = "none";
@@ -2473,7 +2475,7 @@ function insertMessageInRoster(newMessage, msgDEcallsign, msgDXcallsign, callObj
g_callRoster[hash].DXcall = msgDXcallsign;
g_callRoster[hash].DEcall = msgDEcallsign;
- g_rosterUpdateTimer = nodeTimers.setTimeout(delayedRosterUpdate, 100);
+ g_rosterUpdateTimer = nodeTimers.setTimeout(delayedRosterUpdate, 150);
}
function delayedRosterUpdate()
@@ -6236,6 +6238,8 @@ function handleWsjtxStatus(newMessage)
addLastTraffic(msg);
ackAlerts();
updateChatWindow();
+ oamsBandActivityCheck();
+ g_gtLiveStatusUpdate = true;
}
myRawFreq = newMessage.Frequency;
@@ -6345,11 +6349,6 @@ function handleWsjtxStatus(newMessage)
updateCountStats();
- if (g_appSettings.gtShareEnable == "true")
- {
- g_gtLiveStatusUpdate = true;
- }
-
if (bandChange || modeChange) reloadInfo(bandChange || modeChange);
var worker = "";
@@ -6497,6 +6496,15 @@ function handleWsjtxStatus(newMessage)
}
}
+function reportDecodes()
+{
+ if (Object.keys(g_decodeCollector).length > 0)
+ {
+ gtChatSendDecodes(g_decodeCollector);
+ g_decodeCollector = {};
+ }
+}
+
var g_lastMapView = null;
function drawTraffic()
@@ -6559,6 +6567,7 @@ function fitViewBetweenPoints(points, maxZoom = 20)
var g_spotCollector = {};
var g_spotDetailsCollector = {};
+var g_decodeCollector = {};
function handleWsjtxDecode(newMessage)
{
@@ -6902,16 +6911,23 @@ function handleWsjtxDecode(newMessage)
lastMessageWasInfo = true;
}
- if (g_appSettings.gtSpotEnable === true && callsign.DEcall in g_gtCallsigns)
+ if (g_appSettings.gtSpotEnable == true && newMessage.OF > 0)
{
- for (const cid in g_gtCallsigns[callsign.DEcall])
+ let freq = callsign.delta + newMessage.OF;
+ if (callsign.DEcall in g_gtCallsigns)
{
- if (cid in g_gtFlagPins && g_gtFlagPins[cid].o == 1)
+ for (const cid in g_gtCallsigns[callsign.DEcall])
{
- g_spotCollector[cid] = callsign.RSTsent;
- g_spotDetailsCollector[cid] = [callsign.delta + newMessage.OF, callsign.mode];
+ if (cid in g_gtFlagPins && g_gtFlagPins[cid].o == 1)
+ {
+ g_spotCollector[cid] = callsign.RSTsent;
+ g_spotDetailsCollector[cid] = [freq, callsign.mode];
+ }
}
}
+ freq = freq - (freq % k_frequencyBucket);
+ g_decodeCollector[freq] ??= 0;
+ g_decodeCollector[freq]++;
}
}
@@ -10435,6 +10451,9 @@ function setGtShareButtons()
}
else
{
+ g_oamsBandActivityData = null;
+ renderBandActivity();
+
msgButton.style.display = "none";
gtFlagButton.style.display = "none";
g_layerVectors.gtflags.setVisible(false);
@@ -10517,9 +10536,38 @@ function setGTspotEnable(checkbox)
{
g_appSettings.gtSpotEnable = checkbox.checked;
+ if (g_appSettings.gtSpotEnable == false)
+ {
+ g_spotCollector = {};
+ g_spotDetailsCollector = {};
+ g_decodeCollector = {};
+ }
g_gtLiveStatusUpdate = true;
}
+function setOamsBandActivity(checkbox)
+{
+ g_appSettings.oamsBandActivity = checkbox.checked;
+
+ if (g_appSettings.oamsBandActivity == false)
+ {
+ bandActivityNeighborDiv.style.display = "none";
+ g_oamsBandActivityData = null;
+ }
+ else
+ {
+ bandActivityNeighborDiv.style.display = "";
+ oamsBandActivityCheck();
+ }
+ renderBandActivity();
+}
+
+function setOamsBandActivityNeighbors(checkbox)
+{
+ g_appSettings.oamsBandActivityNeighbors = checkbox.checked;
+ oamsBandActivityCheck();
+}
+
function setMsgEnable(checkbox)
{
g_appSettings.gtMsgEnable = checkbox.checked;
@@ -10579,58 +10627,54 @@ function downloadAcknowledgements()
}
}
+var g_non_us_bands = [
+ "630m",
+ "160m",
+ "80m",
+ "60m",
+ "40m",
+ "30m",
+ "20m",
+ "17m",
+ "15m",
+ "12m",
+ "10m",
+ "6m",
+ "4m",
+ "2m"
+];
+
+var g_us_bands = [
+ "630m",
+ "160m",
+ "80m",
+ "60m",
+ "40m",
+ "30m",
+ "20m",
+ "17m",
+ "15m",
+ "12m",
+ "10m",
+ "6m",
+ "2m"
+];
+
function renderBandActivity()
{
var buffer = "";
- if (typeof g_bandActivity.lines[myMode] != "undefined")
+ if (typeof g_bandActivity.lines[myMode] != "undefined" || g_oamsBandActivityData != null)
{
- var lines = g_bandActivity.lines[myMode];
-
- var bands = [
- "630m",
- "160m",
- "80m",
- "60m",
- "40m",
- "30m",
- "20m",
- "17m",
- "15m",
- "12m",
- "10m",
- "6m",
- "4m",
- "2m"
- ];
- if (g_myDXCC in g_callsignDatabaseUSplus)
- {
- bands = [
- "630m",
- "160m",
- "80m",
- "60m",
- "40m",
- "30m",
- "20m",
- "17m",
- "15m",
- "12m",
- "10m",
- "6m",
- "2m"
- ];
- }
+ var lines = (myMode in g_bandActivity.lines) ? g_bandActivity.lines[myMode] : [];
+ var bands = (g_myDXCC in g_callsignDatabaseUSplus) ? g_us_bands : g_non_us_bands;
var bandData = {};
var maxValue = 0;
+
for (var i = 0; i < bands.length; i++)
{
- bandData[bands[i]] = {};
-
- bandData[bands[i]].score = 0;
- bandData[bands[i]].spots = 0;
- bandData[bands[i]].tx = 0;
- bandData[bands[i]].rx = 0;
+ bandData[bands[i]] = { pskScore: 0, pskSpots: 0, pskTx: 0, pskRx: 0, oamsRxSpots: 0, oamsTxSpots: 0, oamsTx: 0, oamsRx: 0, oamsDecodes: 0, oamsScore: 0 };
}
+
for (var x = 0; x < lines.length; x++)
{
var firstChar = lines[x].charCodeAt(0);
@@ -10644,53 +10688,74 @@ function renderBandActivity()
{
var place = bandData[band];
- place.score += Number(values[1]);
- place.spots += Number(values[2]);
- place.tx += Number(values[3]);
- place.rx += Number(values[4]);
- if (maxValue < place.score) maxValue = place.score;
- if (maxValue < place.spots) maxValue = place.spots;
+ place.pskScore += Number(values[1]);
+ place.pskSpots += Number(values[2]);
+ place.pskTx += Number(values[3]);
+ place.pskRx += Number(values[4]);
+ if (maxValue < place.pskScore) maxValue = place.pskScore;
+ if (maxValue < place.pskSpots) maxValue = place.pskSpots;
}
}
}
- var scaleFactor = 1.0;
+ if (g_appSettings.gtShareEnable == true && g_appSettings.oamsBandActivity == true && g_oamsBandActivityData)
+ {
+ for (const grid in g_oamsBandActivityData)
+ {
+ for (const band in g_oamsBandActivityData[grid])
+ {
+ if (band in bandData)
+ {
+ var place = bandData[band];
+
+ place.oamsDecodes += g_oamsBandActivityData[grid][band].d;
+ place.oamsRxSpots += g_oamsBandActivityData[grid][band].rS;
+ place.oamsTxSpots += g_oamsBandActivityData[grid][band].tS;
+ place.oamsTx += g_oamsBandActivityData[grid][band].t;
+ place.oamsRx += g_oamsBandActivityData[grid][band].r
+
+ if (place.oamsRx > 0)
+ {
+ place.oamsScore = parseInt((place.oamsDecodes > place.oamsRxSpots) ? ((place.oamsDecodes - place.oamsRxSpots) / place.oamsRx) + (place.oamsTxSpots * place.oamsTx) : (place.oamsRxSpots / place.oamsRx) + (place.oamsTxSpots * place.oamsTx));
+ }
+ else
+ {
+ place.oamsScore = parseInt(place.oamsTxSpots * place.oamsTx);
+ }
+ if (maxValue < place.oamsScore) maxValue = place.oamsScore;
+ }
+ }
+ }
+ }
+
+ let scaleFactor = 1.0;
if (maxValue > 26)
{
scaleFactor = 26 / maxValue;
}
- for (var band in bandData)
+ for (const band in bandData)
{
- var blockMyBand = "";
- if (band == myBand) blockMyBand = " class='myBand' ";
+ let blockMyBand = (band == myBand) ? " class='myBand' " : "";
+ let title;
+ let blueBarValue;
- var title =
- "Score: " +
- bandData[band].score +
- " Spots: " +
- bandData[band].spots +
- "\nTx: " +
- bandData[band].tx +
- "\tRx: " +
- bandData[band].rx;
- buffer +=
- " ";
- buffer +=
- " ";
- buffer +=
- " ";
- buffer +=
- " " +
- parseInt(band) +
- " ";
+ if (g_appSettings.gtShareEnable == true && g_appSettings.oamsBandActivity == true)
+ {
+ title = "OAMS\n";
+ title += "\tScore: " + bandData[band].oamsScore + "\n\tDecodes: " + bandData[band].oamsDecodes + "\n\tTX-Spots: " + bandData[band].oamsTxSpots + "\n\tRX-Spots: " + bandData[band].oamsRxSpots + "\n\tTx: " + bandData[band].oamsTx + "\tRx: " + bandData[band].oamsRx;
+ title += "\nPSK-Reporter\n";
+ title += "\tScore: " + bandData[band].pskScore + "\n\tSpots: " + bandData[band].pskSpots + "\n\tTx: " + bandData[band].pskTx + "\tRx: " + bandData[band].pskRx;
+ blueBarValue = (bandData[band].oamsScore * scaleFactor + 1);
+ }
+ else
+ {
+ title = "Score: " + bandData[band].pskScore + "\nSpots: " + bandData[band].pskSpots + "\nTx: " + bandData[band].pskTx + "\tRx: " + bandData[band].pskRx;
+ blueBarValue = (bandData[band].pskSpots * scaleFactor + 1);
+ }
+
+ buffer += " ";
+ buffer += " "; buffer += " ";
+ buffer += " " + parseInt(band) + " ";
buffer += " ";
}
}
@@ -10699,7 +10764,7 @@ function renderBandActivity()
buffer = "..no data yet..";
}
graphDiv.innerHTML = buffer;
- if (g_baWindowHandle)
+ if (g_baWindowInitialized == true)
{
g_baWindowHandle.window.graphDiv.innerHTML = buffer;
}
@@ -10733,11 +10798,7 @@ function pskGetBandActivity()
g_bandActivity.lastUpdate[myMode] = 0;
}
- if (
- myMode.length > 0 &&
- myDEGrid.length > 0 &&
- g_timeNow > g_bandActivity.lastUpdate[myMode]
- )
+ if (myMode.length > 0 && myDEGrid.length > 0 && g_timeNow > g_bandActivity.lastUpdate[myMode])
{
getBuffer(
"https://pskreporter.info/cgi-bin/psk-freq.pl?mode=" +
@@ -12827,6 +12888,10 @@ function loadMsgSettings()
msgEnable.checked = g_appSettings.gtMsgEnable;
GTspotEnable.checked = g_appSettings.gtSpotEnable;
+ oamsBandActivity.checked = g_appSettings.oamsBandActivity;
+ oamsBandActivityNeighbors.checked = g_appSettings.oamsBandActivityNeighbors;
+ setOamsBandActivity(oamsBandActivity);
+
setSpotImage();
for (var key in g_msgSettings)
@@ -13032,7 +13097,7 @@ function startupButtonsAndInputs()
gtShareButton.style.display = "none";
msgButton.style.display = "none";
donateButton.style.display = "none";
- pskReporterBandActivityDiv.style.display = "none";
+ bandActivityDiv.style.display = "none";
buttonSpotsBoxDiv.style.display = "none";
potaButton.style.display = "none";
}
@@ -13052,6 +13117,8 @@ function startupEventsAndTimers()
// Clock timer update every second
nodeTimers.setInterval(displayTime, 1000);
+ nodeTimers.setInterval(reportDecodes, 60000);
+ nodeTimers.setInterval(oamsBandActivityCheck, 300000);
}
var g_finishedLoading = false;
@@ -13610,6 +13677,7 @@ function updateWsjtxListener(port)
newMessage.OG = g_instances[instanceId].status.DEgrid;
newMessage.OM = g_instances[instanceId].status.MO;
newMessage.OB = g_instances[instanceId].status.Band;
+ newMessage.SP = g_instances[instanceId].status.SopMode;
}
if (newMessage.type == 3)
{
diff --git a/package.nw/lib/gtws.js b/package.nw/lib/gtws.js
index a384944..db2ae82 100644
--- a/package.nw/lib/gtws.js
+++ b/package.nw/lib/gtws.js
@@ -9,7 +9,8 @@ var g_chatRecvFunctions = {
info: gtChatUpdateCall,
drop: gtChatRemoveCall,
mesg: gtChatMessage,
- o: gtSpotMessage
+ o: gtSpotMessage,
+ ba: bandActivityReply
};
var ChatState = Object();
@@ -48,6 +49,7 @@ var g_gtNeedUsersList = true;
var g_gtUuidValid = false;
var g_gtLiveStatusUpdate = false;
+var g_oamsBandActivityData = null;
var myChatId = 0;
@@ -213,7 +215,7 @@ function gtStatusCheck()
function sendGtJson(json, isUUIDrequest = false)
{
- if (g_gtChatSocket != null)
+ if (g_appSettings.gtShareEnable == true && g_gtChatSocket != null)
{
if (g_gtChatSocket.readyState === WebSocket.OPEN && (isUUIDrequest || g_gtUuidValid))
{
@@ -227,8 +229,6 @@ function sendGtJson(json, isUUIDrequest = false)
}
}
}
- // if we don't have a socketHandle, don't go changing the state willy nilly!
- // else g_gtState = ChatState.closed;
}
var g_lastGtStatus = "";
@@ -258,13 +258,53 @@ function gtChatSendStatus()
function gtChatSendSpots(spotsObject, detailsObject)
{
- var msg = Object();
+ let msg = Object();
msg.type = "o";
msg.uuid = g_appSettings.chatUUID;
msg.o = spotsObject;
msg.d = detailsObject;
- msg = JSON.stringify(msg);
- sendGtJson(msg);
+
+ sendGtJson(JSON.stringify(msg));
+}
+
+function gtChatSendDecodes(instancesObject)
+{
+ let msg = Object();
+ msg.type = "d";
+ msg.uuid = g_appSettings.chatUUID;
+ msg.i = instancesObject;
+ sendGtJson(JSON.stringify(msg));
+}
+
+function oamsBandActivityCheck()
+{
+ if (g_appSettings.oamsBandActivity == true && myDEGrid.length >= 4)
+ {
+ let grid = myDEGrid.substring(0, 4).toUpperCase();
+ if (g_appSettings.oamsBandActivityNeighbors == true)
+ {
+ gtChatSendBandActivityRequest(squareToNeighbors(grid));
+ }
+ else
+ {
+ gtChatSendBandActivityRequest([grid]);
+ }
+ }
+}
+
+function gtChatSendBandActivityRequest(gridArray)
+{
+ msg = Object();
+ msg.type = "ba";
+ msg.uuid = g_appSettings.chatUUID;
+ msg.ga = gridArray;
+ sendGtJson(JSON.stringify(msg));
+}
+
+function bandActivityReply(jsmesg)
+{
+ g_oamsBandActivityData = jsmesg.r;
+ renderBandActivity();
}
function gtChatRemoveCall(jsmesg)
@@ -369,7 +409,7 @@ function gtChatUpdateCall(jsmesg)
if (!(g_gtFlagPins[cid].call in g_gtCallsigns))
{
// Can happen when a user changes callsign
- g_gtCallsigns[g_gtFlagPins[cid].call] = Object();
+ g_gtCallsigns[g_gtFlagPins[cid].call] = {};
}
g_gtCallsigns[g_gtFlagPins[cid].call][cid] = true;
@@ -500,6 +540,8 @@ function gtChatNewList(jsmesg)
}
updateChatWindow();
+
+ oamsBandActivityCheck();
}
function appendToHistory(cid, jsmesg)
diff --git a/package.nw/lib/pota.js b/package.nw/lib/pota.js
index f0bc6bc..c71d40e 100644
--- a/package.nw/lib/pota.js
+++ b/package.nw/lib/pota.js
@@ -420,15 +420,7 @@ function fillObjectFromTemplate(template, input)
function uniqueArrayFromArray(input)
{
- var unique = [];
- input.forEach((c) =>
- {
- if (!unique.includes(c))
- {
- unique.push(c);
- }
- });
- return unique;
+ return [...new Set(input)];
}
function processPotaSpots(buffer)
|