diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index fc0748d..abba836 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -2,7 +2,7 @@ # see https://docs.gitlab.com/ee/ci/yaml/README.html for all available options variables: - DEFAULT_IMAGE: registry.gitlab.com/gridtracker.org/gtbuilder:v1-0 + DEFAULT_IMAGE: registry.gitlab.com/gridtracker.org/gtbuilder:v1-3 APT_CACHE_DIR: $CI_PROJECT_DIR/.cache/apt NPM_CONFIG_CACHE: $CI_PROJECT_DIR/.cache/npm @@ -16,13 +16,6 @@ variables: NR0Q_SERVER_ADDRESS: "" NR0Q_SERVER_PASSWORD: "" - # - # Because it's getting to be that kind of world, we're going to have to - # sign our packages/exectuables with a signing key. - # That signing chain and spec file will be stored in a Gitlab CI Variable and protected, - # here's a placeholder for the script - G_CODE_SIGNING_CHAIN: "" - # nothing in this file ill be allowed to run automatically except for: # 1. merge requests # 2. manual tagging @@ -86,7 +79,7 @@ win:package: mkdir -p artifacts echo -e "\e[0Ksection_start:`date +%s`:apt_get[collapsed=true]\r\e[0KGetting Build Dependencies" apt-get update && apt-get upgrade -y - apt-get install p7zip -y + apt-get install curl p7zip -y wget https://nsis.sourceforge.io/mediawiki/images/4/47/Registry.zip unzip -bj Registry.zip Desktop/Plugin/registry.dll -d /usr/share/nsis/Plugins/x86-unicode/ unzip -bj Registry.zip Desktop/Include/Registry.nsh -d /usr/share/nsis/Include/ @@ -94,6 +87,7 @@ win:package: 7zr e NsProcess.zip -y -o/usr/share/nsis/Include/ Include/nsProcess.nsh 7zr e NsProcess.zip -y -o/usr/share/nsis/Plugins/x86-unicode/ Plugin/nsProcessW.dll mv /usr/share/nsis/Plugins/x86-unicode/nsProcessW.dll /usr/share/nsis/Plugins/x86-unicode/nsProcess.dll + curl --silent "https://gitlab.com/gitlab-org/incubation-engineering/mobile-devops/download-secure-files/-/raw/main/installer" | bash script: - | # Making our Windows packages @@ -111,7 +105,7 @@ win:package: rm dist/*-win-*/locales/*.info # Now we need to sign the executable before it get's stuffed into Nullsoft # using mono signcode - ## signcode -spc codecert.spc -t http://time.certum.pl/ -a sha256 dist/GridTracker-*-win-*/*.exe + echo $SIGN_PASS | signcode -spc .secure_files/beau-gunderson.spc -v .secure_files/beau-gunderson.pvk dist/GridTracker-*-win-*/*.exe # Now the executable should be signed sed "s##`node version.js`#g" windows/win_installer.nsi > windows/setup.nsi.tmp.1 sed "s##`pwd`#g" windows/setup.nsi.tmp.1 > windows/setup.nsi @@ -119,7 +113,7 @@ win:package: # clean up generated files rm windows/setup.nsi rm windows/setup.nsi.tmp.1 - ## signcode -spc codecert.spc -t http://time.certum.pl/ -a sha256 dist/GridTracker-Installer.*.exe + echo $SIGN_PASS | signcode -spc .secure_files/beau-gunderson.spc -v .secure_files/beau-gunderson.pvk dist/GridTracker-Installer.*.exe (cd dist ; mv GridTracker-Installer.*.exe ../artifacts) echo -e "\e[0Ksection_end:`date +%s`:native_build\e[0K" diff --git a/debian/changelog b/debian/changelog index a5608ac..dc83e2d 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,10 +1,14 @@ -gridtracker (1.23.1009) unstable; urgency=low +gridtracker (1.23.1014) unstable; urgency=low + - Call Roster - Fixed "All Traffic/Only Wanted" filtering + - Call Roster - Fixed POTA wanted same-day issue + - Call Roster - Added optional "Rig" column - System – Support digital mode Q65 - System – BIGCTY update from October 7th - System – Push notification services Simplepush.io and Pushover.net added (OAMS tab) + - System – Swaziland renamed to Eswatini - Logging – HamZone.cn service is now HamCQ.cn - Maps – Toner (online), Terrain, Watercolor and Geography Class no longer public access --- Tag Loomis Mon, 09 OCt 2023 00:00:00 -0000 +-- Tag Loomis Sat, 14 Oct 2023 00:00:00 -0000 gridtracker (1.23.0402) unstable; urgency=low - Roster - fixed Hunting mode not saving diff --git a/gridtracker.spec b/gridtracker.spec index 2ee73a0..2419288 100644 --- a/gridtracker.spec +++ b/gridtracker.spec @@ -40,10 +40,14 @@ DESTDIR=${RPM_BUILD_ROOT} make clean %license %{_docdir}/%{name}/ %changelog -* Mon Oct 09 2023 Tag Loomis - 1.23.1009-1 +* Sat Oct 14 2023 Tag Loomis - 1.23.1014-1 + - Call Roster - Fixed "All Traffic/Only Wanted" filtering + - Call Roster - Fixed POTA wanted same-day issue + - Call Roster - Added optional "Rig" column - System – Support digital mode Q65 - System – BIGCTY update from October 7th - System – Push notification services Simplepush.io and Pushover.net added (OAMS tab) + - System – Swaziland renamed to Eswatini - Logging – HamZone.cn service is now HamCQ.cn - Maps – Toner (online), Terrain, Watercolor and Geography Class no longer public access * Sun Apr 02 2023 Tag Loomis - 1.23.0402-1 diff --git a/package.nw/GridTracker.html b/package.nw/GridTracker.html index e6b5206..1b4ec52 100644 --- a/package.nw/GridTracker.html +++ b/package.nw/GridTracker.html @@ -2267,14 +2267,14 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ oninput="ValidateText(this); adifTextValueChange(this);" />
Station Profile ID + oninput="ValidateText(this); adifTextValueChange(this);" />
+ onclick="CloudlogTest(true);"> Test
diff --git a/package.nw/data/flags.json b/package.nw/data/flags.json index 1e477c0..a01eba3 100644 --- a/package.nw/data/flags.json +++ b/package.nw/data/flags.json @@ -359,7 +359,7 @@ "462": ["South Africa", "ZA", "za.png"], "464": ["Namibia", "NA", "na.png"], "466": ["Sudan", "SD", "sd.png"], - "468": ["Swaziland", "SZ", "sz.png"], + "468": ["Eswatini", "SZ", "sz.png"], "470": ["Tanzania", "TZ", "tz.png"], "474": ["Tunisia", "TN", "tn.png"], "478": ["Egypt", "EG", "eg.png"], diff --git a/package.nw/gt_roster.html b/package.nw/gt_roster.html index 4a5398e..e896fa4 100644 --- a/package.nw/gt_roster.html +++ b/package.nw/gt_roster.html @@ -339,7 +339,7 @@ - +
diff --git a/package.nw/gt_update.odt b/package.nw/gt_update.odt index d738f31..0e26306 100644 Binary files a/package.nw/gt_update.odt and b/package.nw/gt_update.odt differ diff --git a/package.nw/gt_update.pdf b/package.nw/gt_update.pdf index 3d434a2..425ca5d 100644 Binary files a/package.nw/gt_update.pdf and b/package.nw/gt_update.pdf differ diff --git a/package.nw/i18n/cn-t.json b/package.nw/i18n/cn-t.json index 96a2644..5e9f3b2 100644 --- a/package.nw/i18n/cn-t.json +++ b/package.nw/i18n/cn-t.json @@ -574,9 +574,9 @@ "roster.secondary.execptions.onlyMyDXCC": "我需要的DXCC", "roster.secondary.exceptions.useseQSL": "eQSL用戶", "roster.secondary.exceptions.usesOQRS": "OQRS用戶", + "roster.secondary.exceptions.allOnlyNew": "僅限新呼號", "roster.secondary.exceptions.wantRRCQ": "RR73 as CQ", "roster.secondary.exceptions.noUnknownDXCC": "No Unknown DXCC", - "roster.secondary.exceptions.allOnlyNew": "僅限新呼號", "roster.secondary.exceptions.noMsg.label": "不包含", "roster.secondary.exceptions.noMsg.hover": "不包含解碼...", "roster.secondary.exceptions.onlyMsg.label": "只包含", diff --git a/package.nw/i18n/en-dxcc.json b/package.nw/i18n/en-dxcc.json index b190004..c5f4def 100644 --- a/package.nw/i18n/en-dxcc.json +++ b/package.nw/i18n/en-dxcc.json @@ -312,7 +312,7 @@ "462": "South Africa", "464": "Namibia", "466": "Sudan", - "468": "Swaziland", + "468": "Eswatini", "470": "Tanzania", "474": "Tunisia", "478": "Egypt", diff --git a/package.nw/i18n/en.json b/package.nw/i18n/en.json index 5e9fc1b..2e549cf 100644 --- a/package.nw/i18n/en.json +++ b/package.nw/i18n/en.json @@ -574,9 +574,9 @@ "roster.secondary.exceptions.onlyMyDXCC": "Only My DXCC", "roster.secondary.exceptions.useseQSL":" Uses eQSL", "roster.secondary.exceptions.usesOQRS": "Uses OQRS", + "roster.secondary.exceptions.allOnlyNew": "Only New Calls", "roster.secondary.exceptions.wantRRCQ": "RR73 as CQ", "roster.secondary.exceptions.noUnknownDXCC": "No Unknown DXCC", - "roster.secondary.exceptions.allOnlyNew": "Only New Calls", "roster.secondary.exceptions.noMsg.label": "No", "roster.secondary.exceptions.noMsg.hover": "No Decodes Containing...", "roster.secondary.exceptions.onlyMsg.label": "Only", diff --git a/package.nw/lib/adif.js b/package.nw/lib/adif.js index b7f0204..4af27ad 100644 --- a/package.nw/lib/adif.js +++ b/package.nw/lib/adif.js @@ -2784,24 +2784,31 @@ function hrdCredentialTest(test) } } -function ClublogTest(test) +function CloudlogTest(test) { if (test && test == true) { - CloudlogTestResult.innerHTML = "Testing"; + if (ValidateText(CloudlogURL) && ValidateText(CloudlogAPI) && ValidateText(CloudlogStationProfileID)) + { + CloudlogTestResult.innerHTML = "Testing"; - var postData = { key: CloudlogAPI.value, type: "adif", string: "" }; - getPostJSONBuffer( - CloudlogURL.value, - CloudlogSendLogResult, - test, - "https", - 80, - postData, - 10000, - CloudUrlErrorCallback, - "No Response
or
Timeout" - ); + var postData = { key: CloudlogAPI.value, station_profile_id: CloudlogStationProfileID.value, type: "adif", string: "" }; + getPostJSONBuffer( + CloudlogURL.value, + CloudlogSendLogResult, + test, + "https", + 80, + postData, + 10000, + CloudUrlErrorCallback, + "No Response
or
Timeout" + ); + } + else + { + CloudlogTestResult.innerHTML = "Missing Fields
Test Aborted"; + } } } diff --git a/package.nw/lib/gt.js b/package.nw/lib/gt.js index 04e57f9..343bc86 100644 --- a/package.nw/lib/gt.js +++ b/package.nw/lib/gt.js @@ -12493,7 +12493,7 @@ function getPostBuffer( }); req.on("error", function (err) // eslint-disable-line node/handle-callback-err { - if (typeof timeoutCallback != "undefined") + if (typeof timeoutCallback == "function") { timeoutCallback( file_url, diff --git a/package.nw/lib/gtws.js b/package.nw/lib/gtws.js index 60bdb95..e049cc6 100644 --- a/package.nw/lib/gtws.js +++ b/package.nw/lib/gtws.js @@ -570,7 +570,11 @@ function htmlEntities(str) function sendSimplePushMessage(jsmesg) { const url = "https://api.simplepush.io/send"; - let data = { key: GT.msgSettings.msgSimplepushApiKey, title: "GridTracker Chat Message", msg: jsmesg.call + ": " + jsmesg.msg }; + let data = { + key: GT.msgSettings.msgSimplepushApiKey, + title: "GT Chat - " + formatCallsign(GT.appSettings.myCall), + msg: formatCallsign(jsmesg.call) + ": " + jsmesg.msg + }; getPostBuffer( url, null, // callback, @@ -578,9 +582,7 @@ function sendSimplePushMessage(jsmesg) "https", 443, data, - 5000, // timeoutMs, - null, // timeoutCallback, - "simplepush" + 5000 ); } @@ -591,8 +593,8 @@ function sendPushOverMessage(jsmesg, test = false) user: GT.msgSettings.msgPushoverUserKey, token: GT.msgSettings.msgPushoverToken, title: - "GridTracker Chat Message", - message: jsmesg.call + ": " + jsmesg.msg + "GT Chat - " + formatCallsign(GT.appSettings.myCall), + message: formatCallsign(jsmesg.call) + ": " + jsmesg.msg }; getPostBuffer( url, @@ -601,9 +603,7 @@ function sendPushOverMessage(jsmesg, test = false) "https", 443, data, - 5000, // timeoutMs, - null, // timeoutCallback, - "pushover" + 5000 // timeoutMs, ); } diff --git a/package.nw/lib/roster.js b/package.nw/lib/roster.js index 1f53e73..828c7b3 100644 --- a/package.nw/lib/roster.js +++ b/package.nw/lib/roster.js @@ -118,6 +118,7 @@ CR.defaultSettings = { Band: false, Mode: false, Calling: true, + Rig: false, Grid: true, Msg: false, DXCC: true, diff --git a/package.nw/lib/roster/processRosterFiltering.js b/package.nw/lib/roster/processRosterFiltering.js index 76a48c8..fd20863 100644 --- a/package.nw/lib/roster/processRosterFiltering.js +++ b/package.nw/lib/roster/processRosterFiltering.js @@ -417,12 +417,6 @@ function processRosterFiltering(callRoster, rosterSettings) } } } - let didWork = (baseHash in CR.worked.call); - if (allOnlyNew.checked && didWork && !callObj.qrz) - { - callObj.shouldAlert = false; - tx = false; - } entry.tx = tx; } diff --git a/package.nw/lib/roster/processRosterHunting.js b/package.nw/lib/roster/processRosterHunting.js index db6d4b8..10e783f 100644 --- a/package.nw/lib/roster/processRosterHunting.js +++ b/package.nw/lib/roster/processRosterHunting.js @@ -72,8 +72,6 @@ function processRosterHunting(callRoster, rosterSettings, awardTracker) let callPointer = callObj.CQ == true ? "cursor:pointer" : ""; - let didWork = false; - let call = "#FFFF00"; let grid = "#00FFFF"; let calling = "#90EE90"; @@ -98,6 +96,8 @@ function processRosterHunting(callRoster, rosterSettings, awardTracker) let cntyPointer = (callObj.cnty && callObj.qual == false) ? "cursor: pointer;" : ""; + let didWork = false; + let hash = callsign + workHashSuffix; let layeredHash = layeredHashSuffix && (callsign + layeredHashSuffix) @@ -149,7 +149,6 @@ function processRosterHunting(callRoster, rosterSettings, awardTracker) entry.tx = false; continue; } - // Special Calls if (callObj.DEcall.match("^[A-Z][0-9][A-Z](/w+)?$")) { @@ -524,14 +523,10 @@ function processRosterHunting(callRoster, rosterSettings, awardTracker) // Hunting for POTAs if (potaEnabled && huntPOTA.checked == true && callObj.pota) { - let huntTotal = 1; - let workedFound = 0; - let hash = CR.dayAsString + callsign + callObj.pota + (rosterSettings.layeredMode ? layeredHashSuffix : workHashSuffix); - if (rosterSettings.workedIndex && hash in rosterSettings.workedIndex.pota) workedFound++; - - if (workedFound != huntTotal) + // POTA is only in the worked list + if (!(hash in CR.worked.pota)) { shouldAlert = true; callObj.reason.push("pota"); @@ -809,11 +804,7 @@ function processRosterHunting(callRoster, rosterSettings, awardTracker) colorObject.ituz = "style='" + ituzConf + "background-color:" + ituzBg + ";color:" + ituz + "'"; colorObject.px = "style='" + wpxConf + "background-color:" + wpxBg + ";color:" + wpx + "'"; - // Just in case, don't alert if we worked this callsign alread - if (didWork && shouldAlert) shouldAlert = false; - // callObj.shouldAlert ||= shouldAlert; // eslint doesn't like this, why? - // If alert was set (award tracker), don't clear it if (!callObj.shouldAlert) { diff --git a/package.nw/lib/roster/renderRoster.js b/package.nw/lib/roster/renderRoster.js index 989cb64..7223dc9 100644 --- a/package.nw/lib/roster/renderRoster.js +++ b/package.nw/lib/roster/renderRoster.js @@ -64,7 +64,7 @@ function renderRoster(callRoster, rosterSettings) // callmode (all or only new) if (rosterSettings.callMode == "all") allOnlyNewDiv.style.display = ""; else allOnlyNewDiv.style.display = "none"; - + // Show the roster count in the window title // let visibleCallList = callRoster.filter(entry => entry.tx); @@ -73,7 +73,7 @@ function renderRoster(callRoster, rosterSettings) for (const entry in callRoster) { // entry should populate in general - if (callRoster[entry].tx) + if (callRoster[entry].tx == true) { visibleCallList.push(callRoster[entry]); } diff --git a/package.nw/lib/roster/rosterColumns.js b/package.nw/lib/roster/rosterColumns.js index a364abc..d667ae2 100644 --- a/package.nw/lib/roster/rosterColumns.js +++ b/package.nw/lib/roster/rosterColumns.js @@ -1,5 +1,5 @@ const DEFAULT_COLUMN_ORDER = [ - "Callsign", "Band", "Mode", "Calling", "Wanted", "Grid", "Msg", + "Callsign", "Band", "Mode", "Calling", "Rig", "Wanted", "Grid", "Msg", "POTA", "DXCC", "Flag", "State", "County", "Cont", "dB", "Freq", "DT", "Dist", "Azim", "CQz", "ITUz", "PX", @@ -74,6 +74,13 @@ const ROSTER_COLUMNS = { } }, + Rig: { + compare: callObjSimpleComparer("instance"), + tableData: (callObj) => ({ + html: callObj.instance + }) + }, + Band: { compare: callObjSimpleComparer("band"), tableData: (callObj) => ({ @@ -451,7 +458,8 @@ function wantedColumnParts(callObj, options) if (Object.keys(callObj.hunting).length == 0) { - return [" "]; + let sendBlank = (typeof options.html != "undefined" && options.html == true); + return [(sendBlank ? " " : "")]; } let parts = []; diff --git a/package.nw/lib/roster/sendAlerts.js b/package.nw/lib/roster/sendAlerts.js index dc2d233..d58ac9f 100644 --- a/package.nw/lib/roster/sendAlerts.js +++ b/package.nw/lib/roster/sendAlerts.js @@ -128,7 +128,7 @@ function sendSimplePushMessage(message) const url = "https://api.simplepush.io/send"; let data = { key: window.opener.GT.msgSettings.msgSimplepushApiKey, - title: "GridTracker Alert " + window.opener.GT.appSettings.myCall, + title: "GT Alert - " + formatCallsign(window.opener.GT.appSettings.myCall), msg: message }; @@ -139,9 +139,7 @@ function sendSimplePushMessage(message) "https", 443, data, - 500, // timeoutMs, - null, // timeoutCallback, - "simplepush" + 5000 ); } @@ -151,7 +149,7 @@ function sendPushOverAlert(message) let data = { user: window.opener.GT.msgSettings.msgPushoverUserKey, token: window.opener.GT.msgSettings.msgPushoverToken, - title: "GridTracker Alert " + window.opener.GT.appSettings.myCall, + title: "GT Alert - " + formatCallsign(window.opener.GT.appSettings.myCall), message: message }; @@ -162,9 +160,7 @@ function sendPushOverAlert(message) "https", 443, data, - 500, // timeoutMs, - null, // timeoutCallback, - "pushover" + 5000 ); } @@ -175,15 +171,17 @@ function parseCRJson(data) { if (data[callsign].shouldAlert === true && data[callsign].alerted === false) { + let wanted = " (" + wantedColumnParts(data[callsign]) + ")"; + if (data[callsign].grid) { if (data[callsign].state) { - message = message + callsign + ", " + data[callsign].dxccName + ", " + data[callsign].RSTsent.toString() + ", " + data[callsign].grid + ", " + data[callsign].band + ", " + data[callsign].state + "\n"; + message = message + formatCallsign(callsign) + ", " + data[callsign].dxccName + ", " + data[callsign].RSTsent.toString() + ", " + data[callsign].grid + ", " + data[callsign].band + ", " + data[callsign].state + wanted + "\n"; } else { - message = message + callsign + ", " + data[callsign].dxccName + ", " + data[callsign].RSTsent.toString() + ", " + data[callsign].grid + ", " + data[callsign].band + "\n"; + message = message + formatCallsign(callsign) + ", " + data[callsign].dxccName + ", " + data[callsign].RSTsent.toString() + ", " + data[callsign].grid + ", " + data[callsign].band + wanted + "\n"; } } else @@ -192,11 +190,11 @@ function parseCRJson(data) { if (data[callsign].state) { - message = message + callsign + ", " + data[callsign].dxccName + ", " + data[callsign].RSTsent.toString() + ", " + data[callsign].band + ", " + data[callsign].state + "\n"; + message = message + formatCallsign(callsign) + ", " + data[callsign].dxccName + ", " + data[callsign].RSTsent.toString() + ", " + data[callsign].band + ", " + data[callsign].state + wanted + "\n"; } else { - message = message + callsign + ", " + data[callsign].dxccName + ", " + data[callsign].RSTsent.toString() + ", " + data[callsign].band + "\n"; + message = message + formatCallsign(callsign) + ", " + data[callsign].dxccName + ", " + data[callsign].RSTsent.toString() + ", " + data[callsign].band + wanted + "\n"; } } } diff --git a/package.nw/package.json b/package.nw/package.json index eca052b..0e49f20 100644 --- a/package.nw/package.json +++ b/package.nw/package.json @@ -1,7 +1,7 @@ { "name": "GridTracker", "product_string_do_not_use": "gridtracker", - "version": "1.23.1009", + "version": "1.23.1014", "betaVersion": "", "description": "GridTracker, an amateur radio companion", "author": "GridTracker.org", diff --git a/windows/setup.nsi.tmpl b/windows/setup.nsi.tmpl index 1af69f4..8a91b93 100644 --- a/windows/setup.nsi.tmpl +++ b/windows/setup.nsi.tmpl @@ -64,7 +64,7 @@ VIAddVersionKey ProductVersion "${VERSION}" VIAddVersionKey CompanyName "${COMPANY}" VIAddVersionKey CompanyWebsite "${URL}" VIAddVersionKey FileVersion "${VERSION}" -VIAddVersionKey FileDescription "An Amateur Radio Companion" +VIAddVersionKey FileDescription "GridTracker" VIAddVersionKey LegalCopyright "2023 GridTracker.org" InstallDirRegKey HKLM "${REGKEY}" Path ShowUninstDetails nevershow diff --git a/windows/win_installer.nsi b/windows/win_installer.nsi index 8da8572..62cfe8c 100644 --- a/windows/win_installer.nsi +++ b/windows/win_installer.nsi @@ -34,7 +34,7 @@ VIAddVersionKey ProductVersion "${VERSION}" VIAddVersionKey CompanyName "${COMPANY}" VIAddVersionKey CompanyWebsite "${URL}" VIAddVersionKey FileVersion "${VERSION}" -VIAddVersionKey FileDescription "An Amateur Radio Companion" +VIAddVersionKey FileDescription "GridTracker" VIAddVersionKey LegalCopyright "${CPYEAR} Gridtracker.org"