From cedeef59f878ca42e6190b41d8774ee4ce4eb640 Mon Sep 17 00:00:00 2001 From: jangliss Date: Tue, 15 Jun 2021 21:03:15 -0500 Subject: [PATCH] Initial workup for LoTW throttling & diff fetching --- package.nw/lib/adif.js | 98 ++++++- package.nw/lib/defaults.js | 526 +++++++++++++++++++------------------ package.nw/lib/gt.js | 4 + 3 files changed, 363 insertions(+), 265 deletions(-) diff --git a/package.nw/lib/adif.js b/package.nw/lib/adif.js index 759e475..082151a 100644 --- a/package.nw/lib/adif.js +++ b/package.nw/lib/adif.js @@ -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_qso = appLoTW_RXQSO; + } + } + if (activeAdifArray[x].length > 3) { if (activeAdifLogMode) @@ -572,6 +602,16 @@ function lotwCallback(buffer, flag) var shouldAppend = false; g_fromDirectCallNoFileDialog = true; + // Extract header showing last fetched date from call + var lotwQSHeader = rawAdiBuffer.match(/^(\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] } + elseif(lotwQSHeader[1].toUpperCase() == "QSL") + g_adifLogSettings.lastFetch.lotw_qsl = lotwQSHeader[2]; + } + rawAdiBuffer = cleanAndPrepADIF( "lotw.adif", rawAdiBuffer, @@ -623,16 +663,26 @@ var g_isGettingLOTW = false; function grabLOtWLog(test) { - if (g_isGettingLOTW == false) + var dLoTWQSO = Date.parse(g_adifLogSettings.lastFetch.lotw_qso); + var dLoTWQSL = Date.parse(g_adifLogSettings.lastFetch.lotw_qsl); + var tmpDate = ((new Date().getTime()) - 300); + + // Be nice to LoTW and only fetch if last fetch was > 5 mins ago + if ((g_isGettingLOTW == false) && + (((isNaN(dLoTWQSO) == false) && (dLoTWQSO < tmpDate)) || + ((isNaN(dLoTWQSL) == false) && (dLoTWQSL < tmpDate)) + )) { var lastQSLDateString = - "&qso_qsorxsince=1945-01-01&qso_qslsince=1945-01-01"; + "&qso_qsorxsince=" + g_adifLogSettings.lastFetch.lotw_qso + + "&qso_qslsince=" + g_adifLogSettings.lastFetch.lotw_qsl; if (test == true) { lotwTestResult.innerHTML = "Testing"; lastQSLDateString = "&qso_qsosince=2100-01-01"; } + // Fetch QSOs getABuffer( "https://lotw.arrl.org/lotwuser/lotwreport.adi?login=" + lotwLogin.value + @@ -648,6 +698,27 @@ function grabLOtWLog(test) "g_isGettingLOTW", 120000 ); + + // Fetch QSLs + var tQSO = setTimeout(function() + { + if (test == false) lotwLogLoaded = true; + 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, + test, + "https", + 443, + lotwLogImg, + "g_isGettingLOTW", + 120000 + ); + }, 10000); } } @@ -1005,6 +1076,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 +1384,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); diff --git a/package.nw/lib/defaults.js b/package.nw/lib/defaults.js index 58077ae..51a9bee 100644 --- a/package.nw/lib/defaults.js +++ b/package.nw/lib/defaults.js @@ -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" +}; diff --git a/package.nw/lib/gt.js b/package.nw/lib/gt.js index 794a4f4..d96b411 100644 --- a/package.nw/lib/gt.js +++ b/package.nw/lib/gt.js @@ -505,6 +505,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; @@ -5131,6 +5132,8 @@ function clearLogFilesAndCounts() tryToDeleteLog("qrz.adif"); tryToDeleteLog("clublog.adif"); g_adifLogSettings.downloads = {}; + g_adifLogSettings.lastFetch.lotw_qso = "1940-01-01"; + g_adifLogSettings.lastFetch.lotw_qsl = "1940-01-01"; localStorage.adifLogSettings = JSON.stringify(g_adifLogSettings); } @@ -15890,6 +15893,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"));