send method

void send({
  1. required MeshDocument thread,
  2. required String path,
  3. required ChatMessage message,
  4. void onMessageSent(
    1. ChatMessage
    )?,
})

Implementation

void send({
  required MeshDocument thread,
  required String path,
  required ChatMessage message,
  void Function(ChatMessage)? onMessageSent,
}) async {
  if (message.text.trim().isNotEmpty || message.attachments.isNotEmpty) {
    final messages = thread.root.getChildren().whereType<MeshElement>().firstWhere((x) => x.tagName == "messages");

    final m = messages.createChildElement("message", {
      "id": const Uuid().v4().toString(),
      "text": message.text,
      "created_at": DateTime.now().toUtc().toIso8601String(),
      "author_name": room.localParticipant!.getAttribute("name"),
      "author_ref": null,
    });

    for (final path in message.attachments) {
      m.createChildElement("file", {"path": path});
    }

    for (final participant in getOnlineParticipants(thread)) {
      room.messaging.sendMessage(
        to: participant,
        type: "chat",
        message: {
          "path": path,
          "text": message.text,
          "attachments": message.attachments.map((a) => {"path": a}).toList(),
        },
      );
    }

    onMessageSent?.call(message);

    clear();
  }
}