From cf059fab63c0bdeb9ad4e39f846c0c829211d88f Mon Sep 17 00:00:00 2001 From: liamcottle Date: Mon, 20 Jan 2025 12:50:50 +1300 Subject: [PATCH] add button to cancel messages being sent --- meshchat.py | 24 ++++++++++++++ .../messages/ConversationViewer.vue | 33 +++++++++++++++++++ 2 files changed, 57 insertions(+) diff --git a/meshchat.py b/meshchat.py index d226d65..c84027b 100644 --- a/meshchat.py +++ b/meshchat.py @@ -1536,6 +1536,30 @@ class ReticulumMeshChat: "message": "Sending Failed: {}".format(str(e)), }, status=503) + # cancel sending lxmf message + @routes.post("/api/v1/lxmf-messages/{hash}/cancel") + async def index(request): + + # get path params + hash = request.match_info.get("hash", None) + + # convert hash to bytes + hash_as_bytes = bytes.fromhex(hash) + + # cancel outbound message by lxmf message hash + self.message_router.cancel_outbound(hash_as_bytes) + + # get lxmf message from database + lxmf_message = None + db_lxmf_message = database.LxmfMessage.get_or_none(database.LxmfMessage.hash == hash) + if db_lxmf_message is not None: + lxmf_message = self.convert_db_lxmf_message_to_dict(db_lxmf_message) + + return web.json_response({ + "message": "ok", + "lxmf_message": lxmf_message, + }) + # delete lxmf message @routes.delete("/api/v1/lxmf-messages/{hash}") async def index(request): diff --git a/src/frontend/components/messages/ConversationViewer.vue b/src/frontend/components/messages/ConversationViewer.vue index 4dba1fd..8ecacef 100644 --- a/src/frontend/components/messages/ConversationViewer.vue +++ b/src/frontend/components/messages/ConversationViewer.vue @@ -175,6 +175,7 @@ to propagation node {{ chatItem.lxmf_message.progress.toFixed(0) }}% + cancel? retry? @@ -1115,6 +1116,38 @@ export default { this.isSendingMessage = false; } + }, + async cancelSendingMessage(chatItem) { + + // get lxmf message hash else do nothing + const lxmfMessageHash = chatItem.lxmf_message.hash; + if(!lxmfMessageHash){ + return; + } + + try { + + // cancel sending lxmf message + const response = await window.axios.post(`/api/v1/lxmf-messages/${lxmfMessageHash}/cancel`); + + // get lxmf message from response + const lxmfMessage = response.data.lxmf_message; + if(!lxmfMessage){ + return; + } + + // update lxmf message in ui + this.onLxmfMessageUpdated(lxmfMessage); + + } catch(e) { + + // show error + const message = e.response?.data?.message ?? "failed to cancel message"; + DialogUtils.alert(message); + console.log(e); + + } + }, async retrySendingMessage(chatItem) {