From 2c233d30ca8b329cc2ee5de01ae0f3970f4b593c Mon Sep 17 00:00:00 2001 From: Infi Date: Sun, 27 Apr 2025 20:24:06 +0200 Subject: [PATCH] feat: join call route Signed-off-by: Infi --- .../chat/revolt/api/routes/voice/Voice.kt | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 app/src/main/java/chat/revolt/api/routes/voice/Voice.kt diff --git a/app/src/main/java/chat/revolt/api/routes/voice/Voice.kt b/app/src/main/java/chat/revolt/api/routes/voice/Voice.kt new file mode 100644 index 00000000..9f9e5fdb --- /dev/null +++ b/app/src/main/java/chat/revolt/api/routes/voice/Voice.kt @@ -0,0 +1,35 @@ +package chat.revolt.api.routes.voice + +import chat.revolt.api.RevoltError +import chat.revolt.api.RevoltHttp +import chat.revolt.api.RevoltJson +import chat.revolt.api.api +import io.ktor.client.request.post +import io.ktor.client.request.setBody +import io.ktor.client.statement.bodyAsText +import io.ktor.http.ContentType +import io.ktor.http.contentType +import kotlinx.serialization.Serializable +import kotlinx.serialization.SerializationException + +@Serializable +data class JoinCallResponse( + val token: String, + val url: String, +) + +suspend fun joinCall(channelId: String, nodeName: String): JoinCallResponse { + val response = RevoltHttp.post("/channels/$channelId/join_call".api()) { + contentType(ContentType.Application.Json) + setBody(mapOf("node" to nodeName)) + }.bodyAsText() + + try { + val error = RevoltJson.decodeFromString(RevoltError.serializer(), response) + throw Exception(error.type) + } catch (e: SerializationException) { + // Not an error + } + + return RevoltJson.decodeFromString(JoinCallResponse.serializer(), response) +} \ No newline at end of file