From 177c057337bdd8d4063856bf364155429417cd09 Mon Sep 17 00:00:00 2001 From: Henry-Hiles Date: Mon, 6 Jul 2026 20:11:19 -0400 Subject: [PATCH] cleanup PinnedEventsController --- lib/controllers/pinned_events_controller.dart | 45 +++++-------------- lib/models/content/pinned_events.dart | 5 ++- 2 files changed, 14 insertions(+), 36 deletions(-) diff --git a/lib/controllers/pinned_events_controller.dart b/lib/controllers/pinned_events_controller.dart index 909bbfa..54d6196 100644 --- a/lib/controllers/pinned_events_controller.dart +++ b/lib/controllers/pinned_events_controller.dart @@ -1,7 +1,7 @@ -import "package:collection/collection.dart"; import "package:fast_immutable_collections/fast_immutable_collections.dart"; import "package:hooks_riverpod/hooks_riverpod.dart"; import "package:nexus/controllers/client_controller.dart"; +import "package:nexus/controllers/event_controller.dart"; import "package:nexus/controllers/rooms_controller.dart"; import "package:nexus/models/content/content.dart"; import "package:nexus/models/content/pinned_events.dart"; @@ -26,42 +26,19 @@ class PinnedEventsController extends AsyncNotifier> { if (pinnedStateEvent == null) return .new(); - final pinnedContent = switch (pinnedStateEvent.content) { - PinnedEventsContent content => content, - _ => null, - }; - - if (pinnedContent == null || pinnedContent.pinned.isEmpty) { - return .new(); - } - - final localEvents = []; - final missingIds = []; - - for (final eventId in pinnedContent.pinned) { - final localEvent = room.events.values.firstWhereOrNull( - (e) => e.eventId == eventId, - ); - - if (localEvent != null) { - localEvents.add(localEvent); - } else { - missingIds.add(eventId); - } - } - - if (missingIds.isNotEmpty) { - final client = ref.read(ClientController.provider.notifier); - final fetched = await Future.wait( - missingIds.map( - (id) => client.getEvent(.new(roomId: roomId, eventId: id)), + if (pinnedStateEvent.content case PinnedEventsContent content) { + return (await Future.wait( + content.pinnedEvents.map( + (eventId) => ref.watch( + EventController.provider( + .new(eventId: eventId, roomId: roomId), + ).future, + ), ), - ); - - localEvents.addAll(fetched.whereType()); + )).nonNulls.toIList(); } - return localEvents.toIList(); + return .new(); } Future togglePin(Event event) async { diff --git a/lib/models/content/pinned_events.dart b/lib/models/content/pinned_events.dart index d17a0de..8aea838 100644 --- a/lib/models/content/pinned_events.dart +++ b/lib/models/content/pinned_events.dart @@ -7,8 +7,9 @@ part "pinned_events.g.dart"; @freezed abstract class PinnedEventsContent extends Content with _$PinnedEventsContent { PinnedEventsContent._(); - factory PinnedEventsContent({@Default(IList.empty()) IList pinned}) = - _PinnedEventsContent; + factory PinnedEventsContent({ + @Default(IList.empty()) @JsonKey(name: "pinned") IList pinnedEvents, + }) = _PinnedEventsContent; factory PinnedEventsContent.fromJson(Map json) => _$PinnedEventsContentFromJson(json);