From fd8d22b17034352a4be25cf456e088e9c642816c Mon Sep 17 00:00:00 2001 From: Infi Date: Sun, 27 Apr 2025 20:23:53 +0200 Subject: [PATCH] feat: early definition of ready event with voice state Signed-off-by: Infi --- .../chat/revolt/api/internals/Permissions.kt | 6 ++++-- .../revolt/api/realtime/RealtimeSocket.kt | 13 ++++++++---- .../frames/receivable/ReceivableFrames.kt | 4 +++- .../java/chat/revolt/api/schemas/Voice.kt | 20 +++++++++++++++++++ 4 files changed, 36 insertions(+), 7 deletions(-) create mode 100644 app/src/main/java/chat/revolt/api/schemas/Voice.kt diff --git a/app/src/main/java/chat/revolt/api/internals/Permissions.kt b/app/src/main/java/chat/revolt/api/internals/Permissions.kt index a7e0cc7b..6c79e9c7 100644 --- a/app/src/main/java/chat/revolt/api/internals/Permissions.kt +++ b/app/src/main/java/chat/revolt/api/internals/Permissions.kt @@ -41,9 +41,10 @@ enum class PermissionBit(val value: Long) { MuteMembers(1L shl 33), DeafenMembers(1L shl 34), MoveMembers(1L shl 35), + Listen(1L shl 36), // * Misc. permissions - // % Bits 36 to 52: free area + // % Bits 37 to 52: free area // % Bits 53 to 64: do not use // * Grant all permissions @@ -85,7 +86,8 @@ object BitDefaults { PermissionBit.SendEmbeds + PermissionBit.UploadFiles + PermissionBit.Connect + - PermissionBit.Speak + PermissionBit.Speak + + PermissionBit.Listen val SavedMessages = PermissionBit.GrantAllSafe.value diff --git a/app/src/main/java/chat/revolt/api/realtime/RealtimeSocket.kt b/app/src/main/java/chat/revolt/api/realtime/RealtimeSocket.kt index c31dd0c6..ec570cc8 100644 --- a/app/src/main/java/chat/revolt/api/realtime/RealtimeSocket.kt +++ b/app/src/main/java/chat/revolt/api/realtime/RealtimeSocket.kt @@ -50,6 +50,7 @@ import io.ktor.websocket.readText import io.ktor.websocket.send import kotlinx.coroutines.channels.consumeEach import kotlinx.serialization.SerializationException +import logcat.logcat enum class DisconnectionState { Disconnected, @@ -146,10 +147,14 @@ object RealtimeSocket { "Ready" -> { val readyFrame = RevoltJson.decodeFromString(ReadyFrame.serializer(), rawFrame) - Log.d( - "RealtimeSocket", - "Received ready frame with ${readyFrame.users.size} users, ${readyFrame.servers.size} servers, ${readyFrame.channels.size} channels, and ${readyFrame.emojis.size} emojis." - ) + + logcat { + "Received ready frame with ${readyFrame.users.size} users, " + + "${readyFrame.servers.size} servers, " + + "${readyFrame.channels.size} channels, " + + "${readyFrame.emojis.size} emojis, " + + "and ${readyFrame.voiceStates.size} voice states." + } Log.d("RealtimeSocket", "Adding users to cache.") val userMap = readyFrame.users.associateBy { it.id!! } diff --git a/app/src/main/java/chat/revolt/api/realtime/frames/receivable/ReceivableFrames.kt b/app/src/main/java/chat/revolt/api/realtime/frames/receivable/ReceivableFrames.kt index ad822047..93aa3541 100644 --- a/app/src/main/java/chat/revolt/api/realtime/frames/receivable/ReceivableFrames.kt +++ b/app/src/main/java/chat/revolt/api/realtime/frames/receivable/ReceivableFrames.kt @@ -1,6 +1,7 @@ package chat.revolt.api.realtime.frames.receivable import chat.revolt.api.schemas.Channel +import chat.revolt.api.schemas.ChannelVoiceState import chat.revolt.api.schemas.Embed import chat.revolt.api.schemas.Emoji import chat.revolt.api.schemas.Member @@ -42,7 +43,8 @@ data class ReadyFrame( val users: List, val servers: List, val channels: List, - val emojis: List + val emojis: List, + @SerialName("voice_states") val voiceStates: List, ) typealias MessageFrame = Message diff --git a/app/src/main/java/chat/revolt/api/schemas/Voice.kt b/app/src/main/java/chat/revolt/api/schemas/Voice.kt new file mode 100644 index 00000000..ba643d4d --- /dev/null +++ b/app/src/main/java/chat/revolt/api/schemas/Voice.kt @@ -0,0 +1,20 @@ +package chat.revolt.api.schemas + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +data class ChannelVoiceState( + val id: String, + val participants: List, + val node: String, +) + +@Serializable +data class UserVoiceState( + val id: String, + @SerialName("is_receiving") val isReceiving: Boolean, + @SerialName("is_publishing") val isPublishing: Boolean, + val screensharing: Boolean, + val camera: Boolean, +) \ No newline at end of file