diff --git a/meshchat.py b/meshchat.py
index 19f136f..08c24a0 100644
--- a/meshchat.py
+++ b/meshchat.py
@@ -1074,6 +1074,7 @@ class ReticulumMeshChat:
"is_incoming": db_lxmf_message.is_incoming,
"state": db_lxmf_message.state,
"progress": db_lxmf_message.progress,
+ "method": db_lxmf_message.method,
"delivery_attempts": db_lxmf_message.delivery_attempts,
"next_delivery_attempt_at": db_lxmf_message.next_delivery_attempt_at,
"title": db_lxmf_message.title,
diff --git a/package-lock.json b/package-lock.json
index e081bab..3d8b71d 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -13,6 +13,7 @@
"click-outside-vue3": "^4.0.1",
"electron-prompt": "^1.7.0",
"mitt": "^3.0.1",
+ "moment": "^2.30.1",
"vis-data": "^7.1.9",
"vis-network": "^9.1.9",
"vite": "^5.4.0",
@@ -3668,6 +3669,14 @@
"node": ">=10"
}
},
+ "node_modules/moment": {
+ "version": "2.30.1",
+ "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz",
+ "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==",
+ "engines": {
+ "node": "*"
+ }
+ },
"node_modules/ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
diff --git a/package.json b/package.json
index 70e47f5..d6fcaa2 100644
--- a/package.json
+++ b/package.json
@@ -97,6 +97,7 @@
"click-outside-vue3": "^4.0.1",
"electron-prompt": "^1.7.0",
"mitt": "^3.0.1",
+ "moment": "^2.30.1",
"vis-data": "^7.1.9",
"vis-network": "^9.1.9",
"vite": "^5.4.0",
diff --git a/src/frontend/components/messages/ConversationViewer.vue b/src/frontend/components/messages/ConversationViewer.vue
index 8ffb179..54a3034 100644
--- a/src/frontend/components/messages/ConversationViewer.vue
+++ b/src/frontend/components/messages/ConversationViewer.vue
@@ -140,7 +140,7 @@
-
{{ chatItem.lxmf_message.state }}
+
{{ chatItem.lxmf_message.state }}
(attempt {{ chatItem.lxmf_message.delivery_attempts + 1 }})
{{ chatItem.lxmf_message.progress.toFixed(0) }}%
retry?
@@ -177,7 +177,7 @@
Signal {{ chatItem.lxmf_message.quality }}% • RSSI {{ chatItem.lxmf_message.rssi }} • SNR {{ chatItem.lxmf_message.snr }}
-
{{ formatSecondsAgo(chatItem.lxmf_message.timestamp) }}
+
{{ formatSecondsAgo(chatItem.lxmf_message.timestamp) }}
@@ -1175,6 +1175,19 @@ export default {
this.$emit("reload-conversations");
},
+ showSentMessageInfo: function(lxmfMessage) {
+ DialogUtils.alert([
+ `Created: ${Utils.convertDateTimeToLocalDateTimeString(new Date(lxmfMessage.created_at))}`,
+ `Method: ${lxmfMessage.method ?? "unknown"}`,
+ ].join("\n"));
+ },
+ showReceivedMessageInfo: function(lxmfMessage) {
+ DialogUtils.alert([
+ `Sent: ${Utils.convertUnixMillisToLocalDateTimeString(lxmfMessage.timestamp * 1000)}`,
+ `Received: ${Utils.convertDateTimeToLocalDateTimeString(new Date(lxmfMessage.created_at))}`,
+ `Method: ${lxmfMessage.method ?? "unknown"}`,
+ ].join("\n"));
+ },
},
computed: {
isMobile() {
diff --git a/src/frontend/js/Utils.js b/src/frontend/js/Utils.js
index af11f13..17bba5e 100644
--- a/src/frontend/js/Utils.js
+++ b/src/frontend/js/Utils.js
@@ -1,3 +1,5 @@
+import moment from "moment";
+
class Utils {
static formatBytes(bytes) {
@@ -84,6 +86,14 @@ class Utils {
return `${paddedMinutes}:${paddedSeconds}`;
}
+ static convertUnixMillisToLocalDateTimeString(unixTimestampInMilliseconds) {
+ return moment(unixTimestampInMilliseconds, "x").local().format('YYYY-MM-DD hh:mm A')
+ }
+
+ static convertDateTimeToLocalDateTimeString(dateTime) {
+ return this.convertUnixMillisToLocalDateTimeString(dateTime.getTime());
+ }
+
static arrayBufferToBase64(arrayBuffer) {
var binary = '';
var bytes = new Uint8Array(arrayBuffer);