🐛 Fix message deletion
This commit is contained in:
@@ -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));
|
||||||
|
@@ -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);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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(
|
||||||
|
Reference in New Issue
Block a user