kopia lustrzana https://gitlab.com/gridtracker.org/gridtracker
rodzic
a36f22bd92
commit
470c76f610
|
@ -13,7 +13,7 @@ module.exports = {
|
||||||
SharedArrayBuffer: "readonly"
|
SharedArrayBuffer: "readonly"
|
||||||
},
|
},
|
||||||
parserOptions: {
|
parserOptions: {
|
||||||
ecmaVersion: 2018
|
ecmaVersion: 2021
|
||||||
},
|
},
|
||||||
rules: {
|
rules: {
|
||||||
/* See https://eslint.org/docs/rules/ */
|
/* See https://eslint.org/docs/rules/ */
|
||||||
|
|
|
@ -42,6 +42,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
<script src="./lib/screens.js" type="text/javascript"></script>
|
<script src="./lib/screens.js" type="text/javascript"></script>
|
||||||
<script src="./lib/alerts.js" type="text/javascript"></script>
|
<script src="./lib/alerts.js" type="text/javascript"></script>
|
||||||
<script src="./lib/third-party.js" type="text/javascript"></script>
|
<script src="./lib/third-party.js" type="text/javascript"></script>
|
||||||
|
<script src="./lib/grid-math.js" type="text/javascript"></script>
|
||||||
<script src="./lib/adif.js" type="text/javascript"></script>
|
<script src="./lib/adif.js" type="text/javascript"></script>
|
||||||
<script src="./lib/ol.js" type="text/javascript"></script>
|
<script src="./lib/ol.js" type="text/javascript"></script>
|
||||||
<script src="./lib/arc.js" type="text/javascript"></script>
|
<script src="./lib/arc.js" type="text/javascript"></script>
|
||||||
|
@ -304,7 +305,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="pskReporterBandActivityDiv" class="roundBorder" style="
|
<div id="bandActivityDiv" class="roundBorder" style="
|
||||||
position: relative;
|
position: relative;
|
||||||
background-color: #000;
|
background-color: #000;
|
||||||
border: 1px solid purple;
|
border: 1px solid purple;
|
||||||
|
@ -312,7 +313,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
height: 49px;
|
height: 49px;
|
||||||
margin-bottom: 1px;
|
margin-bottom: 1px;
|
||||||
padding: 0px;
|
padding: 0px;
|
||||||
" title="PSK-Reporter Band Activity" oncontextmenu="toggleBaWindow(event)">
|
" title="Band Activity" oncontextmenu="toggleBaWindow(event)">
|
||||||
<div data-i18n="sidebarNoDataYet" id="graphDiv" style="bottom: 0; position: absolute; width: 100%; padding: 0px; margin-bottom: 2px">
|
<div data-i18n="sidebarNoDataYet" id="graphDiv" style="bottom: 0; position: absolute; width: 100%; padding: 0px; margin-bottom: 2px">
|
||||||
...no data yet...
|
...no data yet...
|
||||||
</div>
|
</div>
|
||||||
|
@ -2885,7 +2886,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<div class="mapItem" id="GTspotDiv">
|
<div class="mapItem">
|
||||||
<table align="center">
|
<table align="center">
|
||||||
<tr>
|
<tr>
|
||||||
<td data-i18n="settings.OAMS.spotting.enable.label"
|
<td data-i18n="settings.OAMS.spotting.enable.label"
|
||||||
|
@ -2900,6 +2901,35 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<br />
|
<br />
|
||||||
|
<div class="mapItem">
|
||||||
|
<table align="center">
|
||||||
|
<tr>
|
||||||
|
<td data-i18n="settings.OAMS.BandActivity.enable.label"
|
||||||
|
title="Receive Band Activity Reports through the OAMS network">Band Activity</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<input title="Enable / Disable Band Activity" type="checkbox" id="oamsBandActivity"
|
||||||
|
onclick="setOamsBandActivity(this);" />
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<div class="mapItem" id="bandActivityNeighborDiv">
|
||||||
|
<table align="center">
|
||||||
|
<tr>
|
||||||
|
<td data-i18n="settings.OAMS.BandActivity.neighbor.enable.label"
|
||||||
|
title="Include your 8 neighboring grids in report">Neighboring Grids</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<input title="Enable / Disable Neighbor Grids" type="checkbox" id="oamsBandActivityNeighbors"
|
||||||
|
onclick="setOamsBandActivityNeighbors(this);" />
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<br />
|
||||||
<div id="msgSettingsDiv" class="mapItem" style="padding: 5px">
|
<div id="msgSettingsDiv" class="mapItem" style="padding: 5px">
|
||||||
<div class="mapItem">
|
<div class="mapItem">
|
||||||
<table align="center">
|
<table align="center">
|
||||||
|
|
|
@ -40,6 +40,7 @@
|
||||||
|
|
||||||
<body
|
<body
|
||||||
id="mainBody"
|
id="mainBody"
|
||||||
|
onload="window.opener.g_baWindowInitialized = true"
|
||||||
style="
|
style="
|
||||||
-webkit-app-region: drag;
|
-webkit-app-region: drag;
|
||||||
margin: 0px;
|
margin: 0px;
|
||||||
|
@ -57,7 +58,7 @@
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
id="pskReporterBandActivityDiv"
|
id="bandActivityDiv"
|
||||||
style="
|
style="
|
||||||
position: relative;
|
position: relative;
|
||||||
background-color: #000;
|
background-color: #000;
|
||||||
|
@ -67,7 +68,7 @@
|
||||||
margin-bottom: 1px;
|
margin-bottom: 1px;
|
||||||
padding: 0px;
|
padding: 0px;
|
||||||
"
|
"
|
||||||
title="PSK-Reporter Band Activity"
|
title="Band Activity"
|
||||||
>
|
>
|
||||||
<div data-i18n="bandactivity.noData" id="graphDiv" style="bottom: 0; position: absolute; width: 100%; padding: 0px; margin-bottom: 2px">
|
<div data-i18n="bandactivity.noData" id="graphDiv" style="bottom: 0; position: absolute; width: 100%; padding: 0px; margin-bottom: 2px">
|
||||||
<br />...no data yet...<br />
|
<br />...no data yet...<br />
|
||||||
|
|
|
@ -426,6 +426,10 @@
|
||||||
"settings.OAMS.message.enable.hover": "啟用消息傳遞",
|
"settings.OAMS.message.enable.hover": "啟用消息傳遞",
|
||||||
"settings.OAMS.spotting.enable.label": "啟用定位",
|
"settings.OAMS.spotting.enable.label": "啟用定位",
|
||||||
"settings.OAMS.spotting.enable.hover": "通過OAMS網絡發送和接收現場報告",
|
"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.label": "新消息警報",
|
||||||
"settings.OAMS.message.newAlert.hover": "收到新消息時發出警報。",
|
"settings.OAMS.message.newAlert.hover": "收到新消息時發出警報。",
|
||||||
"settings.OAMS.message.newAlert.none": "None",
|
"settings.OAMS.message.newAlert.none": "None",
|
||||||
|
|
|
@ -425,6 +425,10 @@
|
||||||
"settings.OAMS.message.enable.hover": "启用消息传递",
|
"settings.OAMS.message.enable.hover": "启用消息传递",
|
||||||
"settings.OAMS.spotting.enable.label": "启用定位",
|
"settings.OAMS.spotting.enable.label": "启用定位",
|
||||||
"settings.OAMS.spotting.enable.hover": "通过OAMS网络发送和接收现场报告",
|
"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.label": "新消息警报",
|
||||||
"settings.OAMS.message.newAlert.hover": "收到新消息时发出警报。",
|
"settings.OAMS.message.newAlert.hover": "收到新消息时发出警报。",
|
||||||
"settings.OAMS.message.newAlert.none": "None",
|
"settings.OAMS.message.newAlert.none": "None",
|
||||||
|
|
|
@ -43,7 +43,7 @@
|
||||||
"info.DXDistance.hover": "Distance",
|
"info.DXDistance.hover": "Distance",
|
||||||
"info.DXAzimuth.hover": "Heading",
|
"info.DXAzimuth.hover": "Heading",
|
||||||
"operatingMode.hover": "Click to ignore incoming messages",
|
"operatingMode.hover": "Click to ignore incoming messages",
|
||||||
"bandActivity.hover": "PSK-Reporter band Activity",
|
"bandActivity.hover": "Band Activity",
|
||||||
"quickStats.hover": "Quick Stats",
|
"quickStats.hover": "Quick Stats",
|
||||||
"quickStats.CallRX.hover": "Callsigns Heard",
|
"quickStats.CallRX.hover": "Callsigns Heard",
|
||||||
"quickStats.CallRX.label": "Rx Calls",
|
"quickStats.CallRX.label": "Rx Calls",
|
||||||
|
@ -420,10 +420,14 @@
|
||||||
"settings.alerts.CustomAlerts.new.repeat.once": "Only Once",
|
"settings.alerts.CustomAlerts.new.repeat.once": "Only Once",
|
||||||
"settings.alerts.CustomAlerts.new.repeat.never": "Never Repeat",
|
"settings.alerts.CustomAlerts.new.repeat.never": "Never Repeat",
|
||||||
"settings.alerts.CustomAlerts.new.addButton": "ADD",
|
"settings.alerts.CustomAlerts.new.addButton": "ADD",
|
||||||
"settings.OAMS.message.enable.label": "Messaging Enable",
|
"settings.OAMS.message.enable.label": "Messaging",
|
||||||
"settings.OAMS.message.enable.hover": "Messaging Enable",
|
"settings.OAMS.message.enable.hover": "Messaging",
|
||||||
"settings.OAMS.spotting.enable.label": "Spotting Enable",
|
"settings.OAMS.spotting.enable.label": "Spotting",
|
||||||
"settings.OAMS.spotting.enable.hover": "Send and Receivev Spot Reports through the OAMS network",
|
"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.label": "New Message Alert",
|
||||||
"settings.OAMS.message.newAlert.hover": "Alert when new messages received.",
|
"settings.OAMS.message.newAlert.hover": "Alert when new messages received.",
|
||||||
"settings.OAMS.message.newAlert.none": "None",
|
"settings.OAMS.message.newAlert.none": "None",
|
||||||
|
|
|
@ -74,6 +74,8 @@ var def_appSettings = {
|
||||||
myRawCall: "NOCALL",
|
myRawCall: "NOCALL",
|
||||||
myRawFreq: "",
|
myRawFreq: "",
|
||||||
myRawGrid: "",
|
myRawGrid: "",
|
||||||
|
oamsBandActivity: true,
|
||||||
|
oamsBandActivityNeighbors: false,
|
||||||
pathWidthWeight: 1.0,
|
pathWidthWeight: 1.0,
|
||||||
potaEnabled: 1,
|
potaEnabled: 1,
|
||||||
potaShowMenu: true,
|
potaShowMenu: true,
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
|
@ -65,7 +65,7 @@ var g_statsWindowHandle = null;
|
||||||
var g_lookupWindowHandle = null;
|
var g_lookupWindowHandle = null;
|
||||||
var g_lookupWindowInitialized = false;
|
var g_lookupWindowInitialized = false;
|
||||||
var g_baWindowHandle = null;
|
var g_baWindowHandle = null;
|
||||||
|
var g_baWindowInitialized = false;
|
||||||
var g_appSettings = {};
|
var g_appSettings = {};
|
||||||
var g_mapSettings = {};
|
var g_mapSettings = {};
|
||||||
var g_legendColors = {};
|
var g_legendColors = {};
|
||||||
|
@ -173,6 +173,8 @@ function loadAllSettings()
|
||||||
|
|
||||||
loadAllSettings();
|
loadAllSettings();
|
||||||
|
|
||||||
|
const k_frequencyBucket = 10000;
|
||||||
|
|
||||||
var myDEcall = g_appSettings.myDEcall;
|
var myDEcall = g_appSettings.myDEcall;
|
||||||
var myDEGrid = g_appSettings.myDEGrid;
|
var myDEGrid = g_appSettings.myDEGrid;
|
||||||
var myDXGrid = "";
|
var myDXGrid = "";
|
||||||
|
@ -862,7 +864,7 @@ function toggleOffline()
|
||||||
document.getElementById(where).style.display = "none";
|
document.getElementById(where).style.display = "none";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pskReporterBandActivityDiv.style.display = "block";
|
bandActivityDiv.style.display = "block";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -875,7 +877,7 @@ function toggleOffline()
|
||||||
buttonLOTWCheckBoxDiv.style.display = "none";
|
buttonLOTWCheckBoxDiv.style.display = "none";
|
||||||
buttonClubCheckBoxDiv.style.display = "none";
|
buttonClubCheckBoxDiv.style.display = "none";
|
||||||
gtFlagButton.style.display = "none";
|
gtFlagButton.style.display = "none";
|
||||||
pskReporterBandActivityDiv.style.display = "none";
|
bandActivityDiv.style.display = "none";
|
||||||
gtShareButton.style.display = "none";
|
gtShareButton.style.display = "none";
|
||||||
msgButton.style.display = "none";
|
msgButton.style.display = "none";
|
||||||
donateButton.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].DXcall = msgDXcallsign;
|
||||||
g_callRoster[hash].DEcall = msgDEcallsign;
|
g_callRoster[hash].DEcall = msgDEcallsign;
|
||||||
|
|
||||||
g_rosterUpdateTimer = nodeTimers.setTimeout(delayedRosterUpdate, 100);
|
g_rosterUpdateTimer = nodeTimers.setTimeout(delayedRosterUpdate, 150);
|
||||||
}
|
}
|
||||||
|
|
||||||
function delayedRosterUpdate()
|
function delayedRosterUpdate()
|
||||||
|
@ -6236,6 +6238,8 @@ function handleWsjtxStatus(newMessage)
|
||||||
addLastTraffic(msg);
|
addLastTraffic(msg);
|
||||||
ackAlerts();
|
ackAlerts();
|
||||||
updateChatWindow();
|
updateChatWindow();
|
||||||
|
oamsBandActivityCheck();
|
||||||
|
g_gtLiveStatusUpdate = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
myRawFreq = newMessage.Frequency;
|
myRawFreq = newMessage.Frequency;
|
||||||
|
@ -6345,11 +6349,6 @@ function handleWsjtxStatus(newMessage)
|
||||||
|
|
||||||
updateCountStats();
|
updateCountStats();
|
||||||
|
|
||||||
if (g_appSettings.gtShareEnable == "true")
|
|
||||||
{
|
|
||||||
g_gtLiveStatusUpdate = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (bandChange || modeChange) reloadInfo(bandChange || modeChange);
|
if (bandChange || modeChange) reloadInfo(bandChange || modeChange);
|
||||||
var worker = "";
|
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;
|
var g_lastMapView = null;
|
||||||
|
|
||||||
function drawTraffic()
|
function drawTraffic()
|
||||||
|
@ -6559,6 +6567,7 @@ function fitViewBetweenPoints(points, maxZoom = 20)
|
||||||
|
|
||||||
var g_spotCollector = {};
|
var g_spotCollector = {};
|
||||||
var g_spotDetailsCollector = {};
|
var g_spotDetailsCollector = {};
|
||||||
|
var g_decodeCollector = {};
|
||||||
|
|
||||||
function handleWsjtxDecode(newMessage)
|
function handleWsjtxDecode(newMessage)
|
||||||
{
|
{
|
||||||
|
@ -6902,16 +6911,23 @@ function handleWsjtxDecode(newMessage)
|
||||||
lastMessageWasInfo = true;
|
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;
|
if (cid in g_gtFlagPins && g_gtFlagPins[cid].o == 1)
|
||||||
g_spotDetailsCollector[cid] = [callsign.delta + newMessage.OF, callsign.mode];
|
{
|
||||||
|
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
|
else
|
||||||
{
|
{
|
||||||
|
g_oamsBandActivityData = null;
|
||||||
|
renderBandActivity();
|
||||||
|
|
||||||
msgButton.style.display = "none";
|
msgButton.style.display = "none";
|
||||||
gtFlagButton.style.display = "none";
|
gtFlagButton.style.display = "none";
|
||||||
g_layerVectors.gtflags.setVisible(false);
|
g_layerVectors.gtflags.setVisible(false);
|
||||||
|
@ -10517,9 +10536,38 @@ function setGTspotEnable(checkbox)
|
||||||
{
|
{
|
||||||
g_appSettings.gtSpotEnable = checkbox.checked;
|
g_appSettings.gtSpotEnable = checkbox.checked;
|
||||||
|
|
||||||
|
if (g_appSettings.gtSpotEnable == false)
|
||||||
|
{
|
||||||
|
g_spotCollector = {};
|
||||||
|
g_spotDetailsCollector = {};
|
||||||
|
g_decodeCollector = {};
|
||||||
|
}
|
||||||
g_gtLiveStatusUpdate = true;
|
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)
|
function setMsgEnable(checkbox)
|
||||||
{
|
{
|
||||||
g_appSettings.gtMsgEnable = checkbox.checked;
|
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()
|
function renderBandActivity()
|
||||||
{
|
{
|
||||||
var buffer = "";
|
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 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 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 bandData = {};
|
var bandData = {};
|
||||||
var maxValue = 0;
|
var maxValue = 0;
|
||||||
|
|
||||||
for (var i = 0; i < bands.length; i++)
|
for (var i = 0; i < bands.length; i++)
|
||||||
{
|
{
|
||||||
bandData[bands[i]] = {};
|
bandData[bands[i]] = { pskScore: 0, pskSpots: 0, pskTx: 0, pskRx: 0, oamsRxSpots: 0, oamsTxSpots: 0, oamsTx: 0, oamsRx: 0, oamsDecodes: 0, oamsScore: 0 };
|
||||||
|
|
||||||
bandData[bands[i]].score = 0;
|
|
||||||
bandData[bands[i]].spots = 0;
|
|
||||||
bandData[bands[i]].tx = 0;
|
|
||||||
bandData[bands[i]].rx = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (var x = 0; x < lines.length; x++)
|
for (var x = 0; x < lines.length; x++)
|
||||||
{
|
{
|
||||||
var firstChar = lines[x].charCodeAt(0);
|
var firstChar = lines[x].charCodeAt(0);
|
||||||
|
@ -10644,53 +10688,74 @@ function renderBandActivity()
|
||||||
{
|
{
|
||||||
var place = bandData[band];
|
var place = bandData[band];
|
||||||
|
|
||||||
place.score += Number(values[1]);
|
place.pskScore += Number(values[1]);
|
||||||
place.spots += Number(values[2]);
|
place.pskSpots += Number(values[2]);
|
||||||
place.tx += Number(values[3]);
|
place.pskTx += Number(values[3]);
|
||||||
place.rx += Number(values[4]);
|
place.pskRx += Number(values[4]);
|
||||||
if (maxValue < place.score) maxValue = place.score;
|
if (maxValue < place.pskScore) maxValue = place.pskScore;
|
||||||
if (maxValue < place.spots) maxValue = place.spots;
|
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)
|
if (maxValue > 26)
|
||||||
{
|
{
|
||||||
scaleFactor = 26 / maxValue;
|
scaleFactor = 26 / maxValue;
|
||||||
}
|
}
|
||||||
for (var band in bandData)
|
for (const band in bandData)
|
||||||
{
|
{
|
||||||
var blockMyBand = "";
|
let blockMyBand = (band == myBand) ? " class='myBand' " : "";
|
||||||
if (band == myBand) blockMyBand = " class='myBand' ";
|
let title;
|
||||||
|
let blueBarValue;
|
||||||
|
|
||||||
var title =
|
if (g_appSettings.gtShareEnable == true && g_appSettings.oamsBandActivity == true)
|
||||||
"Score: " +
|
{
|
||||||
bandData[band].score +
|
title = "OAMS\n";
|
||||||
" Spots: " +
|
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;
|
||||||
bandData[band].spots +
|
title += "\nPSK-Reporter\n";
|
||||||
"\nTx: " +
|
title += "\tScore: " + bandData[band].pskScore + "\n\tSpots: " + bandData[band].pskSpots + "\n\tTx: " + bandData[band].pskTx + "\tRx: " + bandData[band].pskRx;
|
||||||
bandData[band].tx +
|
blueBarValue = (bandData[band].oamsScore * scaleFactor + 1);
|
||||||
"\tRx: " +
|
}
|
||||||
bandData[band].rx;
|
else
|
||||||
buffer +=
|
{
|
||||||
"<div title='" +
|
title = "Score: " + bandData[band].pskScore + "\nSpots: " + bandData[band].pskSpots + "\nTx: " + bandData[band].pskTx + "\tRx: " + bandData[band].pskRx;
|
||||||
title +
|
blueBarValue = (bandData[band].pskSpots * scaleFactor + 1);
|
||||||
"' style='display:inline-block;margin:1px;' class='aBand'>";
|
}
|
||||||
buffer +=
|
|
||||||
"<div style='height: " +
|
buffer += "<div title='" + title + "' style='display:inline-block;margin:1px;' class='aBand'>";
|
||||||
(bandData[band].score * scaleFactor + 1) +
|
buffer += "<div style='height: " + (bandData[band].pskScore * scaleFactor + 1) + "px;' class='barTx'></div>"; buffer += "<div style='height: " + blueBarValue + "px;' class='barRx'></div>";
|
||||||
"px;' class='barTx'></div>";
|
buffer += "<div style='font-size:10px' " + blockMyBand + ">" + parseInt(band) + "</div>";
|
||||||
buffer +=
|
|
||||||
"<div style='height: " +
|
|
||||||
(bandData[band].spots * scaleFactor + 1) +
|
|
||||||
"px;' class='barRx'></div>";
|
|
||||||
buffer +=
|
|
||||||
"<div style='font-size:10px' " +
|
|
||||||
blockMyBand +
|
|
||||||
">" +
|
|
||||||
parseInt(band) +
|
|
||||||
"</div>";
|
|
||||||
buffer += "</div>";
|
buffer += "</div>";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10699,7 +10764,7 @@ function renderBandActivity()
|
||||||
buffer = "..no data yet..";
|
buffer = "..no data yet..";
|
||||||
}
|
}
|
||||||
graphDiv.innerHTML = buffer;
|
graphDiv.innerHTML = buffer;
|
||||||
if (g_baWindowHandle)
|
if (g_baWindowInitialized == true)
|
||||||
{
|
{
|
||||||
g_baWindowHandle.window.graphDiv.innerHTML = buffer;
|
g_baWindowHandle.window.graphDiv.innerHTML = buffer;
|
||||||
}
|
}
|
||||||
|
@ -10733,11 +10798,7 @@ function pskGetBandActivity()
|
||||||
g_bandActivity.lastUpdate[myMode] = 0;
|
g_bandActivity.lastUpdate[myMode] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (
|
if (myMode.length > 0 && myDEGrid.length > 0 && g_timeNow > g_bandActivity.lastUpdate[myMode])
|
||||||
myMode.length > 0 &&
|
|
||||||
myDEGrid.length > 0 &&
|
|
||||||
g_timeNow > g_bandActivity.lastUpdate[myMode]
|
|
||||||
)
|
|
||||||
{
|
{
|
||||||
getBuffer(
|
getBuffer(
|
||||||
"https://pskreporter.info/cgi-bin/psk-freq.pl?mode=" +
|
"https://pskreporter.info/cgi-bin/psk-freq.pl?mode=" +
|
||||||
|
@ -12827,6 +12888,10 @@ function loadMsgSettings()
|
||||||
msgEnable.checked = g_appSettings.gtMsgEnable;
|
msgEnable.checked = g_appSettings.gtMsgEnable;
|
||||||
GTspotEnable.checked = g_appSettings.gtSpotEnable;
|
GTspotEnable.checked = g_appSettings.gtSpotEnable;
|
||||||
|
|
||||||
|
oamsBandActivity.checked = g_appSettings.oamsBandActivity;
|
||||||
|
oamsBandActivityNeighbors.checked = g_appSettings.oamsBandActivityNeighbors;
|
||||||
|
setOamsBandActivity(oamsBandActivity);
|
||||||
|
|
||||||
setSpotImage();
|
setSpotImage();
|
||||||
|
|
||||||
for (var key in g_msgSettings)
|
for (var key in g_msgSettings)
|
||||||
|
@ -13032,7 +13097,7 @@ function startupButtonsAndInputs()
|
||||||
gtShareButton.style.display = "none";
|
gtShareButton.style.display = "none";
|
||||||
msgButton.style.display = "none";
|
msgButton.style.display = "none";
|
||||||
donateButton.style.display = "none";
|
donateButton.style.display = "none";
|
||||||
pskReporterBandActivityDiv.style.display = "none";
|
bandActivityDiv.style.display = "none";
|
||||||
buttonSpotsBoxDiv.style.display = "none";
|
buttonSpotsBoxDiv.style.display = "none";
|
||||||
potaButton.style.display = "none";
|
potaButton.style.display = "none";
|
||||||
}
|
}
|
||||||
|
@ -13052,6 +13117,8 @@ function startupEventsAndTimers()
|
||||||
|
|
||||||
// Clock timer update every second
|
// Clock timer update every second
|
||||||
nodeTimers.setInterval(displayTime, 1000);
|
nodeTimers.setInterval(displayTime, 1000);
|
||||||
|
nodeTimers.setInterval(reportDecodes, 60000);
|
||||||
|
nodeTimers.setInterval(oamsBandActivityCheck, 300000);
|
||||||
}
|
}
|
||||||
|
|
||||||
var g_finishedLoading = false;
|
var g_finishedLoading = false;
|
||||||
|
@ -13610,6 +13677,7 @@ function updateWsjtxListener(port)
|
||||||
newMessage.OG = g_instances[instanceId].status.DEgrid;
|
newMessage.OG = g_instances[instanceId].status.DEgrid;
|
||||||
newMessage.OM = g_instances[instanceId].status.MO;
|
newMessage.OM = g_instances[instanceId].status.MO;
|
||||||
newMessage.OB = g_instances[instanceId].status.Band;
|
newMessage.OB = g_instances[instanceId].status.Band;
|
||||||
|
newMessage.SP = g_instances[instanceId].status.SopMode;
|
||||||
}
|
}
|
||||||
if (newMessage.type == 3)
|
if (newMessage.type == 3)
|
||||||
{
|
{
|
||||||
|
|
|
@ -9,7 +9,8 @@ var g_chatRecvFunctions = {
|
||||||
info: gtChatUpdateCall,
|
info: gtChatUpdateCall,
|
||||||
drop: gtChatRemoveCall,
|
drop: gtChatRemoveCall,
|
||||||
mesg: gtChatMessage,
|
mesg: gtChatMessage,
|
||||||
o: gtSpotMessage
|
o: gtSpotMessage,
|
||||||
|
ba: bandActivityReply
|
||||||
};
|
};
|
||||||
|
|
||||||
var ChatState = Object();
|
var ChatState = Object();
|
||||||
|
@ -48,6 +49,7 @@ var g_gtNeedUsersList = true;
|
||||||
var g_gtUuidValid = false;
|
var g_gtUuidValid = false;
|
||||||
|
|
||||||
var g_gtLiveStatusUpdate = false;
|
var g_gtLiveStatusUpdate = false;
|
||||||
|
var g_oamsBandActivityData = null;
|
||||||
|
|
||||||
var myChatId = 0;
|
var myChatId = 0;
|
||||||
|
|
||||||
|
@ -213,7 +215,7 @@ function gtStatusCheck()
|
||||||
|
|
||||||
function sendGtJson(json, isUUIDrequest = false)
|
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))
|
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 = "";
|
var g_lastGtStatus = "";
|
||||||
|
@ -258,13 +258,53 @@ function gtChatSendStatus()
|
||||||
|
|
||||||
function gtChatSendSpots(spotsObject, detailsObject)
|
function gtChatSendSpots(spotsObject, detailsObject)
|
||||||
{
|
{
|
||||||
var msg = Object();
|
let msg = Object();
|
||||||
msg.type = "o";
|
msg.type = "o";
|
||||||
msg.uuid = g_appSettings.chatUUID;
|
msg.uuid = g_appSettings.chatUUID;
|
||||||
msg.o = spotsObject;
|
msg.o = spotsObject;
|
||||||
msg.d = detailsObject;
|
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)
|
function gtChatRemoveCall(jsmesg)
|
||||||
|
@ -369,7 +409,7 @@ function gtChatUpdateCall(jsmesg)
|
||||||
if (!(g_gtFlagPins[cid].call in g_gtCallsigns))
|
if (!(g_gtFlagPins[cid].call in g_gtCallsigns))
|
||||||
{
|
{
|
||||||
// Can happen when a user changes callsign
|
// 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;
|
g_gtCallsigns[g_gtFlagPins[cid].call][cid] = true;
|
||||||
|
|
||||||
|
@ -500,6 +540,8 @@ function gtChatNewList(jsmesg)
|
||||||
}
|
}
|
||||||
|
|
||||||
updateChatWindow();
|
updateChatWindow();
|
||||||
|
|
||||||
|
oamsBandActivityCheck();
|
||||||
}
|
}
|
||||||
|
|
||||||
function appendToHistory(cid, jsmesg)
|
function appendToHistory(cid, jsmesg)
|
||||||
|
|
|
@ -420,15 +420,7 @@ function fillObjectFromTemplate(template, input)
|
||||||
|
|
||||||
function uniqueArrayFromArray(input)
|
function uniqueArrayFromArray(input)
|
||||||
{
|
{
|
||||||
var unique = [];
|
return [...new Set(input)];
|
||||||
input.forEach((c) =>
|
|
||||||
{
|
|
||||||
if (!unique.includes(c))
|
|
||||||
{
|
|
||||||
unique.push(c);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return unique;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function processPotaSpots(buffer)
|
function processPotaSpots(buffer)
|
||||||
|
|
Ładowanie…
Reference in New Issue