diff --git a/.github/workflows/prettier.yaml b/.github/workflows/prettier.yaml
index 2cfea21b..a42c1f8a 100644
--- a/.github/workflows/prettier.yaml
+++ b/.github/workflows/prettier.yaml
@@ -4,7 +4,7 @@ name: Prettier
on:
push:
branches:
- - master
+ - main
jobs:
prettier:
diff --git a/gui/main.js b/gui/main.js
index 4c13ca96..de5dd6fc 100644
--- a/gui/main.js
+++ b/gui/main.js
@@ -101,7 +101,7 @@ const configDefaultSettings =
"enable_auto_retry" : "False", \
"tx_delay" : 0, \
"auto_start": 0, \
- "notification": 1 \
+ "enable_sys_notification": 1 \
}';
if (!fs.existsSync(configPath)) {
@@ -486,21 +486,24 @@ ipcMain.on("request-update-transmission-status", (event, arg) => {
ipcMain.on("request-update-reception-status", (event, arg) => {
win.webContents.send("action-update-reception-status", arg);
chat.webContents.send("action-update-reception-status", arg);
-
});
//Called by main to query chat if there are new messages
-ipcMain.on("request-update-unread-messages",() => {
+ipcMain.on("request-update-unread-messages", () => {
//mainLog.info("Got request to check if chat has new messages")
chat.webContents.send("action-update-unread-messages");
-
});
//Called by chat to notify main if there are new messages
-ipcMain.on("request-update-unread-messages-main", (event,arg) => {
- win.webContents.send("action-update-unread-messages-main",arg);
+ipcMain.on("request-update-unread-messages-main", (event, arg) => {
+ win.webContents.send("action-update-unread-messages-main", arg);
//mainLog.info("Received reply from chat and ?new messages = " +arg);
});
+//Called by main to notify chat we should clean the DB
+ipcMain.on("request-clean-db", () => {
+ chat.webContents.send("action-clean-db");
+});
+
ipcMain.on("request-open-tnc-log", () => {
logViewer.show();
});
diff --git a/gui/package.json b/gui/package.json
index b21f3ace..5843aadd 100644
--- a/gui/package.json
+++ b/gui/package.json
@@ -1,6 +1,6 @@
{
"name": "FreeDATA",
- "version": "0.9.3-alpha.1",
+ "version": "0.9.4-alpha.1",
"description": "FreeDATA ",
"main": "main.js",
"scripts": {
@@ -32,8 +32,8 @@
"@electron/osx-sign": "^1.0.4",
"@popperjs/core": "^2.11.6",
"blob-util": "^2.0.2",
- "bootstrap": "^5.3.0-alpha.3",
- "bootstrap-icons": "^1.10.3",
+ "bootstrap": "^5.3.0",
+ "bootstrap-icons": "^1.10.5",
"bootswatch": "^5.2.3",
"browser-image-compression": "^2.0.0",
"chart.js": "^4.2.1",
diff --git a/gui/preload-chat.js b/gui/preload-chat.js
index 121f4faa..f437f5cd 100644
--- a/gui/preload-chat.js
+++ b/gui/preload-chat.js
@@ -165,7 +165,6 @@ window.addEventListener("DOMContentLoaded", () => {
"user_info_website",
"user_info_comments",
];
-
users
.find({
selector: {
@@ -216,9 +215,11 @@ window.addEventListener("DOMContentLoaded", () => {
//Add event listener for filter apply button
document.getElementById("btnFilter").addEventListener("click", () => {
- chatFilter = [{ type: "newchat" }];
- if (document.getElementById("chkMessage").checked == true)
+ chatFilter.length = 0;
+ if (document.getElementById("chkMessage").checked == true) {
+ chatFilter = [{ type: "newchat" }];
chatFilter.push({ type: "received" }, { type: "transmit" });
+ }
if (document.getElementById("chkPing").checked == true)
chatFilter.push({ type: "ping" });
if (document.getElementById("chkPingAck").checked == true)
@@ -229,6 +230,8 @@ window.addEventListener("DOMContentLoaded", () => {
chatFilter.push({ type: "request" });
if (document.getElementById("chkResponse").checked == true)
chatFilter.push({ type: "response" });
+ if (document.getElementById("chkNewMessage").checked == true)
+ chatFilter.push({ new: 1 });
updateAllChat(true);
});
@@ -664,21 +667,21 @@ ipcRenderer.on("return-select-user-image", (event, arg) => {
ipcRenderer.on("action-update-reception-status", (event, arg) => {
var data = arg["data"][0];
- document.getElementById("txtConnectedWithChat").textContent = data.dxcallsign;
+ document.getElementById("txtConnectedWithChat").textContent = data.dxcallsign;
});
ipcRenderer.on("action-clear-reception-status", (event) => {
- //Clear connected with textbox
- let cwc = document.getElementById("txtConnectedWithChat");
- if (cwc.textContent != "------") {
- cwc.textContent = "------";
- //console.log("Reseting connected with");
- }
+ //Clear connected with textbox
+ let cwc = document.getElementById("txtConnectedWithChat");
+ if (cwc.textContent != "------") {
+ cwc.textContent = "------";
+ //console.log("Reseting connected with");
+ }
});
ipcRenderer.on("action-update-transmission-status", (event, arg) => {
var data = arg["data"][0];
- document.getElementById("txtConnectedWithChat").textContent = data.dxcallsign;
+ document.getElementById("txtConnectedWithChat").textContent = data.dxcallsign;
console.log(data.status);
if (data.uuid !== "no-uuid") {
@@ -814,12 +817,12 @@ ipcRenderer.on("action-new-msg-received", (event, arg) => {
obj.filename = "null";
obj.filetype = "null";
obj.file = "null";
- obj.new = 1;
+ obj.new = 0;
add_obj_to_database(obj);
update_chat_obj_by_uuid(obj.uuid);
- // handle beacon
+ // handle ping-ack
} else if (item.ping == "acknowledge") {
obj.timestamp = parseInt(item.timestamp);
obj.dxcallsign = item.dxcallsign;
@@ -834,7 +837,7 @@ ipcRenderer.on("action-new-msg-received", (event, arg) => {
obj.filename = "null";
obj.filetype = "null";
obj.file = "null";
- obj.new = 1;
+ obj.new = 0;
add_obj_to_database(obj);
update_chat_obj_by_uuid(obj.uuid);
@@ -853,7 +856,7 @@ ipcRenderer.on("action-new-msg-received", (event, arg) => {
obj.filename = "null";
obj.filetype = "null";
obj.file = "null";
- obj.new = 1;
+ obj.new = 0;
add_obj_to_database(obj);
update_chat_obj_by_uuid(obj.uuid);
@@ -881,7 +884,7 @@ ipcRenderer.on("action-new-msg-received", (event, arg) => {
obj.filetype = splitted_data[7];
//obj.file = btoa(splitted_data[8]);
obj.file = FD.btoa_FD(splitted_data[8]);
- obj.new=1;
+ obj.new = 1;
} else if (splitted_data[1] == "req" && splitted_data[2] == "0") {
obj.uuid = uuidv4().toString();
obj.timestamp = Math.floor(Date.now() / 1000);
@@ -894,7 +897,7 @@ ipcRenderer.on("action-new-msg-received", (event, arg) => {
obj.filename = "null";
obj.filetype = "null";
obj.file = "null";
- obj.new=1;
+ obj.new = 0;
if (config.enable_request_profile == "True") {
sendUserData(item.dxcallsign);
}
@@ -910,7 +913,7 @@ ipcRenderer.on("action-new-msg-received", (event, arg) => {
obj.filename = "null";
obj.filetype = "null";
obj.file = "null";
- obj.new=1;
+ obj.new = 0;
if (config.enable_request_shared_folder == "True") {
sendSharedFolderList(item.dxcallsign);
}
@@ -931,7 +934,7 @@ ipcRenderer.on("action-new-msg-received", (event, arg) => {
obj.filename = "null";
obj.filetype = "null";
obj.file = "null";
- obj.new=1;
+ obj.new = 0;
if (config.enable_request_shared_folder == "True") {
sendSharedFolderFile(item.dxcallsign, name);
}
@@ -947,7 +950,7 @@ ipcRenderer.on("action-new-msg-received", (event, arg) => {
obj.filename = "null";
obj.filetype = "null";
obj.file = "null";
- obj.new=1;
+ obj.new = 0;
console.log(splitted_data);
let userData = new Object();
userData.user_info_image = splitted_data[2];
@@ -976,7 +979,7 @@ ipcRenderer.on("action-new-msg-received", (event, arg) => {
obj.filename = "null";
obj.filetype = "null";
obj.file = "null";
- obj.new=1;
+ obj.new = 0;
console.log(splitted_data);
let userData = new Object();
@@ -1004,7 +1007,7 @@ ipcRenderer.on("action-new-msg-received", (event, arg) => {
obj.filename = sharedFileInfo[0];
obj.filetype = "application/octet-stream";
obj.file = FD.btoa_FD(sharedFileInfo[1]);
- obj.new=1;
+ obj.new = 0;
} else {
console.log("no rule matched for handling received data!");
}
@@ -1043,31 +1046,30 @@ update_chat = function (obj) {
var attempt = obj.attempt;
}
-// add percent and bytes per minute if not existing
-//console.log(obj.percent)
-if (typeof obj.percent == "undefined") {
- obj.percent = 0;
- obj.bytesperminute = 0;
- }
+ // add percent and bytes per minute if not existing
+ //console.log(obj.percent)
+ if (typeof obj.percent == "undefined") {
+ obj.percent = 0;
+ obj.bytesperminute = 0;
+ }
// check if wrong status message
-if (obj.status == "transmit" && obj.percent == 0) {
-var TimeDifference = (new Date().getTime()/1000) - obj.timestamp
- if (TimeDifference > 3600){
- db.upsert(obj._id, function (doc) {
- if (!doc.status) {
- doc.status = "failed";
- }
- return doc;
- });
- obj.status = "failed";
-
+ if (obj.status == "transmit" && obj.percent == 0) {
+ var TimeDifference = new Date().getTime() / 1000 - obj.timestamp;
+ if (TimeDifference > 3600) {
+ db.upsert(obj._id, function (doc) {
+ if (!doc.status) {
+ doc.status = "failed";
+ }
+ return doc;
+ });
+ obj.status = "failed";
}
-}
- if (typeof obj.new == "undefined"){
- obj.new=0;
}
-
+ if (typeof obj.new == "undefined") {
+ obj.new = 0;
+ }
+
if (typeof config.max_retry_attempts == "undefined") {
var max_retry_attempts = 3;
} else {
@@ -1241,8 +1243,12 @@ var TimeDifference = (new Date().getTime()/1000) - obj.timestamp
//Reset unread messages and new message indicator
let clear = selected_callsign;
clearUnreadMessages(clear);
- document.getElementById(`chat-${selected_callsign}-list-displaydxcall`).textContent=selected_callsign;
-
+ document.getElementById(
+ `chat-${selected_callsign}-list-displaydxcall`
+ ).textContent = selected_callsign;
+ document
+ .getElementById(`chat-${selected_callsign}-list`)
+ .classList.remove("list-group-item-warning");
setTimeout(scrollMessagesToBottom, 200);
//get user information
@@ -1263,7 +1269,14 @@ var TimeDifference = (new Date().getTime()/1000) - obj.timestamp
// short message
document.getElementById("chat-" + dxcallsign + "-list-shortmsg").innerHTML =
shortmsg;
- if (obj.new==1) document.getElementById(`chat-${obj.dxcallsign}-list-displaydxcall`).textContent="*" +obj.dxcallsign;
+ if (obj.new == 1) {
+ document.getElementById(
+ `chat-${obj.dxcallsign}-list-displaydxcall`
+ ).textContent = "*" + obj.dxcallsign;
+ document
+ .getElementById(`chat-${dxcallsign}-list`)
+ .classList.add("list-group-item-warning");
+ }
}
// APPEND MESSAGES TO CALLSIGN
@@ -1273,10 +1286,10 @@ var TimeDifference = (new Date().getTime()/1000) - obj.timestamp
if (config.enable_auto_retry.toUpperCase() == "TRUE") {
checkForWaitingMessages(obj.dxcallsign);
}
- if (obj.new == 1)
- {
- showOsPopUp("Ping from " + obj.dxcallsign,"You've been ping'd!");
- }
+ //if (obj.new == 1)
+ //{
+ // showOsPopUp("Ping from " + obj.dxcallsign,"You've been ping'd!");
+ //}
var new_message = `
snr: ${obj.snr} - ${timestamp}
@@ -1327,11 +1340,10 @@ var TimeDifference = (new Date().getTime()/1000) - obj.timestamp
var message_html = obj.msg.replaceAll(/\n/g, "
");
if (obj.type == "received") {
- if (obj.new == 1)
- {
- showOsPopUp("Message received from " + obj.dxcallsign,obj.msg);
+ if (obj.new == 1) {
+ showOsPopUp("Message received from " + obj.dxcallsign, obj.msg);
}
-
+
var new_message = `
@@ -1442,8 +1454,6 @@ var TimeDifference = (new Date().getTime()/1000) - obj.timestamp
//console.log("Low graphics enabled for chat module");
}
-
-
var new_message = `
${controlarea_transmit}
@@ -1478,10 +1488,8 @@ var TimeDifference = (new Date().getTime()/1000) - obj.timestamp
obj.percent
}" aria-valuemin="0" aria-valuemax="100">
${percent_value} % - ${
- obj.bytesperminute
- } Bpm
+ obj._id
+ }-progress-information">${percent_value} % - ${obj.bytesperminute} Bpm
@@ -1498,11 +1506,8 @@ var TimeDifference = (new Date().getTime()/1000) - obj.timestamp
//console.log("element already exists......");
//console.log(obj);
- // console.log(obj.status)
- // console.log(obj.attempt)
-
-
-
+ // console.log(obj.status)
+ // console.log(obj.attempt)
if (
!obj.status == "broadcast_transmit" ||
@@ -1525,40 +1530,33 @@ var TimeDifference = (new Date().getTime()/1000) - obj.timestamp
obj.attempt + "/" + max_retry_attempts;
}
-
if (obj.status == "transmit") {
-
- document.getElementById("msg-" + obj._id + "-status").innerHTML =
+ document.getElementById("msg-" + obj._id + "-status").innerHTML =
get_icon_for_state(obj.status);
-if (typeof obj.percent !== "undefined") {
- document
- .getElementById("msg-" + obj._id + "-progress")
- .setAttribute("aria-valuenow", obj.percent);
- document
- .getElementById("msg-" + obj._id + "-progress")
- .setAttribute("style", "width:" + obj.percent + "%;");
- document.getElementById(
- "msg-" + obj._id + "-progress-information"
- ).innerHTML = obj.percent + "% - " + obj.bytesperminute + " Bpm";
+ if (typeof obj.percent !== "undefined") {
+ document
+ .getElementById("msg-" + obj._id + "-progress")
+ .setAttribute("aria-valuenow", obj.percent);
+ document
+ .getElementById("msg-" + obj._id + "-progress")
+ .setAttribute("style", "width:" + obj.percent + "%;");
+ document.getElementById(
+ "msg-" + obj._id + "-progress-information"
+ ).innerHTML = obj.percent + "% - " + obj.bytesperminute + " Bpm";
+ } else {
+ document
+ .getElementById("msg-" + obj._id + "-progress")
+ .setAttribute("aria-valuenow", 0);
+ document
+ .getElementById("msg-" + obj._id + "-progress")
+ .setAttribute("style", "width:0%;");
+ document.getElementById(
+ "msg-" + obj._id + "-progress-information"
+ ).innerHTML = "0% - 0 Bpm";
+ }
- } else {
- document
- .getElementById("msg-" + obj._id + "-progress")
- .setAttribute("aria-valuenow", 0);
- document
- .getElementById("msg-" + obj._id + "-progress")
- .setAttribute("style", "width:0%;");
- document.getElementById(
- "msg-" + obj._id + "-progress-information"
- ).innerHTML = "0% - 0 Bpm";
-
- }
-
-
-
-
- document.getElementById("msg-" + obj._id + "-attempts").innerHTML =
+ document.getElementById("msg-" + obj._id + "-attempts").innerHTML =
obj.attempt + "/" + max_retry_attempts;
}
@@ -1602,15 +1600,13 @@ if (typeof obj.percent !== "undefined") {
.getElementById("msg-" + obj._id + "-progress")
.classList.add("bg-danger");
- console.log(document
- .getElementById("msg-" + obj._id + "-progress")
- .classList)
+ console.log(
+ document.getElementById("msg-" + obj._id + "-progress").classList
+ );
document.getElementById(
"msg-" + obj._id + "-progress-information"
).innerHTML = "TRANSMISSION FAILED - " + obj.bytesperminute + " Bpm";
-
-
}
//document.getElementById(id).className = message_class;
@@ -2194,7 +2190,7 @@ async function updateAllChat(clear) {
await db
.createIndex({
index: {
- fields: [{ timestamp: "asc" }],
+ fields: [{ dxcallsign: "asc" }, { timestamp: "asc" }],
},
})
.then(async function (result) {
@@ -2202,14 +2198,14 @@ async function updateAllChat(clear) {
await db
.find({
selector: {
- $and: [{ timestamp: { $exists: true } }, { $or: chatFilter }],
+ $and: [
+ { dxcallsign: { $exists: true } },
+ { timestamp: { $exists: true } },
+ { $or: chatFilter },
+ ],
//$or: chatFilter
},
- sort: [
- {
- timestamp: "asc",
- },
- ],
+ sort: [{ dxcallsign: "asc" }, { timestamp: "asc" }],
})
.then(async function (result) {
console.log(result);
@@ -2272,7 +2268,6 @@ function getSetUserSharedFolder(selected_callsign) {
.then(function (data) {
console.log(data);
-
if (typeof data.user_shared_folder !== "undefined") {
console.log(data.user_shared_folder);
// shared folder table
@@ -2661,11 +2656,15 @@ ipcRenderer.on("update-config", (event, data) => {
});
ipcRenderer.on("action-update-unread-messages", (event) => {
- checkForNewMessages().then(function(count) {
- ipcRenderer.send("request-update-unread-messages-main",count);
+ checkForNewMessages().then(function (count) {
+ ipcRenderer.send("request-update-unread-messages-main", count);
});
});
+ipcRenderer.on("action-clean-db", (event) => {
+ dbClean();
+});
+
// https://stackoverflow.com/a/18650828
function formatBytes(bytes, decimals = 2) {
if (!+bytes) return "0 Bytes";
@@ -2796,44 +2795,49 @@ function checkForWaitingMessages(dxcall) {
});
}
-async function checkForNewMessages()
-{
+async function checkForNewMessages() {
var newmsgs;
- await db.find({
- selector: {
- new: {$eq: 1},
- }, limit:1,
- })
+ await db
+ .find({
+ selector: {
+ new: { $eq: 1 },
+ },
+ limit: 1,
+ })
.then(function (result) {
- if (result.docs.length >0)
- newmsgs=true;
- else
- newmsgs=false;
+ if (result.docs.length > 0) newmsgs = true;
+ else newmsgs = false;
})
.catch(function (err) {
console.log(err);
});
- return newmsgs;
+ return newmsgs;
}
function clearUnreadMessages(dxcall) {
//console.log(dxcall);
+ //Selector of dxcall and new $eq: 1 isn't working, don't know why
+ //For now parse all messages of callsign to clear new flag
db.find({
- selector: {
- dxcallsign: dxcall,
- new: {$eq: 1},
- }
+ //{
+ selector:
+ //$and:[
+ { dxcallsign: dxcall }, //, {new: { $gte: 1}}
+ //]
+ // }
})
.then(function (result) {
//console.log(result);
//console.log ("New messages count to clear for " + dxcall + ": " + result.docs.length)
- result.docs.forEach(function (item) {
+ result.docs.forEach(function (item) {
+ if (item.new == 1) {
db.upsert(item._id, function (doc) {
- doc.new=0;
+ doc.new = 0;
//console.log("Clearing new on _id " + item._id);
return doc;
- });
- });
+ });
+ }
+ });
})
.catch(function (err) {
console.log(err);
@@ -2841,10 +2845,68 @@ function clearUnreadMessages(dxcall) {
}
//Have the operating system show a notification popup
-function showOsPopUp(title, message)
-{
- if (config.notification == 0) return;
+function showOsPopUp(title, message) {
+ if (config.enable_sys_notification == 0) return;
const NOTIFICATION_TITLE = title;
const NOTIFICATION_BODY = message;
new Notification(NOTIFICATION_TITLE, { body: NOTIFICATION_BODY });
-}
\ No newline at end of file
+}
+
+//Function to clean old beacons and optimize database
+async function dbClean() {
+ //Only keep the most x latest days of beacons
+ let beaconKeep = 7;
+ let itemCount = 0;
+ let timestampPurge = Math.floor(
+ (Date.now() - beaconKeep * 24 * 60 * 60 * 1000) / 1000
+ );
+ if (
+ confirm(
+ "Delete beacons and pings older than " +
+ beaconKeep +
+ " days and compact database?"
+ )
+ ) {
+ } else {
+ return;
+ }
+
+ //Items to purge from database
+ var purgeFilter = [
+ { type: "beacon" },
+ { type: "ping-ack" },
+ { type: "ping" },
+ ];
+
+ await db
+ .find({
+ selector: {
+ $and: [{ timestamp: { $lt: timestampPurge } }, { $or: purgeFilter }],
+ },
+ })
+ .then(async function (result) {
+ //console.log("Purging " + result.docs.length + " beacons received before " + timestampPurge);
+ itemCount = result.docs.length;
+ result.docs.forEach(async function (item) {
+ await db
+ .get(item._id)
+ .then(async function (doc) {
+ await db.remove(doc);
+ })
+ .catch(function (err) {
+ console.log(err);
+ });
+ });
+ })
+ .catch(function (err) {
+ console.log(err);
+ });
+
+ //Compact database
+ await db.compact();
+ window.alert(
+ "Database maintenance is complete. " +
+ itemCount +
+ " items removed from database. It's recommended you now restart the GUI."
+ );
+}
diff --git a/gui/preload-main.js b/gui/preload-main.js
index 5fe94d3a..7f511d81 100644
--- a/gui/preload-main.js
+++ b/gui/preload-main.js
@@ -71,10 +71,10 @@ var noise_level_raw = 0;
//Global version variable
var appVer = null;
- //Track the number of times TNC has been started
- //So that warning is shown when using auto start and 2nd start
- //if hamlib is not running
- var tncStartCount = 0;
+//Track the number of times TNC has been started
+//So that warning is shown when using auto start and 2nd start
+//if hamlib is not running
+var tncStartCount = 0;
// START INTERVALL COMMAND EXECUTION FOR STATES
//setInterval(sock.getRxBuffer, 1000);
@@ -390,7 +390,7 @@ window.addEventListener("DOMContentLoaded", () => {
document.getElementById("AutoStartSwitch").checked = false;
}
- if (config.notification == 1) {
+ if (config.enable_sys_notification == 1) {
document.getElementById("NotificationSwitch").checked = true;
} else {
document.getElementById("NotificationSwitch").checked = false;
@@ -1219,12 +1219,14 @@ window.addEventListener("DOMContentLoaded", () => {
FD.saveConfig(config, configPath);
});
- //Handle change of Notification settings
- document.getElementById("NotificationSwitch").addEventListener("click", () => {
+ //Handle change of Notification settings
+ document
+ .getElementById("NotificationSwitch")
+ .addEventListener("click", () => {
if (document.getElementById("NotificationSwitch").checked == true) {
- config.notification = 1;
+ config.enable_sys_notification = 1;
} else {
- config.notification = 0;
+ config.enable_sys_notification = 0;
}
//fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
FD.saveConfig(config, configPath);
@@ -1610,6 +1612,11 @@ window.addEventListener("DOMContentLoaded", () => {
daemon.stopTNC();
});
+ // btnCleanDB button clicked
+ document.getElementById("btnCleanDB").addEventListener("click", () => {
+ ipcRenderer.send("request-clean-db");
+ });
+
// TEST HAMLIB
document.getElementById("testHamlib").addEventListener("click", () => {
var data_bits = document.getElementById("hamlib_data_bits").value;
@@ -1955,14 +1962,14 @@ function signal_quality_perc_quad(rssi, perfect_rssi = 10, worst_rssi = -150) {
}
var lastHeard = "";
-var checkForNewMessageWait=85;
+var checkForNewMessageWait = 85;
ipcRenderer.on("action-update-tnc-state", (event, arg) => {
//check for new messages
- if (checkForNewMessageWait >= 100){
+ if (checkForNewMessageWait >= 100) {
//This is very expensive
ipcRenderer.send("request-update-unread-messages");
- checkForNewMessageWait=-1;
+ checkForNewMessageWait = -1;
}
checkForNewMessageWait++;
// update FFT
@@ -2436,15 +2443,16 @@ function updateHeardStations(arg) {
timestampRaw = arg.stations[i]["timestamp"];
var datetime = new Date(timestampRaw * 1000).toLocaleString(
- navigator.language,{
- hourCycle: 'h23',
+ navigator.language,
+ {
+ hourCycle: "h23",
year: "numeric",
month: "2-digit",
day: "2-digit",
hour: "2-digit",
minute: "2-digit",
- second: "2-digit"
- }
+ second: "2-digit",
+ }
);
//var hours = date.getHours();
//var minutes = "0" + date.getMinutes();
@@ -2767,7 +2775,7 @@ ipcRenderer.on("action-update-tnc-connection", (event, arg) => {
set_CPU_mode();
//GUI will auto connect to TNC if already running, if that is the case increment start count if 0
- if (tncStartCount==0) tncStartCount++;
+ if (tncStartCount == 0) tncStartCount++;
} else {
/*
document.getElementById('hamlib_deviceid').disabled = false;
@@ -2922,21 +2930,17 @@ ipcRenderer.on("run-tnc-command-fec-iswriting", (event) => {
});
//Change background color of RF Chat button if new messages are available
-ipcRenderer.on("action-update-unread-messages-main", (event,data) => {
+ipcRenderer.on("action-update-unread-messages-main", (event, data) => {
//Do something
- if (data == true)
- {
- document.getElementById("openRFChat").classList.add("btn-warning")
- document.getElementById("openRFChat").classList.remove("btn-secondary")
- }
- else
- {
- document.getElementById("openRFChat").classList.remove("btn-warning")
- document.getElementById("openRFChat").classList.add("btn-secondary")
+ if (data == true) {
+ document.getElementById("openRFChat").classList.add("btn-warning");
+ document.getElementById("openRFChat").classList.remove("btn-secondary");
+ } else {
+ document.getElementById("openRFChat").classList.remove("btn-warning");
+ document.getElementById("openRFChat").classList.add("btn-secondary");
}
});
-
ipcRenderer.on("run-tnc-command", (event, arg) => {
if (arg.command == "enable_mesh") {
@@ -3133,7 +3137,7 @@ ipcRenderer.on("action-show-cq-toast-received", (event, data) => {
let dxcallsign = data["data"][0]["dxcallsign"];
let dxgrid = data["data"][0]["dxgrid"];
let content = `cq from ${dxcallsign} (${dxgrid})`;
- showOsPopUp("CQ from " + dxcallsign,"Say hello!");
+ showOsPopUp("CQ from " + dxcallsign, "Say hello!");
displayToast(
(type = "success"),
(icon = "bi-broadcast"),
@@ -3819,14 +3823,13 @@ function autostart_tnc() {
if (config.auto_start == 1) {
//Now start TNC
document.getElementById("startTNC").click();
-}
+ }
}
//Have the operating system show a notification popup
-function showOsPopUp(title, message)
-{
- if (config.notification == 0) return;
+function showOsPopUp(title, message) {
+ if (config.enable_sys_notification == 0) return;
const NOTIFICATION_TITLE = title;
const NOTIFICATION_BODY = message;
new Notification(NOTIFICATION_TITLE, { body: NOTIFICATION_BODY });
-}
\ No newline at end of file
+}
diff --git a/gui/src/chat-module.html b/gui/src/chat-module.html
index 3447b6e6..54eee4d6 100644
--- a/gui/src/chat-module.html
+++ b/gui/src/chat-module.html
@@ -161,7 +161,21 @@
id="chkMessage"
/>
+
+
+
@@ -247,9 +261,11 @@
class="dropdown-item bg-danger text-white"
id="delete_selected_chat"
href="#"
- >Delete chat
+ Delete chat
+
-
-
-
------
+ class="input-group-text ms-2"
+ id="txtConnectedWithChat"
+ data-bs-toggle="tooltip"
+ data-bs-trigger="hover"
+ title="Connected with"
+ >------
diff --git a/gui/src/index.html b/gui/src/index.html
index 685683f0..1298b172 100644
--- a/gui/src/index.html
+++ b/gui/src/index.html
@@ -3800,6 +3800,20 @@
+
+
+
+