From 9d6eab3a8abca5b4f299a120cf3ee6a618ff8003 Mon Sep 17 00:00:00 2001 From: liamcottle Date: Thu, 13 Feb 2025 17:05:03 +1300 Subject: [PATCH] implement manually retrying failed messages --- README.md | 1 - src/components/messages/MessageViewer.vue | 23 ++++++++++++++++++++--- src/js/Database.js | 15 ++++++++++----- 3 files changed, 30 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 0637f13..e0526e7 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,6 @@ A simple, mobile friendly, web based [MeshCore](https://github.com/ripplebiz/Mes ## TODO -- auto retry sending failed messages up to x attempts - implement group chats ## License diff --git a/src/components/messages/MessageViewer.vue b/src/components/messages/MessageViewer.vue index 63ab1af..c6a77f7 100644 --- a/src/components/messages/MessageViewer.vue +++ b/src/components/messages/MessageViewer.vue @@ -33,7 +33,10 @@
- Failed: {{ message.error }} + + Failed: {{ message.error }} + Retry? + Delivered Sending
@@ -132,7 +135,7 @@ export default { this.messagesSubscription?.unsubscribe(); }, methods: { - async sendMessage() { + async sendMessage(text) { // can't send if not connected if(!GlobalState.connection){ @@ -146,7 +149,7 @@ export default { } // do nothing if message is empty - const newMessageText = this.newMessageText; + const newMessageText = text ?? this.newMessageText; if(newMessageText == null || newMessageText === ""){ return; } @@ -175,6 +178,20 @@ export default { // hide loading this.isSendingMessage = false; + }, + async retrySendingMessage(message) { + + // do nothing if already sending message + if(this.isSendingMessage){ + return; + } + + // delete original message + await Database.Message.deleteMessageById(message.id); + + // resend message + await this.sendMessage(message.text); + }, isMessageInbound: (message) => MessageUtils.isMessageInbound(message), isMessageOutbound: (message) => MessageUtils.isMessageOutbound(message), diff --git a/src/js/Database.js b/src/js/Database.js index 7d53313..7bd0038 100644 --- a/src/js/Database.js +++ b/src/js/Database.js @@ -114,14 +114,19 @@ class Message { $eq: id, }, }, - sort: [ - { - timestamp: "desc", - }, - ], }).exec(); } + static async deleteMessageById(id) { + return await database.messages.findOne({ + selector: { + id: { + $eq: id, + }, + }, + }).incrementalRemove(); + } + // mark a message as delivered by its ack code static async setMessageDeliveredByAckCode(ackCode) {