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) final requiredLevel = events.containsKey(config.eventType)
? (events[config.eventType] as int) ? (events[config.eventType] as int)
: (config.isStateEvent : (config.isStateEvent

View file

@ -63,7 +63,7 @@ class ChatBox extends HookConsumerWidget {
final canSendMessages = ref.watch( final canSendMessages = ref.watch(
PowerLevelController.provider( 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:hooks_riverpod/hooks_riverpod.dart";
import "package:nexus/controllers/client_controller.dart"; import "package:nexus/controllers/client_controller.dart";
import "package:nexus/controllers/client_state_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/selected_room_controller.dart";
import "package:nexus/controllers/room_chat_controller.dart"; import "package:nexus/controllers/room_chat_controller.dart";
import "package:nexus/helpers/extensions/better_when.dart"; import "package:nexus/helpers/extensions/better_when.dart";
import "package:nexus/helpers/extensions/show_context_menu.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/relation_type.dart";
import "package:nexus/models/requests/report_request.dart"; import "package:nexus/models/requests/report_request.dart";
import "package:nexus/widgets/chat_page/composer/chat_box.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")), 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( PopupMenuItem(
onTap: () => showDialog( onTap: () => showDialog(
context: context, 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( PopupMenuItem(
onTap: () => showDialog( onTap: () => showDialog(