Add delete button

This commit is contained in:
Henry Hiles 2025-11-28 19:01:29 -05:00
commit 39a3622af5
No known key found for this signature in database
2 changed files with 98 additions and 26 deletions

View file

@ -18,17 +18,27 @@ class RoomChatController extends AsyncNotifier<ChatController> {
ref.onDispose(
room.client.onTimelineEvent.stream.listen((event) async {
if (event.roomId != room.id) return;
final message = await event.toMessage();
if (message != null) {
if (event.relationshipType == RelationshipTypes.edit) {
final controller = await future;
final oldMessage = controller.messages.firstWhereOrNull(
(element) => element.id == event.relationshipEventId,
);
if (oldMessage == null) return;
await updateMessage(oldMessage, message);
} else {
await insertMessage(message);
if (event.type == EventTypes.Redaction) {
final controller = await future;
await controller.removeMessage(
controller.messages.firstWhere(
(message) => message.id == event.redacts,
),
);
} else {
final message = await event.toMessage();
if (message != null) {
if (event.relationshipType == RelationshipTypes.edit) {
final controller = await future;
final oldMessage = controller.messages.firstWhereOrNull(
(element) => element.id == event.relationshipEventId,
);
if (oldMessage == null) return;
await updateMessage(oldMessage, message);
} else {
await insertMessage(message);
}
}
}
}).cancel,
@ -53,6 +63,12 @@ class RoomChatController extends AsyncNotifier<ChatController> {
: controller.updateMessage(oldMessage, message);
}
Future<void> deleteMessage(Message message, {String? reason}) async {
final controller = await future;
await controller.removeMessage(message);
await room.redactEvent(message.id, reason: reason);
}
Future<void> loadOlder() async {
final controller = await future;
final response = await ref