add most models needed for invites

This commit is contained in:
Henry Hiles 2026-10-06 20:52:56 -04:00
commit 0df2d8f78b
Signed by: Henry-Hiles
SSH key fingerprint: SHA256:VKQUdS31Q90KvX7EkKMHMBpUspcmItAh86a+v7PGiIs
7 changed files with 61 additions and 4 deletions

View file

@ -25,6 +25,7 @@ import "package:nexus/models/requests/get_event_context.dart";
import "package:nexus/models/requests/get_mentions.dart";
import "package:nexus/models/requests/get_related_events.dart";
import "package:nexus/models/requests/get_room_state.dart";
import "package:nexus/models/requests/get_room_summary.dart";
import "package:nexus/models/requests/join_room.dart";
import "package:nexus/models/profile_response.dart";
import "package:nexus/models/requests/oauth/exchange_token.dart";
@ -188,7 +189,7 @@ class ClientController extends AsyncNotifier<int> {
Future<String> joinRoom(JoinRoomRequest request) async =>
(await _sendCommand("join_room", request.toJson()))["room_id"];
Future<RoomSummary> getRoomSummary(JoinRoomRequest request) async =>
Future<RoomSummary> getRoomSummary(GetRoomSummary request) async =>
.fromJson(await _sendCommand("get_room_summary", request.toJson()));
Future<void> leaveRoom(Room room) async {

View file

@ -0,0 +1,15 @@
import "package:fast_immutable_collections/fast_immutable_collections.dart";
import "package:flutter_riverpod/flutter_riverpod.dart";
import "package:nexus/models/invited_room.dart";
class InvitedRoomsController extends Notifier<IList<InvitedRoom>> {
@override
IList<InvitedRoom> build() => .new();
void set(IList<InvitedRoom> newState) => state = newState;
static final provider =
NotifierProvider<InvitedRoomsController, IList<InvitedRoom>>(
InvitedRoomsController.new,
);
}

View file

@ -1,16 +1,16 @@
import "package:hooks_riverpod/hooks_riverpod.dart";
import "package:nexus/controllers/client.dart";
import "package:nexus/models/requests/join_room.dart";
import "package:nexus/models/requests/get_room_summary.dart";
import "package:nexus/models/room_summary.dart";
class RoomSummaryController(final JoinRoomRequest request)
class RoomSummaryController(final GetRoomSummary request)
extends AsyncNotifier<RoomSummary> {
@override
Future<RoomSummary> build() =>
ref.read(ClientController.provider.notifier).getRoomSummary(request);
static final provider = AsyncNotifierProvider.family
.autoDispose<RoomSummaryController, RoomSummary, JoinRoomRequest>(
.autoDispose<RoomSummaryController, RoomSummary, GetRoomSummary>(
RoomSummaryController.new,
);
}

View file

@ -0,0 +1,21 @@
import "package:fast_immutable_collections/fast_immutable_collections.dart";
import "package:freezed_annotation/freezed_annotation.dart";
import "package:nexus/models/epoch_date_time_converter.dart";
import "package:nexus/models/event.dart";
part "invited_room.freezed.dart";
part "invited_room.g.dart";
@Freezed(toJson: false, fromJson: false)
@JsonSerializable()
class const InvitedRoom({
required final String roomId,
@EpochDateTimeConverter() required final DateTime createdAt,
// TODO: This is DBEvent, should be event.Event
required final IList<Event> inviteState,
}) with _$InvitedRoom {
Map<String, Object?> toJson() => _$InvitedRoomToJson(this);
factory InvitedRoom.fromJson(Map<String, Object?> json) =>
_$InvitedRoomFromJson(json);
}

View file

@ -0,0 +1,17 @@
import "package:fast_immutable_collections/fast_immutable_collections.dart";
import "package:freezed_annotation/freezed_annotation.dart";
part "get_room_summary.freezed.dart";
part "get_room_summary.g.dart";
@Freezed(toJson: false, fromJson: false)
@JsonSerializable()
class const GetRoomSummary({
required final String roomIdOrAlias,
final IList<String> via = const IList.empty(),
}) with _$GetRoomSummary {
Map<String, Object?> toJson() => _$GetRoomSummaryToJson(this);
factory GetRoomSummary.fromJson(Map<String, Object?> json) =>
_$GetRoomSummaryFromJson(json);
}

View file

@ -9,6 +9,7 @@ part "join_room.g.dart";
class const JoinRoomRequest({
required final String roomIdOrAlias,
final IList<String> via = const IList.empty(),
final bool fromInvite = false,
}) with _$JoinRoomRequest {
Map<String, Object?> toJson() => _$JoinRoomRequestToJson(this);

View file

@ -1,5 +1,6 @@
import "package:fast_immutable_collections/fast_immutable_collections.dart";
import "package:freezed_annotation/freezed_annotation.dart";
import "package:nexus/models/invited_room.dart";
import "package:nexus/models/room.dart";
import "package:nexus/models/space_edge.dart";
@ -12,6 +13,7 @@ class const SyncData({
final bool clearState = false,
final IMap<String, IMap<String, dynamic>> accountData = const IMap.empty(),
final IMap<String, Room> rooms = const IMap.empty(),
final IList<InvitedRoom> invitedRooms = const IList.empty(),
final ISet<String> leftRooms = const ISet.empty(),
final IMap<String, IList<SpaceEdge>>? spaceEdges,
final IList<String>? topLevelSpaces,