🐛 Fix message deletion

This commit is contained in:
2025-09-27 16:54:23 +08:00
parent 3f7902e463
commit 838d18013b
3 changed files with 21 additions and 13 deletions

View File

@@ -613,6 +613,16 @@ class MessagesNotifier extends _$MessagesNotifier {
_sortMessages([localMessage, ...currentMessages]), _sortMessages([localMessage, ...currentMessages]),
); );
} }
switch (remoteMessage.type) {
case "messages.delete":
await receiveMessageDeletion(
remoteMessage.meta['message_id'] ?? remoteMessage.id,
);
case "messages.update":
case "messages.update.links":
await receiveMessageUpdate(remoteMessage);
}
} }
Future<void> receiveMessageUpdate(SnChatMessage remoteMessage) async { Future<void> receiveMessageUpdate(SnChatMessage remoteMessage) async {
@@ -622,8 +632,12 @@ class MessagesNotifier extends _$MessagesNotifier {
name: 'MessagesNotifier', name: 'MessagesNotifier',
); );
final targetId = remoteMessage.meta['message_id'] ?? remoteMessage.id;
final updatedMessage = LocalChatMessage.fromRemoteMessage( final updatedMessage = LocalChatMessage.fromRemoteMessage(
remoteMessage, remoteMessage.copyWith(
id: targetId,
meta: Map.of(remoteMessage.meta)..remove('message_id'),
),
MessageStatus.sent, MessageStatus.sent,
); );
await _database.updateMessage(_database.messageToCompanion(updatedMessage)); await _database.updateMessage(_database.messageToCompanion(updatedMessage));

View File

@@ -280,6 +280,8 @@ class ChatRoomScreen extends HookConsumerWidget {
if (message.chatRoomId != chatRoom.value?.id) return; if (message.chatRoomId != chatRoom.value?.id) return;
switch (pkt.type) { switch (pkt.type) {
case 'messages.new': case 'messages.new':
case 'messages.update':
case 'messages.delete':
if (message.type.startsWith('call')) { if (message.type.startsWith('call')) {
// Handle the ongoing call. // Handle the ongoing call.
ref.invalidate(ongoingCallProvider(message.chatRoomId)); ref.invalidate(ongoingCallProvider(message.chatRoomId));
@@ -287,14 +289,6 @@ class ChatRoomScreen extends HookConsumerWidget {
messagesNotifier.receiveMessage(message); messagesNotifier.receiveMessage(message);
// Send read receipt for new message // Send read receipt for new message
sendReadReceipt(); sendReadReceipt();
case 'messages.update':
messagesNotifier.receiveMessageUpdate(message).then((_) {
messagesNotifier.receiveMessage(message);
});
case 'messages.delete':
messagesNotifier.receiveMessageDeletion(message.id).then((_) {
messagesNotifier.receiveMessage(message);
});
} }
} }

View File

@@ -1,5 +1,6 @@
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
import 'package:gap/gap.dart'; import 'package:gap/gap.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart';
@@ -80,9 +81,8 @@ class PostItemCreator extends HookConsumerWidget {
title: 'copyLink'.tr(), title: 'copyLink'.tr(),
image: MenuImage.icon(Symbols.link), image: MenuImage.icon(Symbols.link),
callback: () { callback: () {
context.pushNamed( Clipboard.setData(
'postDetail', ClipboardData(text: 'https://solian.app/posts/${item.id}'),
pathParameters: {'id': item.id},
); );
}, },
), ),
@@ -95,7 +95,7 @@ class PostItemCreator extends HookConsumerWidget {
borderRadius: BorderRadius.circular(12), borderRadius: BorderRadius.circular(12),
onTap: () { onTap: () {
if (isOpenable) { if (isOpenable) {
context.goNamed('postDetail', pathParameters: {'id': item.id}); context.pushNamed('postDetail', pathParameters: {'id': item.id});
} }
}, },
child: Column( child: Column(