diff --git a/gui/preload-chat.js b/gui/preload-chat.js
index da8013b0..2f8a0bd3 100644
--- a/gui/preload-chat.js
+++ b/gui/preload-chat.js
@@ -3,85 +3,288 @@ const {
ipcRenderer
} = require('electron')
+const { v4: uuidv4 } = require('uuid');
+
// https://stackoverflow.com/a/26227660
var appDataFolder = process.env.APPDATA || (process.platform == 'darwin' ? process.env.HOME + '/Library/Application Support' : process.env.HOME + "/.config")
var configFolder = path.join(appDataFolder, "FreeDATA");
var configPath = path.join(configFolder, 'config.json')
const config = require(configPath);
-var chatDB = path.join(configFolder, 'chatDB.json')
+
+// set date format
+const dateFormat = new Intl.DateTimeFormat('en-GB', {
+ timeStyle: 'long',
+ dateStyle: 'full'
+});
+
+// split character
+const split_char = '\0;'
+
+
+var chatDB = path.join(configFolder, 'chatDB')
+
+// ---- MessageDB
+var PouchDB = require('pouchdb');
+var db = new PouchDB(chatDB);
+
+
+
+// get all messages from database
+//var messages = db.get("messages").value()
+
+// get all dxcallsigns in database
+
+
+
+var dxcallsigns = new Set();
+
+db.allDocs({
+ include_docs: true,
+ attachments: true
+}).then(function (result) {
+ // handle result
+ // get all dxcallsigns and append to list
+ result.rows.forEach(function(item) {
+ update_chat(item.doc)
+ });
+
+}).catch(function (err) {
+ console.log(err);
+});
+
// WINDOW LISTENER
window.addEventListener('DOMContentLoaded', () => {
+
+
+
+
// SEND MSG
document.getElementById("sendMessage").addEventListener("click", () => {
- dxcallsign = document.getElementById('chatModuleDxCall').value
+ var dxcallsign = document.getElementById('chatModuleDxCall').value
+ dxcallsign = dxcallsign.toUpperCase()
message = document.getElementById('chatModuleMessage').value
-
+ console.log(dxcallsign)
let Data = {
command: "send_message",
- dxcallsign : dxcallsign.toUpperCase(),
- mode : 12,
+ dxcallsign : dxcallsign,
+ mode : 255,
frames : 1,
data : message,
checksum : '123'
};
- ipcRenderer.send('run-tnc-command', Data);
+ ipcRenderer.send('run-tnc-command', Data);
+
+
+ var uuid = uuidv4();
+ db.post({
+ _id: uuid,
+ timestamp: Math.floor(Date.now() / 1000),
+ dxcallsign: dxcallsign,
+ dxgrid: 'NULL',
+ msg: message,
+ checksum: 'NULL',
+ type: "transmit"
+ }).then(function (response) {
+ // handle response
+ console.log("new database entry")
+ console.log(response)
+
+ }).catch(function (err) {
+ console.log(err);
+ });
+
+
+
+
+ db.get(uuid).then(function (doc) {
+ // handle doc
+ update_chat(doc)
+ }).catch(function (err) {
+ console.log(err);
+ });
+
+
+
+
+
+
})
-})
-ipcRenderer.on('action-update-rx-msg-buffer', (event, arg) => {
- var data = arg.data
- var tbl = document.getElementById("rx-msg-data");
- document.getElementById("rx-msg-data").innerHTML = ''
-
+
+
+});
+
+ipcRenderer.on('action-new-msg-received', (event, arg) => {
+ //console.log(arg.data)
+ var new_msg = arg.data
+ new_msg.forEach(function(item) {
+ //console.log(item)
+ //for (i = 0; i < arg.data.length; i++) {
+
+ let obj = new Object();
+
+ var encoded_data = atob(item.data);
+ var splitted_data = encoded_data.split(split_char)
+
+ //obj.uuid = item.uuid;
+ item.checksum = splitted_data[2]
+ item.msg = splitted_data[3]
+ //obj.dxcallsign = item.dxcallsign;
+ //obj.dxgrid = item.dxgrid;
+ //obj.timestamp = item.timestamp;
+
+
+
+
+
+
+
+ // check if message not exists in database.
+ // this might cause big cpu load of file is getting too big
+ /*
+ if(!JSON.stringify(db.get("messages")).includes(item.uuid)){
+ console.log("new message: " + item);
+ db.get("messages").push(item).save();
+ }
+ */
+
+
+ db.put({
+ _id: item.uuid,
+ timestamp: item.timestamp,
+ dxcallsign: item.dxcallsign,
+ dxgrid: item.dxgrid,
+ msg: item.msg,
+ checksum: item.checksum,
+ type: "received"
+ }).then(function (response) {
+ // handle response
+ console.log("new database entry")
+ console.log(response)
+
+ }).catch(function (err) {
+ console.log(err);
+ });
+
+
+
+
+ db.get(item.uuid).then(function (doc) {
+ // handle doc
+ update_chat(doc)
+ }).catch(function (err) {
+ console.log(err);
+ });
+
+
+
+
+
+
+
+
+
+
+
+
+ });
- for (i = 0; i < arg.data.length; i++) {
+
+
+
+
+
+});
+
+
+
+
+
+
+
+
+// Update chat list
+update_chat = function(obj) {
+
+ var dxcallsign = obj.dxcallsign;
-
-
- // now we update the received files list
-
- var row = document.createElement("tr");
- //https://stackoverflow.com/q/51421470
-
- //https://stackoverflow.com/a/847196
- timestampRaw = arg.data[i]['timestamp']
- var date = new Date(timestampRaw * 1000);
- var hours = date.getHours();
- var minutes = "0" + date.getMinutes();
- var seconds = "0" + date.getSeconds();
- var datetime = hours + ':' + minutes.substr(-2) + ':' + seconds.substr(-2);
-
- var timestamp = document.createElement("td");
- var timestampText = document.createElement('span');
- timestampText.innerText = datetime
- timestamp.appendChild(timestampText);
-
- var dxCall = document.createElement("td");
- var dxCallText = document.createElement('span');
- dxCallText.innerText = arg.data[i]['dxcallsign']
- dxCall.appendChild(dxCallText);
-
- var message = document.createElement("td");
- var messageText = document.createElement('span');
- var messageString = arg.data[i]['rxdata'][0]['d'] //data
- console.log(messageString)
- messageText.innerText = messageString
- message.appendChild(messageText);
-
- row.appendChild(timestamp);
- row.appendChild(dxCall);
- row.appendChild(message);
-
- tbl.appendChild(row);
+ // CALLSIGN LIST
+ if(!(document.getElementById('chat-' + dxcallsign + '-list'))){
+ var new_callsign = `
+
+ ${dxcallsign}
+
+
${timestamp}
+${obj.msg}
+${timestamp}
+${obj.msg}
+