mirror of
https://github.com/aljazceru/meshcore-web.git
synced 2025-12-18 16:44:21 +01:00
implement manually retrying failed messages
This commit is contained in:
@@ -4,7 +4,6 @@ A simple, mobile friendly, web based [MeshCore](https://github.com/ripplebiz/Mes
|
|||||||
|
|
||||||
## TODO
|
## TODO
|
||||||
|
|
||||||
- auto retry sending failed messages up to x attempts
|
|
||||||
- implement group chats
|
- implement group chats
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|||||||
@@ -33,7 +33,10 @@
|
|||||||
|
|
||||||
<!-- state label -->
|
<!-- state label -->
|
||||||
<div class="my-auto">
|
<div class="my-auto">
|
||||||
<span v-if="isMessageFailed(message)">Failed: {{ message.error }}</span>
|
<span v-if="isMessageFailed(message)" class="flex space-x-1">
|
||||||
|
<span>Failed: {{ message.error }}</span>
|
||||||
|
<span @click="retrySendingMessage(message)" class="text-blue-500 underline cursor-pointer">Retry?</span>
|
||||||
|
</span>
|
||||||
<span v-else-if="isMessageDelivered(message)">Delivered</span>
|
<span v-else-if="isMessageDelivered(message)">Delivered</span>
|
||||||
<span v-else>Sending</span>
|
<span v-else>Sending</span>
|
||||||
</div>
|
</div>
|
||||||
@@ -132,7 +135,7 @@ export default {
|
|||||||
this.messagesSubscription?.unsubscribe();
|
this.messagesSubscription?.unsubscribe();
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
async sendMessage() {
|
async sendMessage(text) {
|
||||||
|
|
||||||
// can't send if not connected
|
// can't send if not connected
|
||||||
if(!GlobalState.connection){
|
if(!GlobalState.connection){
|
||||||
@@ -146,7 +149,7 @@ export default {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// do nothing if message is empty
|
// do nothing if message is empty
|
||||||
const newMessageText = this.newMessageText;
|
const newMessageText = text ?? this.newMessageText;
|
||||||
if(newMessageText == null || newMessageText === ""){
|
if(newMessageText == null || newMessageText === ""){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -175,6 +178,20 @@ export default {
|
|||||||
// hide loading
|
// hide loading
|
||||||
this.isSendingMessage = false;
|
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),
|
isMessageInbound: (message) => MessageUtils.isMessageInbound(message),
|
||||||
isMessageOutbound: (message) => MessageUtils.isMessageOutbound(message),
|
isMessageOutbound: (message) => MessageUtils.isMessageOutbound(message),
|
||||||
|
|||||||
@@ -114,14 +114,19 @@ class Message {
|
|||||||
$eq: id,
|
$eq: id,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
sort: [
|
|
||||||
{
|
|
||||||
timestamp: "desc",
|
|
||||||
},
|
|
||||||
],
|
|
||||||
}).exec();
|
}).exec();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static async deleteMessageById(id) {
|
||||||
|
return await database.messages.findOne({
|
||||||
|
selector: {
|
||||||
|
id: {
|
||||||
|
$eq: id,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}).incrementalRemove();
|
||||||
|
}
|
||||||
|
|
||||||
// mark a message as delivered by its ack code
|
// mark a message as delivered by its ack code
|
||||||
static async setMessageDeliveredByAckCode(ackCode) {
|
static async setMessageDeliveredByAckCode(ackCode) {
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user