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) {