function sendAlerts(callRoster, rosterSettings) { let dirPath = window.opener.GT.scriptDir; let scriptExists = false; let script = "cr-alert.sh"; let shouldAlert = 0; for (const entry in callRoster) { let callObj = callRoster[entry].callObj; // chrbayer: what does the tx field mean? no alerts are generated (at all) if this is in place... // if it's "not visible in the roster, don't put it in the report!" if (callRoster[entry].tx == false) continue; let call = callObj.DEcall; CR.scriptReport[call] = Object.assign({}, callObj); CR.scriptReport[call].dxccName = window.opener.GT.dxccToAltName[callObj.dxcc]; CR.scriptReport[call].distance = (callObj.distance > 0) ? parseInt(callObj.distance * MyCircle.validateRadius(window.opener.distanceUnit.value)) : 0; delete CR.scriptReport[call].DEcall; CR.scriptReport[call].rect = null; delete CR.scriptReport[call].rect; delete CR.scriptReport[call].style; delete CR.scriptReport[call].wspr; delete CR.scriptReport[call].qso; delete CR.scriptReport[call].instance; if (rosterSettings.callMode != "all") { CR.scriptReport[call].shouldAlert = true; CR.scriptReport[call].reason.push(CR.rosterSettings.hunting); } if (callObj.alerted == false && rosterSettings.callMode == "all" && callObj.shouldAlert == true) { callObj.alerted = true; shouldAlert++; } else if (callObj.alerted == false && rosterSettings.callMode != "all") { callObj.alerted = true; shouldAlert++; } callObj.shouldAlert = false; } // NOTE: Ring alerts if needed try { if (fs.existsSync(dirPath)) { if (window.opener.GT.platform == "windows") { script = "cr-alert.bat"; } if (fs.existsSync(dirPath + script)) { scriptExists = true; scriptIcon.innerHTML = "
" + (window.opener.GT.crScript == 1 ? `${$.i18n("sendAlerts.scriptEnabled")}` : `${$.i18n("sendAlerts.scriptDisabled")}`) + "
"; scriptIcon.style.display = "block"; } else { scriptIcon.style.display = "none"; } } } catch (e) {} if (shouldAlert > 0) { if (window.opener.GT.classicAlerts.huntRoster == true) { let notify = window.opener.huntRosterNotify.value; if (notify == "0") { let media = window.opener.huntRosterNotifyMedia.value; if (media != "none") window.opener.playAlertMediaFile(media); } else if (notify == "1") { window.opener.speakAlertString(window.opener.huntRosterNotifyWord.value); } } if (scriptExists && window.opener.GT.crScript == 1) { try { fs.writeFileSync(dirPath + "cr-alert.json", JSON.stringify(CR.scriptReport, null, 2)); let thisProc = dirPath + script; let cp = require("child_process"); let child = cp.spawn(thisProc, [], { detached: true, cwd: dirPath.slice(0, -1), stdio: ["ignore", "ignore", "ignore"] }); child.unref(); } catch (e) { conosle.log(e); } } if (window.opener.GT.msgSettings.msgPushover && window.opener.GT.msgSettings.msgPushoverRoster) { sendPushOverAlert(parseCRJson(CR.scriptReport)); } if (window.opener.GT.msgSettings.msgSimplepush && window.opener.GT.msgSettings.msgSimplepushRoster) { sendSimplePushMessage(parseCRJson(CR.scriptReport)); } CR.scriptReport = Object(); } } 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, msg: message }; window.opener.GT.getPostBuffer( url, null, // callback, null, "https", 443, data, 500, // timeoutMs, null, // timeoutCallback, "simplepush" ); } function sendPushOverAlert(message) { const url = "https://api.pushover.net/1/messages.json"; let data = { user: window.opener.GT.msgSettings.msgPushoverUserKey, token: window.opener.GT.msgSettings.msgPushoverToken, title: "GridTracker Alert " + window.opener.GT.appSettings.myCall, message: message }; window.opener.GT.getPostBuffer( url, null, // callback, null, "https", 443, data, 500, // timeoutMs, null, // timeoutCallback, "pushover" ); } function parseCRJson(data) { let message = ""; for (let callsign in data) { if (data[callsign].shouldAlert === true && data[callsign].alerted === false) { 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"; } else { message = message + callsign + ", " + data[callsign].dxccName + ", " + data[callsign].RSTsent.toString() + ", " + data[callsign].grid + ", " + data[callsign].band + "\n"; } } else { if (!data[callsign].grid) { if (data[callsign].state) { message = message + callsign + ", " + data[callsign].dxccName + ", " + data[callsign].RSTsent.toString() + ", " + data[callsign].band + ", " + data[callsign].state + "\n"; } else { message = message + callsign + ", " + data[callsign].dxccName + ", " + data[callsign].RSTsent.toString() + ", " + data[callsign].band + "\n"; } } } } } return message; }