add redact PL check

This commit is contained in:
Henry Hiles 2026-04-05 22:00:34 -04:00
commit b80bd557dd
Signed by: Henry-Hiles
SSH key fingerprint: SHA256:VKQUdS31Q90KvX7EkKMHMBpUspcmItAh86a+v7PGiIs
3 changed files with 16 additions and 3 deletions

View file

@ -50,6 +50,10 @@ class PowerLevelController extends Notifier<bool> {
};
}
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

View file

@ -63,7 +63,7 @@ class ChatBox extends HookConsumerWidget {
final canSendMessages = ref.watch(
PowerLevelController.provider(
PowerLevelConfig(eventType: "m.room.message"),
PowerLevelConfig(eventType: "m.room.redaction"),
),
);

View file

@ -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(