From 7c7ed21a962d40b69cc64c5c7a6bb8c2e55371dd Mon Sep 17 00:00:00 2001 From: LittleSheep Date: Fri, 10 Oct 2025 21:50:52 +0800 Subject: [PATCH] :lipstick: Optimize message delete when failed to send --- lib/pods/chat/messages_notifier.dart | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/lib/pods/chat/messages_notifier.dart b/lib/pods/chat/messages_notifier.dart index a296ea42..1009b706 100644 --- a/lib/pods/chat/messages_notifier.dart +++ b/lib/pods/chat/messages_notifier.dart @@ -765,13 +765,34 @@ class MessagesNotifier extends _$MessagesNotifier { Future deleteMessage(String messageId) async { talker.log('Deleting message $messageId'); + + // Fetch message to check its status before attempting server delete + final message = await fetchMessageById(messageId); + if (message == null) { + talker.log('Message $messageId not found for deletion'); + return; + } + + // Skip server delete for failed messages (never successfully sent) + if (message.status == MessageStatus.failed) { + talker.log('Skipping server delete for failed message $messageId'); + // For failed messages, remove them completely from the active list + _pendingMessages.remove(messageId); + await _database.deleteMessage(messageId); + + final currentMessages = state.value ?? []; + final newMessages = + currentMessages.where((m) => m.id != messageId).toList(); + state = AsyncValue.data(newMessages); + return; + } + try { await _apiClient.delete('/sphere/chat/$_roomId/messages/$messageId'); await receiveMessageDeletion(messageId); } catch (err, stackTrace) { talker.log( 'Error deleting message $messageId', - exception: err, stackTrace: stackTrace, );