kopia lustrzana https://gitlab.com/gridtracker.org/gridtracker
First pass
rodzic
a57dd0ba3f
commit
fdf3238074
|
@ -26,6 +26,7 @@ module.exports = {
|
||||||
semi: 0,
|
semi: 0,
|
||||||
"space-before-function-paren": 0,
|
"space-before-function-paren": 0,
|
||||||
"one-var": 0,
|
"one-var": 0,
|
||||||
|
no-trailing-spaces: ["error", { "skipBlankLines": true, "ignoreComments": true }],
|
||||||
|
|
||||||
/* ESLint checks we should consider fixing in the future */
|
/* ESLint checks we should consider fixing in the future */
|
||||||
eqeqeq: 0,
|
eqeqeq: 0,
|
||||||
|
|
|
@ -695,6 +695,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
<div id="radarButton" onclick="toggleNexrad()" class="iconButton" title="Toggle US Nexrad">
|
<div id="radarButton" onclick="toggleNexrad()" class="iconButton" title="Toggle US Nexrad">
|
||||||
<img src="./img/radar-button.png" class="buttonImg" />
|
<img src="./img/radar-button.png" class="buttonImg" />
|
||||||
</div>
|
</div>
|
||||||
|
<div id="potaButton" onClick="togglePota();" class="iconButton" title="Parks On The Air">
|
||||||
|
<img id="potaImg" src="./img/pota.png" class="buttonImg" />
|
||||||
|
</div>
|
||||||
<div id="gridOverlayButton" onclick="toggleAllGrids()" class="iconButton" title="Toggle All Grid Overlay">
|
<div id="gridOverlayButton" onclick="toggleAllGrids()" class="iconButton" title="Toggle All Grid Overlay">
|
||||||
<img src="./img/grid-overlay.png" class="buttonImg" />
|
<img src="./img/grid-overlay.png" class="buttonImg" />
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -47,6 +47,7 @@ var def_appSettings = {
|
||||||
gtPropFilter: "mixed",
|
gtPropFilter: "mixed",
|
||||||
gtMsgEnable: true,
|
gtMsgEnable: true,
|
||||||
gtShareEnable: true,
|
gtShareEnable: true,
|
||||||
|
gtSpotEnable: true,
|
||||||
heatEnabled: 0,
|
heatEnabled: 0,
|
||||||
loadAdifAtStartup: false,
|
loadAdifAtStartup: false,
|
||||||
lookupLoginCq: "",
|
lookupLoginCq: "",
|
||||||
|
@ -74,6 +75,7 @@ var def_appSettings = {
|
||||||
myRawFreq: "",
|
myRawFreq: "",
|
||||||
myRawGrid: "",
|
myRawGrid: "",
|
||||||
pathWidthWeight: 1.0,
|
pathWidthWeight: 1.0,
|
||||||
|
potaEnabled: 0,
|
||||||
pushPinMode: false,
|
pushPinMode: false,
|
||||||
qrzPathWidthWeight: 1.2,
|
qrzPathWidthWeight: 1.2,
|
||||||
sixWideMode: 0,
|
sixWideMode: 0,
|
||||||
|
@ -90,8 +92,7 @@ var def_appSettings = {
|
||||||
workingCallsignEnable: false,
|
workingCallsignEnable: false,
|
||||||
workingCallsigns: {},
|
workingCallsigns: {},
|
||||||
workingDateEnable: false,
|
workingDateEnable: false,
|
||||||
workingDate: 0,
|
workingDate: 0
|
||||||
gtSpotEnable: true
|
|
||||||
};
|
};
|
||||||
|
|
||||||
var def_mapSettings = {
|
var def_mapSettings = {
|
||||||
|
@ -210,32 +211,38 @@ var def_N1MMSettings = {
|
||||||
port: 2333,
|
port: 2333,
|
||||||
ip: "127.0.0.1"
|
ip: "127.0.0.1"
|
||||||
};
|
};
|
||||||
|
|
||||||
var def_log4OMSettings = {
|
var def_log4OMSettings = {
|
||||||
enable: false,
|
enable: false,
|
||||||
port: 2236,
|
port: 2236,
|
||||||
ip: "127.0.0.1"
|
ip: "127.0.0.1"
|
||||||
};
|
};
|
||||||
|
|
||||||
var def_dxkLogSettings = {
|
var def_dxkLogSettings = {
|
||||||
enable: false,
|
enable: false,
|
||||||
port: 52000,
|
port: 52000,
|
||||||
ip: "127.0.0.1"
|
ip: "127.0.0.1"
|
||||||
};
|
};
|
||||||
|
|
||||||
var def_HRDLogbookLogSettings = {
|
var def_HRDLogbookLogSettings = {
|
||||||
enable: false,
|
enable: false,
|
||||||
port: 7826,
|
port: 7826,
|
||||||
ip: "127.0.0.1"
|
ip: "127.0.0.1"
|
||||||
};
|
};
|
||||||
|
|
||||||
var def_acLogSettings = {
|
var def_acLogSettings = {
|
||||||
enable: false,
|
enable: false,
|
||||||
port: 1100,
|
port: 1100,
|
||||||
ip: "127.0.0.1"
|
ip: "127.0.0.1"
|
||||||
};
|
};
|
||||||
|
|
||||||
var def_trustedQslSettings = {
|
var def_trustedQslSettings = {
|
||||||
stationFile: "",
|
stationFile: "",
|
||||||
stationFileValid: false,
|
stationFileValid: false,
|
||||||
binaryFile: "",
|
binaryFile: "",
|
||||||
binaryFileValid: false
|
binaryFileValid: false
|
||||||
};
|
};
|
||||||
|
|
||||||
var def_callsignLookups = {
|
var def_callsignLookups = {
|
||||||
lotwUseEnable: true,
|
lotwUseEnable: true,
|
||||||
lotwWeeklyEnable: true,
|
lotwWeeklyEnable: true,
|
||||||
|
|
|
@ -171,6 +171,7 @@ var g_flightDuration = 30;
|
||||||
|
|
||||||
var g_crScript = g_appSettings.crScript;
|
var g_crScript = g_appSettings.crScript;
|
||||||
var g_spotsEnabled = g_appSettings.spotsEnabled;
|
var g_spotsEnabled = g_appSettings.spotsEnabled;
|
||||||
|
var g_potaEnabled = g_appSettings.potaEnabled;
|
||||||
var g_heatEnabled = g_appSettings.heatEnabled;
|
var g_heatEnabled = g_appSettings.heatEnabled;
|
||||||
|
|
||||||
var g_myLat = g_mapSettings.latitude;
|
var g_myLat = g_mapSettings.latitude;
|
||||||
|
@ -796,7 +797,8 @@ function toggleOffline()
|
||||||
buttonStrikesDiv.style.display = "inline-block";
|
buttonStrikesDiv.style.display = "inline-block";
|
||||||
buttonPSKSpotsBoxDiv.style.display = "inline-block";
|
buttonPSKSpotsBoxDiv.style.display = "inline-block";
|
||||||
donateButton.style.display = "inline-block";
|
donateButton.style.display = "inline-block";
|
||||||
|
potaButton.style.display = "inline-block";
|
||||||
|
|
||||||
if (g_appSettings.gtShareEnable == true)
|
if (g_appSettings.gtShareEnable == true)
|
||||||
{
|
{
|
||||||
gtFlagButton.style.display = "inline-block";
|
gtFlagButton.style.display = "inline-block";
|
||||||
|
@ -840,6 +842,7 @@ function toggleOffline()
|
||||||
gtShareButton.style.display = "none";
|
gtShareButton.style.display = "none";
|
||||||
msgButton.style.display = "none";
|
msgButton.style.display = "none";
|
||||||
donateButton.style.display = "none";
|
donateButton.style.display = "none";
|
||||||
|
potaButton.style.display = "none";
|
||||||
buttonStrikesDiv.style.display = "none";
|
buttonStrikesDiv.style.display = "none";
|
||||||
buttonPSKSpotsBoxDiv.style.display = "none";
|
buttonPSKSpotsBoxDiv.style.display = "none";
|
||||||
setGtShareButtons();
|
setGtShareButtons();
|
||||||
|
@ -6906,7 +6909,7 @@ function handleWsjtxDecode(newMessage)
|
||||||
msgDEcallsign = decodeWords[1];
|
msgDEcallsign = decodeWords[1];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (g_callRosterWindowHandle.window.g_rosterSettings.wanted.huntRR73 && decodeWords[2] == "RR73")
|
if (decodeWords[2] == "RR73" && g_callRosterWindowHandle.window.g_rosterSettings.wanted.huntRR73)
|
||||||
{
|
{
|
||||||
CQ = true;
|
CQ = true;
|
||||||
msgDXcallsign = "RR73";
|
msgDXcallsign = "RR73";
|
||||||
|
@ -7111,9 +7114,25 @@ function handleWsjtxDecode(newMessage)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (g_potaSpots && g_potaSpots.some(item => item.activator === callsign.DEcall))
|
if (g_potaEnabled == 1 && (callsign.DEcall in g_pota.spots || callsign.DEcall in g_pota.schedule))
|
||||||
{
|
{
|
||||||
callsign.pota = g_potaSpots.filter(item => item.activator === callsign.DEcall)[0];
|
let now = Date.now();
|
||||||
|
callsign.pota = [];
|
||||||
|
if (callsign.DEcall in g_pota.spots)
|
||||||
|
{
|
||||||
|
// copies the entire array
|
||||||
|
callsign.pota = g_pota.spots[callsign.DEcall];
|
||||||
|
}
|
||||||
|
if (callsign.DEcall in g_pota.schedule)
|
||||||
|
{
|
||||||
|
for (let i in g_pota.schedule[callsign.DEcall])
|
||||||
|
{
|
||||||
|
if (now < g_pota.schedule[callsign.DEcall][i].end && now >= g_pota.schedule[callsign.DEcall][i].start && !callsign.pota.includes(g_pota.schedule[callsign.DEcall][i].id))
|
||||||
|
{
|
||||||
|
callsign.pota.push(g_pota.schedule[callsign.DEcall][i].id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (newMessage.NW)
|
if (newMessage.NW)
|
||||||
|
@ -12851,7 +12870,7 @@ function loadMapSettings()
|
||||||
|
|
||||||
trafficDecode.checked = g_mapSettings.trafficDecode;
|
trafficDecode.checked = g_mapSettings.trafficDecode;
|
||||||
|
|
||||||
pskSpotsImg.style.filter = g_spotsEnabled == 1 ? "" : "grayscale(1);";
|
pskSpotsImg.style.filter = g_spotsEnabled == 1 ? "" : "grayscale(1)";
|
||||||
|
|
||||||
g_bandToColor = JSON.parse(JSON.stringify(g_pskColors));
|
g_bandToColor = JSON.parse(JSON.stringify(g_pskColors));
|
||||||
|
|
||||||
|
@ -13355,6 +13374,7 @@ function loadMsgSettings()
|
||||||
|
|
||||||
pskSpotsImg.style.filter = g_spotsEnabled == 1 ? "" : "grayscale(1)";
|
pskSpotsImg.style.filter = g_spotsEnabled == 1 ? "" : "grayscale(1)";
|
||||||
|
|
||||||
|
|
||||||
for (var key in g_msgSettings)
|
for (var key in g_msgSettings)
|
||||||
{
|
{
|
||||||
document.getElementById(key).value = g_msgSettings[key];
|
document.getElementById(key).value = g_msgSettings[key];
|
||||||
|
@ -13649,8 +13669,7 @@ var g_startupTable = [
|
||||||
[startupEventsAndTimers, "Set Events and Timers"],
|
[startupEventsAndTimers, "Set Events and Timers"],
|
||||||
[registerHotKeys, "Registered Hotkeys"],
|
[registerHotKeys, "Registered Hotkeys"],
|
||||||
[gtChatSystemInit, "Chat System Initialized"],
|
[gtChatSystemInit, "Chat System Initialized"],
|
||||||
[getPotaPlaces, "Loading POTA Database"],
|
[initPota, "POTA Initialized"],
|
||||||
[getPotaSpots, "Starting POTA Spots Pump"],
|
|
||||||
[downloadAcknowledgements, "Contributor Acknowledgements Loaded"],
|
[downloadAcknowledgements, "Contributor Acknowledgements Loaded"],
|
||||||
[postInit, "Finalizing System"]
|
[postInit, "Finalizing System"]
|
||||||
];
|
];
|
||||||
|
|
|
@ -2,14 +2,49 @@
|
||||||
// All rights reserved.
|
// All rights reserved.
|
||||||
// See LICENSE for more information.
|
// See LICENSE for more information.
|
||||||
|
|
||||||
var g_potaPlaces = null;
|
var g_pota = {
|
||||||
var g_potaSpots = null;
|
places: {},
|
||||||
|
placesTimeout: null,
|
||||||
|
schedule: {},
|
||||||
|
scheduleTimeout: null,
|
||||||
|
spots: {},
|
||||||
|
spotsTimeout: null
|
||||||
|
};
|
||||||
|
|
||||||
function ingestPotaPlaces(buffer)
|
function initPota()
|
||||||
|
{
|
||||||
|
potaImg.style.filter = g_potaEnabled == 1 ? "" : "grayscale(1)";
|
||||||
|
|
||||||
|
getPotaPlaces();
|
||||||
|
getPotaSchedule();
|
||||||
|
getPotaSpots();
|
||||||
|
}
|
||||||
|
|
||||||
|
function togglePota()
|
||||||
|
{
|
||||||
|
g_potaEnabled ^= 1;
|
||||||
|
g_appSettings.potaEnabled = g_potaEnabled;
|
||||||
|
potaImg.style.filter = g_potaEnabled == 1 ? "" : "grayscale(1)";
|
||||||
|
|
||||||
|
saveAppSettings();
|
||||||
|
|
||||||
|
if (g_potaEnabled == 1)
|
||||||
|
{
|
||||||
|
// Only get if empty, let the timer do its job
|
||||||
|
if (Object.keys(g_pota.places).length == 0)
|
||||||
|
{
|
||||||
|
getPotaPlaces();
|
||||||
|
}
|
||||||
|
getPotaSchedule();
|
||||||
|
getPotaSpots();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function processPotaPlaces(buffer)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
g_potaPlaces = JSON.parse(buffer);
|
g_pota.places = JSON.parse(buffer);
|
||||||
}
|
}
|
||||||
catch (e)
|
catch (e)
|
||||||
{
|
{
|
||||||
|
@ -19,25 +54,36 @@ function ingestPotaPlaces(buffer)
|
||||||
|
|
||||||
function getPotaPlaces()
|
function getPotaPlaces()
|
||||||
{
|
{
|
||||||
if (g_mapSettings.offlineMode == false)
|
if (g_pota.placesTimeout)
|
||||||
|
{
|
||||||
|
clearTimeout(g_pota.placesTimeout);
|
||||||
|
g_pota.spotsTimeout = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (g_mapSettings.offlineMode == false && g_potaEnabled == 1)
|
||||||
{
|
{
|
||||||
getBuffer(
|
getBuffer(
|
||||||
"https://storage.googleapis.com/gt_app/pota.json",
|
"https://storage.googleapis.com/gt_app/pota.json",
|
||||||
ingestPotaPlaces,
|
processPotaPlaces,
|
||||||
null,
|
null,
|
||||||
"https",
|
"https",
|
||||||
443
|
443
|
||||||
);
|
);
|
||||||
|
|
||||||
setTimeout(getPotaPlaces, 86400000)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
g_pota.placesTimeout = setTimeout(getPotaPlaces, 86400000)
|
||||||
}
|
}
|
||||||
|
|
||||||
function ingestPotaSpots(buffer)
|
function processPotaSpots(buffer)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
g_potaSpots = JSON.parse(buffer);
|
let spots = JSON.parse(buffer);
|
||||||
|
g_pota.spots = {};
|
||||||
|
for (let spot in spots)
|
||||||
|
{
|
||||||
|
(g_pota.spots[spots[spot].activator] = g_pota.spots[spots[spot].activator] || []).push(spots[spot].reference);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (e)
|
catch (e)
|
||||||
{
|
{
|
||||||
|
@ -47,21 +93,75 @@ function ingestPotaSpots(buffer)
|
||||||
|
|
||||||
function getPotaSpots()
|
function getPotaSpots()
|
||||||
{
|
{
|
||||||
if (g_mapSettings.offlineMode == false && g_spotsEnabled == 1)
|
if (g_pota.spotsTimeout)
|
||||||
|
{
|
||||||
|
clearTimeout(g_pota.spotsTimeout);
|
||||||
|
g_pota.spotsTimeout = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (g_mapSettings.offlineMode == false && g_potaEnabled == 1)
|
||||||
{
|
{
|
||||||
getBuffer(
|
getBuffer(
|
||||||
"https://api.pota.app/spot/activator",
|
"https://api.pota.app/spot/activator",
|
||||||
ingestPotaSpots,
|
processPotaSpots,
|
||||||
null,
|
null,
|
||||||
"https",
|
"https",
|
||||||
443
|
443
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
g_pota.spotsTimeout = setTimeout(getPotaSpots, 300000);
|
||||||
|
}
|
||||||
|
|
||||||
setTimeout(getPotaSpots, 300000);
|
|
||||||
|
function processPotaSchedule(buffer)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
let schedules = JSON.parse(buffer);
|
||||||
|
g_pota.schedule = {};
|
||||||
|
for (let i in schedules)
|
||||||
|
{
|
||||||
|
let newObj = {};
|
||||||
|
newObj.id = schedules[i].reference;
|
||||||
|
newObj.start = Date.parse(schedules[i].startDate + "T" + schedules[i].startTime);
|
||||||
|
newObj.end = Date.parse(schedules[i].endDate + "T" + schedules[i].endTime);
|
||||||
|
|
||||||
|
if (Date.now() < newObj.end)
|
||||||
|
{
|
||||||
|
(g_pota.schedule[schedules[i].activator] = g_pota.schedule[schedules[i].activator] || []).push(newObj);
|
||||||
|
}
|
||||||
|
// else it is expired and no longer relevant
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (e)
|
||||||
|
{
|
||||||
|
// can't write, somethings broke
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function g_sendPotaSpot()
|
function getPotaSchedule()
|
||||||
|
{
|
||||||
|
if (g_pota.scheduleTimeout)
|
||||||
|
{
|
||||||
|
clearTimeout(g_pota.scheduleTimeout);
|
||||||
|
g_pota.scheduleTimeout = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (g_mapSettings.offlineMode == false && g_potaEnabled == 1)
|
||||||
|
{
|
||||||
|
getBuffer(
|
||||||
|
"https://api.pota.app/activation",
|
||||||
|
processPotaSchedule,
|
||||||
|
null,
|
||||||
|
"https",
|
||||||
|
443
|
||||||
|
);
|
||||||
|
}
|
||||||
|
g_pota.scheduleTimeout = setTimeout(getPotaSchedule, 900000);
|
||||||
|
}
|
||||||
|
|
||||||
|
function sendPotaSpot()
|
||||||
{
|
{
|
||||||
// if Pota spotting enabled, and we have enough info, send a spot to Pota
|
// if Pota spotting enabled, and we have enough info, send a spot to Pota
|
||||||
}
|
}
|
||||||
|
|
|
@ -492,7 +492,7 @@ function processRosterHunting(callRoster, rosterSettings, awardTracker)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Hunting for POTAs
|
// Hunting for POTAs
|
||||||
if (huntPOTA.checked == true && window.opener.g_mapSettings.offlineMode == false && callObj.pota != null)
|
if (huntPOTA.checked == true && callObj.pota != null)
|
||||||
{
|
{
|
||||||
let huntTotal = callObj.pota.length;
|
let huntTotal = callObj.pota.length;
|
||||||
let huntFound = 0, layeredFound = 0, workedFound = 0, layeredWorkedFound = 0;
|
let huntFound = 0, layeredFound = 0, workedFound = 0, layeredWorkedFound = 0;
|
||||||
|
|
Ładowanie…
Reference in New Issue