From 29d565fda56e2ef41b00687663dd0dbea44cdc1f Mon Sep 17 00:00:00 2001 From: Henry-Hiles Date: Tue, 14 Jul 2026 15:39:57 -0400 Subject: [PATCH] rework logic in `PinnedEventsController`, make `SetStateEvent.content` a `Content` --- lib/controllers/pinned_events_controller.dart | 57 ++++++++----------- lib/models/requests/set_state_request.dart | 5 +- 2 files changed, 28 insertions(+), 34 deletions(-) diff --git a/lib/controllers/pinned_events_controller.dart b/lib/controllers/pinned_events_controller.dart index 53081ff..aaaebe6 100644 --- a/lib/controllers/pinned_events_controller.dart +++ b/lib/controllers/pinned_events_controller.dart @@ -42,53 +42,46 @@ class PinnedEventsController extends AsyncNotifier> { } Future addPin(Event event) async { - final client = ref.read(ClientController.provider.notifier); final current = await future; - if (current.any((ev) => ev.eventId == event.eventId)) { - return; - } - - final updatedPinnedIds = [ - ...current.map((ev) => ev.eventId), - event.eventId, - ]; - - await client.setState( + return setPinned( .new( - roomId: roomId, - type: EventType.pinnedEvents.type, - stateKey: - "", //The empty string stands for m.room.pinned_events according to matrix spec. - content: {"pinned": updatedPinnedIds}, + pinnedEvents: .new( + current + .map((element) => element.eventId) + .toIList() + .add(event.eventId), + ), ), ); } Future removePin(Event event) async { - final client = ref.read(ClientController.provider.notifier); final current = await future; - if (!current.any((ev) => ev.eventId == event.eventId)) { - return; - } - - final updatedPinnedIds = [ - ...current - .where((ev) => ev.eventId != event.eventId) - .map((ev) => ev.eventId), - ]; - - await client.setState( + return setPinned( .new( - roomId: roomId, - type: EventType.pinnedEvents.type, - stateKey: "", //The empty string stands for m.room.pinned_events according to matrix spec. - content: {"pinned": updatedPinnedIds}, + pinnedEvents: .new( + current + .map((element) => element.eventId) + .toIList() + .remove(event.eventId), + ), ), ); } + Future setPinned(PinnedEventsContent content) => ref + .read(ClientController.provider.notifier) + .setState( + .new( + roomId: roomId, + type: EventType.pinnedEvents.type, + stateKey: "", + content: content, + ), + ); + static final provider = AsyncNotifierProvider.family .autoDispose, String>( PinnedEventsController.new, diff --git a/lib/models/requests/set_state_request.dart b/lib/models/requests/set_state_request.dart index 30f62c3..f504cad 100644 --- a/lib/models/requests/set_state_request.dart +++ b/lib/models/requests/set_state_request.dart @@ -1,4 +1,5 @@ import "package:freezed_annotation/freezed_annotation.dart"; +import "package:nexus/models/content/content.dart"; part "set_state_request.freezed.dart"; part "set_state_request.g.dart"; @@ -8,10 +9,10 @@ abstract class SetStateRequest with _$SetStateRequest { required String roomId, required String type, required String stateKey, - required Map content, + required Content content, @Default(0) int delayMs, }) = _SetStateRequest; factory SetStateRequest.fromJson(Map json) => _$SetStateRequestFromJson(json); -} \ No newline at end of file +}