diff --git a/lib/controllers/client_controller.dart b/lib/controllers/client_controller.dart index 1d844fa..f04dd41 100644 --- a/lib/controllers/client_controller.dart +++ b/lib/controllers/client_controller.dart @@ -170,8 +170,24 @@ class ClientController extends AsyncNotifier { Future sendMessage(SendMessageRequest request) async => Event.fromJson(await _sendCommand("send_message", request.toJson())); - Future sendEvent(SendEventRequest request) async => - Event.fromJson(await _sendCommand("send_event", request.toJson())); + Future sendEvent(SendEventRequest request) async { + final json = request.toJson(); + final content = request.content.toJson(); + + return Event.fromJson( + await _sendCommand("send_event", { + ...json, + "content": { + ...content, + "m.relates_to": { + ...((content["m.relates_to"] as Map?) ?? {}), + "event_id": request.relatesTo, + "rel_type": request.relationType, + }, + }, + }), + ); + } Future setState(SetStateRequest request) async => await _sendCommand("set_state", request.toJson()); diff --git a/lib/controllers/room_chat_controller.dart b/lib/controllers/room_chat_controller.dart index b93885e..e738e09 100644 --- a/lib/controllers/room_chat_controller.dart +++ b/lib/controllers/room_chat_controller.dart @@ -205,15 +205,11 @@ class RoomChatController extends AsyncNotifier?> { .new( roomId: roomId, type: EventType.reaction.type, - content: { - "m.relates_to": { - "event_id": event.eventId, - "rel_type": "m.annotation", - "key": reaction, - }, - }, + content: ReactionContent(key: reaction), synchronous: true, disableEncryption: true, + relatesTo: event.eventId, + relationType: "m.annotation", ), ); } diff --git a/lib/models/content/reaction.dart b/lib/models/content/reaction.dart index 3115ae0..0f81bc0 100644 --- a/lib/models/content/reaction.dart +++ b/lib/models/content/reaction.dart @@ -3,7 +3,7 @@ import "package:nexus/models/content/content.dart"; part "reaction.freezed.dart"; part "reaction.g.dart"; -@freezed +@Freezed(toJson: false) abstract class ReactionContent extends Content with _$ReactionContent { ReactionContent._(); static String? keyJsonFromJson(Map json, String key) => @@ -13,6 +13,11 @@ abstract class ReactionContent extends Content with _$ReactionContent { @JsonKey(readValue: ReactionContent.keyJsonFromJson) String? key, }) = _ReactionContent; + @override + Map toJson() => { + "m.relates_to": {"key": key}, + }; + factory ReactionContent.fromJson(Map json) => _$ReactionContentFromJson(json); } diff --git a/lib/models/requests/send_event_request.dart b/lib/models/requests/send_event_request.dart index da5de32..3721998 100644 --- a/lib/models/requests/send_event_request.dart +++ b/lib/models/requests/send_event_request.dart @@ -1,4 +1,5 @@ import "package:freezed_annotation/freezed_annotation.dart"; +import "package:nexus/models/content/content.dart"; part "send_event_request.freezed.dart"; part "send_event_request.g.dart"; @@ -7,7 +8,9 @@ abstract class SendEventRequest with _$SendEventRequest { const factory SendEventRequest({ required String roomId, required String type, - required Map content, + required Content content, + String? relatesTo, + String? relationType, @Default(false) bool synchronous, @Default(false) bool disableEncryption, }) = _SendEventRequest; diff --git a/lib/widgets/member_list.dart b/lib/widgets/member_list.dart index d910b97..46c56a8 100644 --- a/lib/widgets/member_list.dart +++ b/lib/widgets/member_list.dart @@ -143,8 +143,8 @@ class MemberList extends HookConsumerWidget { if (member.content case MembershipContent content) { showModalBottomSheet( - constraints: BoxConstraints.loose( - Size( + constraints: .loose( + .new( 500, (context.size?.height ?? 1000) - 80, ),