From b80bd557dde31cb8189550a74eac9dd23b1f6686 Mon Sep 17 00:00:00 2001 From: Henry-Hiles Date: Sun, 5 Apr 2026 22:00:34 -0400 Subject: [PATCH] add redact PL check --- lib/controllers/power_level_controller.dart | 4 ++++ lib/widgets/chat_page/composer/chat_box.dart | 2 +- lib/widgets/chat_page/room_chat.dart | 13 +++++++++++-- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/lib/controllers/power_level_controller.dart b/lib/controllers/power_level_controller.dart index 26221e1..41b5f19 100644 --- a/lib/controllers/power_level_controller.dart +++ b/lib/controllers/power_level_controller.dart @@ -50,6 +50,10 @@ class PowerLevelController extends Notifier { }; } + if (config.eventType == "m.room.redaction") { + return userLevel >= (event.content["redact"] as int? ?? 50); + } + final requiredLevel = events.containsKey(config.eventType) ? (events[config.eventType] as int) : (config.isStateEvent diff --git a/lib/widgets/chat_page/composer/chat_box.dart b/lib/widgets/chat_page/composer/chat_box.dart index 41bc123..1cf03d9 100644 --- a/lib/widgets/chat_page/composer/chat_box.dart +++ b/lib/widgets/chat_page/composer/chat_box.dart @@ -63,7 +63,7 @@ class ChatBox extends HookConsumerWidget { final canSendMessages = ref.watch( PowerLevelController.provider( - PowerLevelConfig(eventType: "m.room.message"), + PowerLevelConfig(eventType: "m.room.redaction"), ), ); diff --git a/lib/widgets/chat_page/room_chat.dart b/lib/widgets/chat_page/room_chat.dart index 9c950e9..b6891f0 100644 --- a/lib/widgets/chat_page/room_chat.dart +++ b/lib/widgets/chat_page/room_chat.dart @@ -8,10 +8,12 @@ import "package:flyer_chat_system_message/flyer_chat_system_message.dart"; import "package:hooks_riverpod/hooks_riverpod.dart"; import "package:nexus/controllers/client_controller.dart"; import "package:nexus/controllers/client_state_controller.dart"; +import "package:nexus/controllers/power_level_controller.dart"; import "package:nexus/controllers/selected_room_controller.dart"; import "package:nexus/controllers/room_chat_controller.dart"; import "package:nexus/helpers/extensions/better_when.dart"; import "package:nexus/helpers/extensions/show_context_menu.dart"; +import "package:nexus/models/configs/power_level_config.dart"; import "package:nexus/models/relation_type.dart"; import "package:nexus/models/requests/report_request.dart"; import "package:nexus/widgets/chat_page/composer/chat_box.dart"; @@ -98,7 +100,11 @@ class RoomChat extends HookConsumerWidget { }, child: ListTile(leading: Icon(Icons.edit), title: Text("Edit")), ), - if (isSentByMe) // TODO: Or if user has permission to redact others' messages + if (ref.watch( + PowerLevelController.provider( + PowerLevelConfig(eventType: "m.room.redaction"), + ), + )) PopupMenuItem( onTap: () => showDialog( context: context, @@ -145,7 +151,10 @@ class RoomChat extends HookConsumerWidget { }, ), ), - child: ListTile(leading: Icon(Icons.delete), title: Text("Delete")), + child: ListTile( + leading: Icon(Icons.delete, color: danger), + title: Text("Delete", style: TextStyle(color: danger)), + ), ), PopupMenuItem( onTap: () => showDialog(