store related events for mentions

This commit is contained in:
Henry Hiles 2026-10-15 00:44:08 -04:00
commit 24e516e6dd
Signed by: Henry-Hiles
SSH key fingerprint: SHA256:VKQUdS31Q90KvX7EkKMHMBpUspcmItAh86a+v7PGiIs
3 changed files with 25 additions and 9 deletions

View file

@ -13,6 +13,7 @@ import "package:nexus/models/capabilities.dart";
import "package:nexus/models/content/message.dart"; import "package:nexus/models/content/message.dart";
import "package:nexus/models/event.dart"; import "package:nexus/models/event.dart";
import "package:nexus/models/event_context.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/gomuks_config.dart";
import "package:nexus/models/oauth_auth_code_response.dart"; import "package:nexus/models/oauth_auth_code_response.dart";
import "package:nexus/models/open_graph_data.dart"; import "package:nexus/models/open_graph_data.dart";
@ -214,11 +215,8 @@ class ClientController extends AsyncNotifier<int> {
return .new(response?.map((event) => .fromJson(event))); return .new(response?.map((event) => .fromJson(event)));
} }
Future<IList<Event>> getMentions(GetMentionsRequest request) async => .new( Future<MentionsResponse> getMentions(GetMentionsRequest request) async =>
// TODO: Handle `related_events` .fromJson(await _sendCommand("get_mentions", request.toJson()));
((await _sendCommand("get_mentions", request.toJson()))["events"] as List)
.map((event) => .fromJson(event)),
);
Future<Event?> getEvent(GetEventRequest request) async { Future<Event?> getEvent(GetEventRequest request) async {
final json = await _sendCommand("get_event", request.toJson()); final json = await _sendCommand("get_event", request.toJson());

View file

@ -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<void> loadOlder() async { Future<void> loadOlder() async {
@ -76,10 +76,12 @@ class NotificationsController(final NotificationsRequest request)
), ),
); );
storeEvents(newNotifications); storeEvents(
newNotifications.events.addAll(newNotifications.relatedEvents),
);
return currentNotifications.addAll( return currentNotifications.addAll(
newNotifications.map((event) => (event.rowId, event.roomId)), newNotifications.events.map((event) => (event.rowId, event.roomId)),
); );
}); });
} }

View file

@ -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<Event> events,
final IList<Event> relatedEvents = const .empty(),
}) with _$MentionsResponse {
factory MentionsResponse.fromJson(Map<String, Object?> json) =>
_$MentionsResponseFromJson(json);
}