Merge branch 'lotw-diff-fetch' into 'master'

Lotw diff fetch

Closes #101

See merge request gridtracker.org/gridtracker!125
rich-presence
Matthew Chambers 2021-06-19 20:04:52 +00:00
commit eb2d6dacf6
3 zmienionych plików z 441 dodań i 284 usunięć

Wyświetl plik

@ -86,6 +86,36 @@ function onAdiLoadComplete(adiBuffer, saveAdifFile, adifFileName, newFile)
{
let finalMode = "";
let appLoTW_RXQSO = findAdiField(
activeAdifArray[x],
"APP_LoTW_RXQSO"
);
if (appLoTW_RXQSO != "")
{
let dRXQSO = Date.parse(appLoTW_RXQSO);
let dLastLOTW_QSO = Date.parse(g_adifLogSettings.lastFetch.lotw_qso);
if ((isNaN(dRXQSO) == false) && (isNaN(dLastLOTW_QSO) == false) && (dRXQSO > dLastLOTW_QSO))
{
g_adifLogSettings.lastFetch.lotw_qso = appLoTW_RXQSO;
}
}
let appLoTW_RXQSL = findAdiField(
activeAdifArray[x],
"APP_LoTW_RXQSL"
);
if (appLoTW_RXQSL != "")
{
let dRXQSL = Date.parse(appLoTW_RXQSL);
let dLastLOTW_QSL = Date.parse(g_adifLogSettings.lastFetch.lotw_qsl);
if ((isNaN(dRXQSL) == false) && (isNaN(dLastLOTW_QSL) == false) && (dRXQSL > dLastLOTW_QSL))
{
g_adifLogSettings.lastFetch.lotw_qsl = appLoTW_RXQSL;
}
}
if (activeAdifArray[x].length > 3)
{
if (activeAdifLogMode)
@ -572,6 +602,20 @@ function lotwCallback(buffer, flag)
var shouldAppend = false;
g_fromDirectCallNoFileDialog = true;
// Extract header showing last fetched date from call
var lotwQSHeader = rawAdiBuffer.match(/^<APP_LoTW_LAST(QSL|QSORX):\d+>(\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2}:\d{2})/m);
if (lotwQSHeader !== null)
{
if (lotwQSHeader[1].toUpperCase() == "QSORX")
{
g_adifLogSettings.lastFetch.lotw_qso = lotwQSHeader[2]
}
else if (lotwQSHeader[1].toUpperCase() == "QSL")
{
g_adifLogSettings.lastFetch.lotw_qsl = lotwQSHeader[2];
}
}
rawAdiBuffer = cleanAndPrepADIF(
"lotw.adif",
rawAdiBuffer,
@ -623,29 +667,86 @@ var g_isGettingLOTW = false;
function grabLOtWLog(test)
{
if (g_isGettingLOTW == false)
{
var lastQSLDateString =
"&qso_qsorxsince=1945-01-01&qso_qslsince=1945-01-01";
if (test == true)
{
lotwTestResult.innerHTML = "Testing";
lastQSLDateString = "&qso_qsosince=2100-01-01";
}
var lastQSLDateString = "";
if (test == true && g_isGettingLOTW == false)
{
lotwTestResult.innerHTML = "Testing";
lastQSLDateString = "&qso_qsosince=2100-01-01";
// Fetch Test Results
getABuffer(
"https://lotw.arrl.org/lotwuser/lotwreport.adi?login=" +
lotwLogin.value +
"&password=" +
encodeURIComponent(lotwPassword.value) +
"&qso_query=1&qso_qsl=no&qso_qsldetail=yes&qso_withown=yes" +
lastQSLDateString,
lotwLogin.value +
"&password=" +
encodeURIComponent(lotwPassword.value) +
"&qso_query=1&qso_qsl=no&qso_qsldetail=yes&qso_withown=yes" +
lastQSLDateString,
lotwCallback,
test,
"https",
443,
lotwLogImg,
"g_isGettingLOTW",
150000
);
}
if (test == false)
{
setTimeout(grabLoTWQSO, 500);
setTimeout(grabLoTWQSL, 10000);
}
}
function grabLoTWQSO()
{
var dLoTWQSO = Date.parse(dateToISO8601(g_adifLogSettings.lastFetch.lotw_qso, "Z"));
var tmpDate = ((new Date().getTime()) - 300);
if ((g_isGettingLOTW == false) && ((isNaN(dLoTWQSO) == false) && (dLoTWQSO < tmpDate)))
{
// Fetch QSOs
lastQSLDateString = "&qso_qsorxsince=" + g_adifLogSettings.lastFetch.lotw_qso;
getABuffer(
"https://lotw.arrl.org/lotwuser/lotwreport.adi?login=" +
lotwLogin.value +
"&password=" +
encodeURIComponent(lotwPassword.value) +
"&qso_query=1&qso_qsl=no&qso_qsldetail=yes&qso_withown=yes" +
lastQSLDateString,
lotwCallback,
false,
"https",
443,
lotwLogImg,
"g_isGettingLOTW",
120000
);
}
}
function grabLoTWQSL()
{
var dLoTWQSL = Date.parse(dateToISO8601(g_adifLogSettings.lastFetch.lotw_qsl, "Z"));
var tmpDate = ((new Date().getTime()) - 300);
if ((g_isGettingLOTW == false) && ((isNaN(dLoTWQSL) == false) && (dLoTWQSL < tmpDate)))
{
lastQSLDateString = "&qso_qslsince=" + g_adifLogSettings.lastFetch.lotw_qsl;
getABuffer(
"https://lotw.arrl.org/lotwuser/lotwreport.adi?login=" +
lotwLogin.value +
"&password=" +
encodeURIComponent(lotwPassword.value) +
"&qso_query=1&qso_qsl=yes&qso_qsldetail=yes&qso_withown=yes" +
lastQSLDateString,
lotwCallback,
false,
"https",
443,
lotwLogImg,
"g_isGettingLOTW",
120000
);
}
@ -1005,6 +1106,22 @@ function loadGtQSOLogFile()
}
}
var lotwLogLoaded = false;
function loadLoTWLogFile()
{
var fs = require("fs");
if (fs.existsSync(g_LoTWLogFile))
{
var rawAdiBuffer = fs.readFileSync(g_LoTWLogFile);
g_fromDirectCallNoFileDialog = true;
onAdiLoadComplete(rawAdiBuffer, false);
lotwLogLoaded = true;
}
}
function loadWsjtLogFile()
{
var fs = require("fs");
@ -1297,8 +1414,11 @@ function startupAdifLoadCheck()
{
if (g_appSettings.gtFlagImgSrc == 1) showGtFlags();
// Commented out to stop execution on startup
// if (loadLOTWCheckBox.checked == true) grabLOtWLog(false);
if (loadLOTWCheckBox.checked == true)
{
loadLoTWLogFile();
grabLOtWLog(false);
}
if (loadQRZCheckBox.checked == true) grabQrzComLog(false);
@ -1367,11 +1487,6 @@ function getABuffer(
})
.on("end", function ()
{
if (typeof callback === "function")
{
// Call it, since we have confirmed it is callable
callback(fileBuffer, flag, cookies);
}
if (typeof stringOfFlag != "undefined")
{
window[stringOfFlag] = false;
@ -1381,6 +1496,11 @@ function getABuffer(
imgToGray.parentNode.style.background = "";
imgToGray.style.webkitFilter = "";
}
if (typeof callback === "function")
{
// Call it, since we have confirmed it is callable
callback(fileBuffer, flag, cookies);
}
})
.on("error", function ()
{

Wyświetl plik

@ -1,261 +1,265 @@
var validSettings = [
"HRDLogbookLogSettings",
"N1MMSettings",
"acLogSettings",
"adifLogSettings",
"alertSettings",
"appSettings",
"audioSettings",
"awardTracker",
"bandActivity",
"blockedCQ",
"blockedCalls",
"blockedDxcc",
"callsignLookups",
"classicAlerts",
"classicAlertsVersion",
"currentVersion",
"dxkLogSettings",
"log4OMSettings",
"mapMemory",
"mapSettings",
"msgSettings",
"receptionSettings",
"rosterSettings",
"savedAlerts",
"speechSettings",
"startupLogs",
"trustedQslSettings",
"screenSettings",
"legendColors"
];
var def_appSettings = {
alertMute: 0,
rosterAlwaysOnTop: false,
centerGridsquare: "",
chatUUID: "",
crScript: 0,
distanceUnit: "MI",
earthImgSrc: 0,
gridViewMode: 3,
gridsquareDecayTime: 300,
gtAgree: "",
gtBandFilter: "",
gtFlagImgSrc: 0,
gtModeFilter: "",
gtPropFilter: "mixed",
gtMsgEnable: true,
gtShareEnable: true,
heatEnabled: 0,
loadAdifAtStartup: false,
lookupLoginCq: "",
lookupLoginQrz: "",
lookupLoginQth: "",
lookupOnTx: false,
lookupCloseLog: false,
lookupMerge: true,
lookupMissingGrid: false,
lookupPasswordCq: "",
lookupPasswordQrz: "",
lookupPasswordQth: "",
lookupService: "CALLOOK",
lookupCallookPreferred: false,
moonPath: 0,
moonTrack: 0,
mouseTrack: 0,
multicast: false,
myBand: "OOB",
myDEGrid: "",
myDEcall: "NOCALL",
myMode: "",
myRawCall: "NOCALL",
myRawFreq: "",
myRawGrid: "",
pathWidthWeight: 1.0,
pushPinMode: false,
qrzPathWidthWeight: 1.2,
sixWideMode: 0,
savedAppData: null,
soundCard: "default",
spotsEnabled: 0,
stopAskingVersion: false,
useLocalTime: 0,
wsjtForwardUdpEnable: false,
wsjtForwardUdpIp: "127.0.0.1",
wsjtForwardUdpPort: 2238,
wsjtIP: "",
wsjtUdpPort: 0,
workingCallsignEnable: false,
workingCallsigns: {},
workingDateEnable: false,
workingDate: 0,
gtSpotEnable: true
};
var def_mapSettings = {
animate: true,
animateSpeed: 4,
CQhilite: true,
fitQRZ: false,
focusRig: true,
gridAlpha: 136,
haltAllOnTx: true,
legend: true,
longitude: 0.0,
latitude: 0.0,
loudness: 1,
mapIndex: 19,
mergeOverlay: false,
mouseOver: true,
nightLoudness: 0.8,
nightMapEnable: false,
nightMapIndex: 20,
nightPathColor: 361,
nightQrzPathColor: 1,
offlineMode: false,
pathColor: 0,
qrzDxccFallback: false,
qrzPathColor: 1,
rosterTime: 120,
shadow: 0.1,
splitQSL: true,
strikes: false,
strikesAlert: 2,
strikesGlobal: false,
strikesNotify: false,
trafficDecode: true,
usNexrad: false,
zoom: 4,
mapTrans: 0.5
};
var def_adifLogSettings = {
menu: {
buttonAdifCheckBox: false,
buttonClubCheckBox: false,
buttonLOTWCheckBox: false,
buttonQRZCheckBox: false,
buttonPsk24CheckBox: true
},
startup: {
loadAdifCheckBox: false,
loadPsk24CheckBox: false,
loadQRZCheckBox: false,
loadLOTWCheckBox: false,
loadClubCheckBox: false,
loadGTCheckBox: true
},
qsolog: {
logQRZqsoCheckBox: false,
logGTqsoCheckBox: true,
logLOTWqsoCheckBox: false,
logHRDLOGqsoCheckBox: false,
logClubqsoCheckBox: false,
logCloudlogQSOCheckBox: false,
logeQSLQSOCheckBox: false
},
nickname: {
nicknameeQSLCheckBox: false
},
text: {
lotwLogin: "",
clubCall: "",
clubEmail: "",
clubPassword: "",
lotwPassword: "",
lotwTrusted: "",
lotwStation: "",
qrzApiKey: "",
HRDLOGCallsign: "",
HRDLOGUploadCode: "",
CloudlogURL: "http://127.0.0.1/index.php/api/qso",
CloudlogAPI: "",
eQSLUser: "",
eQSLPassword: "",
eQSLNickname: ""
},
downloads: {}
};
var def_msgSettings = {
msgAlertSelect: 1,
msgAlertWord: "New chat message",
msgAlertMedia: "none",
msgFrequencySelect: 0,
msgActionSelect: 1,
msgAwaySelect: 0,
msgAwayText: "I am away from the shack at the moment"
};
var def_receptionSettings = {
lastSequenceNumber: "0", // Treat as a string, it's friggin big
lastDownloadTimeSec: 0,
viewHistoryTimeSec: 900,
viewPaths: false,
pathColor: -1,
pathNightColor: 361,
spotWidth: 0.8,
mergeSpots: true
};
var def_N1MMSettings = {
enable: false,
port: 2333,
ip: "127.0.0.1"
};
var def_log4OMSettings = {
enable: false,
port: 2236,
ip: "127.0.0.1"
};
var def_dxkLogSettings = {
enable: false,
port: 52000,
ip: "127.0.0.1"
};
var def_HRDLogbookLogSettings = {
enable: false,
port: 7826,
ip: "127.0.0.1"
};
var def_acLogSettings = {
enable: false,
port: 1100,
ip: "127.0.0.1"
};
var def_trustedQslSettings = {
stationFile: "",
stationFileValid: false,
binaryFile: "",
binaryFileValid: false
};
var def_callsignLookups = {
lotwUseEnable: true,
lotwWeeklyEnable: true,
lotwLastUpdate: 0,
eqslUseEnable: true,
eqslWeeklyEnable: true,
eqslLastUpdate: 0,
ulsUseEnable: true,
ulsWeeklyEnable: true,
ulsLastUpdate: 0,
oqrsUseEnable: false,
oqrsWeeklyEnable: false,
oqrsLastUpdate: 0
};
var def_bandActivity = {
lastUpdate: {},
lines: {}
};
var def_legendColors = {
QSO: "#EEEE00",
QSL: "#EE0000",
QSX: "#1111EE",
CQ: "#00FF00",
CQDX: "#00FFFF",
QRZ: "#FFFF00",
QTH: "#FFA600"
};
var validSettings = [
"HRDLogbookLogSettings",
"N1MMSettings",
"acLogSettings",
"adifLogSettings",
"alertSettings",
"appSettings",
"audioSettings",
"awardTracker",
"bandActivity",
"blockedCQ",
"blockedCalls",
"blockedDxcc",
"callsignLookups",
"classicAlerts",
"classicAlertsVersion",
"currentVersion",
"dxkLogSettings",
"log4OMSettings",
"mapMemory",
"mapSettings",
"msgSettings",
"receptionSettings",
"rosterSettings",
"savedAlerts",
"speechSettings",
"startupLogs",
"trustedQslSettings",
"screenSettings",
"legendColors"
];
var def_appSettings = {
alertMute: 0,
rosterAlwaysOnTop: false,
centerGridsquare: "",
chatUUID: "",
crScript: 0,
distanceUnit: "MI",
earthImgSrc: 0,
gridViewMode: 3,
gridsquareDecayTime: 300,
gtAgree: "",
gtBandFilter: "",
gtFlagImgSrc: 0,
gtModeFilter: "",
gtPropFilter: "mixed",
gtMsgEnable: true,
gtShareEnable: true,
heatEnabled: 0,
loadAdifAtStartup: false,
lookupLoginCq: "",
lookupLoginQrz: "",
lookupLoginQth: "",
lookupOnTx: false,
lookupCloseLog: false,
lookupMerge: true,
lookupMissingGrid: false,
lookupPasswordCq: "",
lookupPasswordQrz: "",
lookupPasswordQth: "",
lookupService: "CALLOOK",
lookupCallookPreferred: false,
moonPath: 0,
moonTrack: 0,
mouseTrack: 0,
multicast: false,
myBand: "OOB",
myDEGrid: "",
myDEcall: "NOCALL",
myMode: "",
myRawCall: "NOCALL",
myRawFreq: "",
myRawGrid: "",
pathWidthWeight: 1.0,
pushPinMode: false,
qrzPathWidthWeight: 1.2,
sixWideMode: 0,
savedAppData: null,
soundCard: "default",
spotsEnabled: 0,
stopAskingVersion: false,
useLocalTime: 0,
wsjtForwardUdpEnable: false,
wsjtForwardUdpIp: "127.0.0.1",
wsjtForwardUdpPort: 2238,
wsjtIP: "",
wsjtUdpPort: 0,
workingCallsignEnable: false,
workingCallsigns: {},
workingDateEnable: false,
workingDate: 0,
gtSpotEnable: true
};
var def_mapSettings = {
animate: true,
animateSpeed: 4,
CQhilite: true,
fitQRZ: false,
focusRig: true,
gridAlpha: 136,
haltAllOnTx: true,
legend: true,
longitude: 0.0,
latitude: 0.0,
loudness: 1,
mapIndex: 19,
mergeOverlay: false,
mouseOver: true,
nightLoudness: 0.8,
nightMapEnable: false,
nightMapIndex: 20,
nightPathColor: 361,
nightQrzPathColor: 1,
offlineMode: false,
pathColor: 0,
qrzDxccFallback: false,
qrzPathColor: 1,
rosterTime: 120,
shadow: 0.1,
splitQSL: true,
strikes: false,
strikesAlert: 2,
strikesGlobal: false,
strikesNotify: false,
trafficDecode: true,
usNexrad: false,
zoom: 4,
mapTrans: 0.5
};
var def_adifLogSettings = {
menu: {
buttonAdifCheckBox: false,
buttonClubCheckBox: false,
buttonLOTWCheckBox: false,
buttonQRZCheckBox: false,
buttonPsk24CheckBox: true
},
startup: {
loadAdifCheckBox: false,
loadPsk24CheckBox: false,
loadQRZCheckBox: false,
loadLOTWCheckBox: false,
loadClubCheckBox: false,
loadGTCheckBox: true
},
qsolog: {
logQRZqsoCheckBox: false,
logGTqsoCheckBox: true,
logLOTWqsoCheckBox: false,
logHRDLOGqsoCheckBox: false,
logClubqsoCheckBox: false,
logCloudlogQSOCheckBox: false,
logeQSLQSOCheckBox: false
},
nickname: {
nicknameeQSLCheckBox: false
},
text: {
lotwLogin: "",
clubCall: "",
clubEmail: "",
clubPassword: "",
lotwPassword: "",
lotwTrusted: "",
lotwStation: "",
qrzApiKey: "",
HRDLOGCallsign: "",
HRDLOGUploadCode: "",
CloudlogURL: "http://127.0.0.1/index.php/api/qso",
CloudlogAPI: "",
eQSLUser: "",
eQSLPassword: "",
eQSLNickname: ""
},
downloads: {},
lastFetch: {
lotw_qso: "1970-01-01",
lotw_qsl: "1970-01-01"
}
};
var def_msgSettings = {
msgAlertSelect: 1,
msgAlertWord: "New chat message",
msgAlertMedia: "none",
msgFrequencySelect: 0,
msgActionSelect: 1,
msgAwaySelect: 0,
msgAwayText: "I am away from the shack at the moment"
};
var def_receptionSettings = {
lastSequenceNumber: "0", // Treat as a string, it's friggin big
lastDownloadTimeSec: 0,
viewHistoryTimeSec: 900,
viewPaths: false,
pathColor: -1,
pathNightColor: 361,
spotWidth: 0.8,
mergeSpots: true
};
var def_N1MMSettings = {
enable: false,
port: 2333,
ip: "127.0.0.1"
};
var def_log4OMSettings = {
enable: false,
port: 2236,
ip: "127.0.0.1"
};
var def_dxkLogSettings = {
enable: false,
port: 52000,
ip: "127.0.0.1"
};
var def_HRDLogbookLogSettings = {
enable: false,
port: 7826,
ip: "127.0.0.1"
};
var def_acLogSettings = {
enable: false,
port: 1100,
ip: "127.0.0.1"
};
var def_trustedQslSettings = {
stationFile: "",
stationFileValid: false,
binaryFile: "",
binaryFileValid: false
};
var def_callsignLookups = {
lotwUseEnable: true,
lotwWeeklyEnable: true,
lotwLastUpdate: 0,
eqslUseEnable: true,
eqslWeeklyEnable: true,
eqslLastUpdate: 0,
ulsUseEnable: true,
ulsWeeklyEnable: true,
ulsLastUpdate: 0,
oqrsUseEnable: false,
oqrsWeeklyEnable: false,
oqrsLastUpdate: 0
};
var def_bandActivity = {
lastUpdate: {},
lines: {}
};
var def_legendColors = {
QSO: "#EEEE00",
QSL: "#EE0000",
QSX: "#1111EE",
CQ: "#00FF00",
CQDX: "#00FFFF",
QRZ: "#FFFF00",
QTH: "#FFA600"
};

Wyświetl plik

@ -237,6 +237,11 @@ function saveLegendColors()
localStorage.legendColors = JSON.stringify(g_legendColors);
}
function saveAdifSettings()
{
localStorage.adifLogSettings = JSON.stringify(g_adifLogSettings);
}
function saveStartupLogs()
{
localStorage.startupLogs = JSON.stringify(g_startupLogs);
@ -306,6 +311,7 @@ function saveAndCloseApp()
}
saveAppSettings();
saveAdifSettings();
saveMapSettings();
saveLegendColors();
@ -504,6 +510,7 @@ var g_NWappData = "";
var g_screenshotDir = "";
var g_scriptDir = "";
var g_qsoLogFile = "";
var g_LoTWLogFile = "";
var g_userMediaDir = "";
var g_gtMediaDir = path.resolve("./media");
var g_localeString = navigator.language;
@ -903,6 +910,28 @@ function userTimeString(Msec)
return dateToString(dateTime);
}
function dateToISO8601(dString, tZone)
{
var retDate = "";
var tZone = (typeof tZone !== "undefined") ? tZone : "Z";
var dateParts = dString.match(/(\d{4}-\d{2}-\d{2})(\s+(\d{2}:\d{2}:\d{2}))?/);
if (dateParts !== null)
{
retDate = dateParts[1]
if ((typeof dateParts[3]) !== "undefined")
{
retDate += "T" + dateParts[3] + ".000" + tZone;
}
else
{
retDate += "T00:00:00.000" + tZone;
}
}
return retDate;
}
function getWpx(callsign)
{
var prefix = null;
@ -5130,7 +5159,9 @@ function clearLogFilesAndCounts()
tryToDeleteLog("qrz.adif");
tryToDeleteLog("clublog.adif");
g_adifLogSettings.downloads = {};
localStorage.adifLogSettings = JSON.stringify(g_adifLogSettings);
g_adifLogSettings.lastFetch.lotw_qso = "1940-01-01";
g_adifLogSettings.lastFetch.lotw_qsl = "1940-01-01";
saveAdifSettings();
}
function getCurrentBandModeHTML()
@ -12174,7 +12205,8 @@ function callsignToDxcc(insign)
var end = parts.length - 1;
if (ancPrefixes.includes(parts[end]))
{
if (parts[end].toUpperCase() == "MM") {
if (parts[end].toUpperCase() == "MM")
{
return -1;
}
parts.pop();
@ -15852,6 +15884,7 @@ function mediaCheck()
g_scriptDir += g_dirSeperator;
g_qsoLogFile = path.join(g_appData, "GridTracker_QSO.adif");
g_LoTWLogFile = path.join(g_appData, "lotw.adif");
logEventMedia.appendChild(newOption("none", "None"));
msgAlertMedia.appendChild(newOption("none", "Select File"));