From 24e516e6dd6454a300e15d06ecd2da16a5770346 Mon Sep 17 00:00:00 2001 From: Henry-Hiles Date: Thu, 15 Oct 2026 00:44:08 -0400 Subject: [PATCH] store related events for mentions --- lib/controllers/client.dart | 8 +++----- lib/controllers/notifications.dart | 10 ++++++---- lib/models/mentions_response.dart | 16 ++++++++++++++++ 3 files changed, 25 insertions(+), 9 deletions(-) create mode 100644 lib/models/mentions_response.dart diff --git a/lib/controllers/client.dart b/lib/controllers/client.dart index 28da24e..cd9fb92 100644 --- a/lib/controllers/client.dart +++ b/lib/controllers/client.dart @@ -13,6 +13,7 @@ import "package:nexus/models/capabilities.dart"; import "package:nexus/models/content/message.dart"; import "package:nexus/models/event.dart"; import "package:nexus/models/event_context.dart"; +import "package:nexus/models/mentions_response.dart"; import "package:nexus/models/gomuks_config.dart"; import "package:nexus/models/oauth_auth_code_response.dart"; import "package:nexus/models/open_graph_data.dart"; @@ -214,11 +215,8 @@ class ClientController extends AsyncNotifier { return .new(response?.map((event) => .fromJson(event))); } - Future> getMentions(GetMentionsRequest request) async => .new( - // TODO: Handle `related_events` - ((await _sendCommand("get_mentions", request.toJson()))["events"] as List) - .map((event) => .fromJson(event)), - ); + Future getMentions(GetMentionsRequest request) async => + .fromJson(await _sendCommand("get_mentions", request.toJson())); Future getEvent(GetEventRequest request) async { final json = await _sendCommand("get_event", request.toJson()); diff --git a/lib/controllers/notifications.dart b/lib/controllers/notifications.dart index a9bb89f..4140b66 100644 --- a/lib/controllers/notifications.dart +++ b/lib/controllers/notifications.dart @@ -43,9 +43,9 @@ class NotificationsController(final NotificationsRequest request) ), ); - storeEvents(mentions); + storeEvents(mentions.events.addAll(mentions.relatedEvents)); - return .new(mentions.map((event) => (event.rowId, event.roomId))); + return .new(mentions.events.map((event) => (event.rowId, event.roomId))); } Future loadOlder() async { @@ -76,10 +76,12 @@ class NotificationsController(final NotificationsRequest request) ), ); - storeEvents(newNotifications); + storeEvents( + newNotifications.events.addAll(newNotifications.relatedEvents), + ); return currentNotifications.addAll( - newNotifications.map((event) => (event.rowId, event.roomId)), + newNotifications.events.map((event) => (event.rowId, event.roomId)), ); }); } diff --git a/lib/models/mentions_response.dart b/lib/models/mentions_response.dart new file mode 100644 index 0000000..27b6d10 --- /dev/null +++ b/lib/models/mentions_response.dart @@ -0,0 +1,16 @@ +import "package:fast_immutable_collections/fast_immutable_collections.dart"; +import "package:freezed_annotation/freezed_annotation.dart"; +import "package:nexus/models/event.dart"; + +part "mentions_response.freezed.dart"; +part "mentions_response.g.dart"; + +@Freezed(toJson: false, fromJson: false) +@JsonSerializable(createToJson: false) +class const MentionsResponse({ + required final IList events, + final IList relatedEvents = const .empty(), +}) with _$MentionsResponse { + factory MentionsResponse.fromJson(Map json) => + _$MentionsResponseFromJson(json); +}