1
0
Fork 0
forked from Nexus/nexus

Allow sending reactions

(but not redacting them yet)
This commit is contained in:
Henry Hiles 2026-04-12 14:11:18 -04:00
commit 1dcf3018a2
Signed by: Henry-Hiles
SSH key fingerprint: SHA256:VKQUdS31Q90KvX7EkKMHMBpUspcmItAh86a+v7PGiIs
6 changed files with 129 additions and 60 deletions

View file

@ -28,6 +28,7 @@ import "package:nexus/models/profile.dart";
import "package:nexus/models/requests/paginate_request.dart";
import "package:nexus/models/requests/redact_event_request.dart";
import "package:nexus/models/requests/report_request.dart";
import "package:nexus/models/requests/send_event_request.dart";
import "package:nexus/models/requests/send_message_request.dart";
import "package:nexus/models/requests/set_membership_request.dart";
import "package:nexus/models/room.dart";
@ -80,9 +81,13 @@ class ClientController extends AsyncNotifier<int> {
case "send_complete":
final event = Event.fromJson(decodedMuksEvent["event"]);
ref
.watch(NewEventsController.provider(event.roomId).notifier)
.add(IList([event]));
if (event.type == "m.room.message") {
ref
.watch(
NewEventsController.provider(event.roomId).notifier,
)
.add(IList([event]));
}
break;
case "sync_complete":
final syncData = SyncData.fromJson(decodedMuksEvent);
@ -164,6 +169,9 @@ class ClientController extends AsyncNotifier<int> {
Future<Event> sendMessage(SendMessageRequest request) async =>
Event.fromJson(await _sendCommand("send_message", request.toJson()));
Future<Event> sendEvent(SendEventRequest request) async =>
Event.fromJson(await _sendCommand("send_event", request.toJson()));
Future<String?> verify(String recoveryKey) async {
try {
await _sendCommand("verify", {"recovery_key": recoveryKey});

View file

@ -16,6 +16,7 @@ import "package:nexus/models/requests/get_room_state_request.dart";
import "package:nexus/models/requests/paginate_request.dart";
import "package:nexus/models/requests/redact_event_request.dart";
import "package:nexus/models/relation_type.dart";
import "package:nexus/models/requests/send_event_request.dart";
import "package:nexus/models/requests/send_message_request.dart";
import "package:nexus/models/room.dart";
@ -328,6 +329,25 @@ class RoomChatController extends AsyncNotifier<InMemoryChatController> {
return await controller.scrollToMessage(message.id);
}
Future<void> sendReaction(String reaction, Message message) async {
final client = ref.watch(ClientController.provider.notifier);
await client.sendEvent(
SendEventRequest(
roomId: roomId,
type: "m.reaction",
content: {
"m.relates_to": {
"event_id": message.id,
"rel_type": "m.annotation",
"key": reaction,
},
},
disableEncryption: true,
),
);
}
static final provider = AsyncNotifierProvider.family
.autoDispose<RoomChatController, InMemoryChatController, String>(
RoomChatController.new,