diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/HandshakeMessage.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/HandshakeMessage.kt index 87d7b956d518b45207f3fd7ee9d6f330a4af8c65..2f44ba18badc4039a84cf8bc209067ba64635f72 100644 --- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/HandshakeMessage.kt +++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/HandshakeMessage.kt @@ -11,6 +11,7 @@ package de.justjanne.libquassel.protocol.models import de.justjanne.libquassel.protocol.features.FeatureSet +import de.justjanne.libquassel.protocol.models.ids.NetworkId import de.justjanne.libquassel.protocol.variant.QVariantList import de.justjanne.libquassel.protocol.variant.QVariantMap @@ -190,13 +191,13 @@ sealed class HandshakeMessage { * Buffers created or deleted after [SessionInit] will be defined via RPC * messages */ - val bufferInfos: QVariantList?, + val bufferInfos: List<BufferInfo>, /** * List of Ids of Network sync objects existing at the current time. * * Network objects created or modified after [SessionInit] will be defined * via sync updates and RPC identity creation messages. */ - val networkIds: QVariantList? + val networkIds: List<NetworkId> ) : HandshakeMessage() } diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/handshake/SessionInitSerializer.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/handshake/SessionInitSerializer.kt index 109cd9f6c575cfac1bedf13561aec78e3c37185c..4e55b553eda2145d8d6a30395e687f1c556fc33c 100644 --- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/handshake/SessionInitSerializer.kt +++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/handshake/SessionInitSerializer.kt @@ -10,9 +10,13 @@ package de.justjanne.libquassel.protocol.serializers.handshake +import de.justjanne.libquassel.protocol.models.BufferInfo import de.justjanne.libquassel.protocol.models.HandshakeMessage +import de.justjanne.libquassel.protocol.models.ids.NetworkId import de.justjanne.libquassel.protocol.models.types.QtType +import de.justjanne.libquassel.protocol.models.types.QuasselType import de.justjanne.libquassel.protocol.serializers.HandshakeSerializer +import de.justjanne.libquassel.protocol.variant.QVariantList import de.justjanne.libquassel.protocol.variant.QVariantMap import de.justjanne.libquassel.protocol.variant.into import de.justjanne.libquassel.protocol.variant.qVariant @@ -27,8 +31,18 @@ object SessionInitSerializer : HandshakeSerializer<HandshakeMessage.SessionInit> "MsgType" to qVariant(type, QtType.QString), "SessionState" to qVariant( mapOf( - "BufferInfos" to qVariant(data.bufferInfos, QtType.QVariantList), - "NetworkIds" to qVariant(data.networkIds, QtType.QVariantList), + "BufferInfos" to qVariant<QVariantList>( + data.bufferInfos.map { + qVariant(it, QuasselType.BufferInfo) + }, + QtType.QVariantList + ), + "NetworkIds" to qVariant<QVariantList>( + data.networkIds.map { + qVariant(it, QuasselType.NetworkId) + }, + QtType.QVariantList + ), "Identities" to qVariant(data.identities, QtType.QVariantList), ), QtType.QVariantMap @@ -37,8 +51,12 @@ object SessionInitSerializer : HandshakeSerializer<HandshakeMessage.SessionInit> override fun deserialize(data: QVariantMap) = data["SessionState"].into<QVariantMap>().let { HandshakeMessage.SessionInit( - bufferInfos = it?.get("BufferInfos").into(), - networkIds = it?.get("NetworkIds").into(), + bufferInfos = it?.get("BufferInfos").into<QVariantList>()?.mapNotNull { + it.into<BufferInfo>() + }.orEmpty(), + networkIds = it?.get("NetworkIds").into<QVariantList>()?.mapNotNull { + it.into<NetworkId>() + }.orEmpty(), identities = it?.get("Identities").into(), ) }