From 08bb66fbae3dd5d4e9380564359686ccd90ba180 Mon Sep 17 00:00:00 2001
From: Janne Mareike Koschinski <janne@kuschku.de>
Date: Wed, 17 Feb 2021 00:26:09 +0100
Subject: [PATCH] Cleanup session init code

---
 .../protocol/models/HandshakeMessage.kt       |  5 ++--
 .../handshake/SessionInitSerializer.kt        | 26 ++++++++++++++++---
 2 files changed, 25 insertions(+), 6 deletions(-)

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 87d7b95..2f44ba1 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 109cd9f..4e55b55 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(),
     )
   }
-- 
GitLab