From 78af7fa28b1cb7504ef3fb0487732168505d696f Mon Sep 17 00:00:00 2001
From: Janne Mareike Koschinski <janne@kuschku.de>
Date: Sun, 28 Feb 2021 22:13:06 +0100
Subject: [PATCH] Reorder sources

---
 .../protocol/models/HandshakeMessage.kt       |   1 +
 .../protocol/models/{ => alias}/Alias.kt      |   2 +-
 .../protocol/models/{ => alias}/Command.kt    |   4 +-
 .../models/{ => dcc}/DccIpDetectionMode.kt    |   2 +-
 .../models/{ => dcc}/DccPortSelectionMode.kt  |   2 +-
 .../models/{ => dcc}/NetworkLayerProtocol.kt  |   2 +-
 .../models/{ => dcc}/TransferDirection.kt     |   2 +-
 .../models/{ => dcc}/TransferIdList.kt        |   2 +-
 .../models/{ => dcc}/TransferStatus.kt        |   2 +-
 .../models/{ => network}/ChannelModeType.kt   |   2 +-
 .../models/{ => network}/ChannelModes.kt      |   3 +-
 .../models/{ => network}/ConnectionState.kt   |   2 +-
 .../models/{ => network}/NetworkInfo.kt       |   2 +-
 .../models/{ => network}/NetworkProxy.kt      |   2 +-
 .../models/{ => network}/NetworkServer.kt     |   2 +-
 .../models/{ => network}/PortDefaults.kt      |   2 +-
 .../models/{ => rules}/HighlightNickType.kt   |   2 +-
 .../models/{ => rules}/HighlightRule.kt       |   2 +-
 .../models/{ => setup}/BackendInfo.kt         |   2 +-
 .../{ => setup}/BackendInfoSerializer.kt      |   3 +-
 .../protocol/models/{ => setup}/SetupEntry.kt |   2 +-
 .../handshake/ClientInitAckSerializer.kt      |   2 +-
 .../quassel/DccIpDetectionModeSerializer.kt   |   2 +-
 .../quassel/DccPortSelectionModeSerializer.kt |   2 +-
 .../quassel/NetworkInfoSerializer.kt          |   4 +-
 .../quassel/NetworkServerSerializer.kt        |   6 +-
 .../quassel/QHostAddressSerializer.kt         |   2 +-
 .../quassel/TransferDirectionSerializer.kt    |   2 +-
 .../quassel/TransferIdListSerializer.kt       |   2 +-
 .../quassel/TransferStatusSerializer.kt       |   2 +-
 .../protocol/syncables/AliasManager.kt        |   4 +-
 .../protocol/syncables/DccConfig.kt           |   4 +-
 .../syncables/HighlightRuleManager.kt         |   4 +-
 .../protocol/syncables/IgnoreListManager.kt   | 185 ++++++++++++++++++
 .../protocol/syncables/IrcChannel.kt          |   4 +-
 .../libquassel/protocol/syncables/Network.kt  |   6 +-
 .../syncables/state/AliasManagerState.kt      |   4 +-
 .../syncables/state/DccConfigState.kt         |   4 +-
 .../state/HighlightRuleManagerState.kt        |   4 +-
 .../syncables/state/IrcChannelState.kt        |   4 +-
 .../protocol/syncables/state/NetworkState.kt  |   6 +-
 .../protocol/syncables/stubs/DccConfigStub.kt |   4 +-
 .../protocol/syncables/stubs/NetworkStub.kt   |   2 +-
 .../syncables/stubs/RpcHandlerStub.kt         |   2 +-
 .../syncables/stubs/TransferManagerStub.kt    |   2 +-
 .../protocol/syncables/stubs/TransferStub.kt  |   4 +-
 .../handshake/ClientInitAckSerializerTest.kt  |   4 +-
 .../DccIpDetectionModeSerializerTest.kt       |   2 +-
 .../DccPortSelectionModeSerializerTest.kt     |   2 +-
 .../quassel/NetworkInfoSerializerTest.kt      |   2 +-
 .../protocol/syncables/NetworkTest.kt         |  73 +------
 .../libquassel/protocol/testutil/Random.kt    |  69 +++++++
 52 files changed, 326 insertions(+), 138 deletions(-)
 rename libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/{ => alias}/Alias.kt (87%)
 rename libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/{ => alias}/Command.kt (77%)
 rename libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/{ => dcc}/DccIpDetectionMode.kt (94%)
 rename libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/{ => dcc}/DccPortSelectionMode.kt (94%)
 rename libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/{ => dcc}/NetworkLayerProtocol.kt (95%)
 rename libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/{ => dcc}/TransferDirection.kt (92%)
 rename libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/{ => dcc}/TransferIdList.kt (89%)
 rename libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/{ => dcc}/TransferStatus.kt (93%)
 rename libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/{ => network}/ChannelModeType.kt (93%)
 rename libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/{ => network}/ChannelModes.kt (95%)
 rename libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/{ => network}/ConnectionState.kt (93%)
 rename libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/{ => network}/NetworkInfo.kt (96%)
 rename libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/{ => network}/NetworkProxy.kt (92%)
 rename libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/{ => network}/NetworkServer.kt (92%)
 rename libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/{ => network}/PortDefaults.kt (87%)
 rename libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/{ => rules}/HighlightNickType.kt (92%)
 rename libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/{ => rules}/HighlightRule.kt (95%)
 rename libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/{ => setup}/BackendInfo.kt (94%)
 rename libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/{ => setup}/BackendInfoSerializer.kt (95%)
 rename libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/{ => setup}/SetupEntry.kt (92%)

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 d7203d8..e903e88 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
@@ -12,6 +12,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.models.setup.BackendInfo
 import de.justjanne.libquassel.protocol.variant.QVariantMap
 
 /**
diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/Alias.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/alias/Alias.kt
similarity index 87%
rename from libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/Alias.kt
rename to libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/alias/Alias.kt
index 12b18d8..5e39197 100644
--- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/Alias.kt
+++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/alias/Alias.kt
@@ -8,7 +8,7 @@
  * obtain one at https://mozilla.org/MPL/2.0/.
  */
 
-package de.justjanne.libquassel.protocol.models
+package de.justjanne.libquassel.protocol.models.alias
 
 data class Alias(
   val name: String?,
diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/Command.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/alias/Command.kt
similarity index 77%
rename from libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/Command.kt
rename to libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/alias/Command.kt
index a33196e..0045236 100644
--- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/Command.kt
+++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/alias/Command.kt
@@ -8,7 +8,9 @@
  * obtain one at https://mozilla.org/MPL/2.0/.
  */
 
-package de.justjanne.libquassel.protocol.models
+package de.justjanne.libquassel.protocol.models.alias
+
+import de.justjanne.libquassel.protocol.models.BufferInfo
 
 data class Command(
   val buffer: BufferInfo,
diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/DccIpDetectionMode.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/dcc/DccIpDetectionMode.kt
similarity index 94%
rename from libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/DccIpDetectionMode.kt
rename to libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/dcc/DccIpDetectionMode.kt
index 98da25b..91f8640 100644
--- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/DccIpDetectionMode.kt
+++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/dcc/DccIpDetectionMode.kt
@@ -8,7 +8,7 @@
  * obtain one at https://mozilla.org/MPL/2.0/.
  */
 
-package de.justjanne.libquassel.protocol.models
+package de.justjanne.libquassel.protocol.models.dcc
 
 /**
  * Mode for detecting the outgoing IP
diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/DccPortSelectionMode.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/dcc/DccPortSelectionMode.kt
similarity index 94%
rename from libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/DccPortSelectionMode.kt
rename to libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/dcc/DccPortSelectionMode.kt
index ac03669..b8de80c 100644
--- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/DccPortSelectionMode.kt
+++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/dcc/DccPortSelectionMode.kt
@@ -8,7 +8,7 @@
  * obtain one at https://mozilla.org/MPL/2.0/.
  */
 
-package de.justjanne.libquassel.protocol.models
+package de.justjanne.libquassel.protocol.models.dcc
 
 /**
  * Mode for selecting the port range for DCC
diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/NetworkLayerProtocol.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/dcc/NetworkLayerProtocol.kt
similarity index 95%
rename from libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/NetworkLayerProtocol.kt
rename to libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/dcc/NetworkLayerProtocol.kt
index b5b973b..5c571fe 100644
--- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/NetworkLayerProtocol.kt
+++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/dcc/NetworkLayerProtocol.kt
@@ -8,7 +8,7 @@
  * obtain one at https://mozilla.org/MPL/2.0/.
  */
 
-package de.justjanne.libquassel.protocol.models
+package de.justjanne.libquassel.protocol.models.dcc
 
 /**
  * Network protocol version
diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/TransferDirection.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/dcc/TransferDirection.kt
similarity index 92%
rename from libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/TransferDirection.kt
rename to libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/dcc/TransferDirection.kt
index 8f28f6e..c81943b 100644
--- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/TransferDirection.kt
+++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/dcc/TransferDirection.kt
@@ -8,7 +8,7 @@
  * obtain one at https://mozilla.org/MPL/2.0/.
  */
 
-package de.justjanne.libquassel.protocol.models
+package de.justjanne.libquassel.protocol.models.dcc
 
 enum class TransferDirection(
   val value: Int,
diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/TransferIdList.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/dcc/TransferIdList.kt
similarity index 89%
rename from libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/TransferIdList.kt
rename to libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/dcc/TransferIdList.kt
index df0d64c..0eefbe5 100644
--- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/TransferIdList.kt
+++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/dcc/TransferIdList.kt
@@ -8,7 +8,7 @@
  * obtain one at https://mozilla.org/MPL/2.0/.
  */
 
-package de.justjanne.libquassel.protocol.models
+package de.justjanne.libquassel.protocol.models.dcc
 
 import java.util.UUID
 
diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/TransferStatus.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/dcc/TransferStatus.kt
similarity index 93%
rename from libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/TransferStatus.kt
rename to libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/dcc/TransferStatus.kt
index 5d90f13..7ef95f9 100644
--- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/TransferStatus.kt
+++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/dcc/TransferStatus.kt
@@ -8,7 +8,7 @@
  * obtain one at https://mozilla.org/MPL/2.0/.
  */
 
-package de.justjanne.libquassel.protocol.models
+package de.justjanne.libquassel.protocol.models.dcc
 
 enum class TransferStatus(
   val value: Int,
diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/ChannelModeType.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/network/ChannelModeType.kt
similarity index 93%
rename from libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/ChannelModeType.kt
rename to libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/network/ChannelModeType.kt
index 6e0f662..7488fc9 100644
--- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/ChannelModeType.kt
+++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/network/ChannelModeType.kt
@@ -8,7 +8,7 @@
  * obtain one at https://mozilla.org/MPL/2.0/.
  */
 
-package de.justjanne.libquassel.protocol.models
+package de.justjanne.libquassel.protocol.models.network
 
 enum class ChannelModeType(
   /**
diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/ChannelModes.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/network/ChannelModes.kt
similarity index 95%
rename from libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/ChannelModes.kt
rename to libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/network/ChannelModes.kt
index cd07ccf..2b2ddab 100644
--- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/ChannelModes.kt
+++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/network/ChannelModes.kt
@@ -8,8 +8,9 @@
  * obtain one at https://mozilla.org/MPL/2.0/.
  */
 
-package de.justjanne.libquassel.protocol.models
+package de.justjanne.libquassel.protocol.models.network
 
+import de.justjanne.libquassel.protocol.models.QStringList
 import de.justjanne.libquassel.protocol.models.types.QtType
 import de.justjanne.libquassel.protocol.variant.QVariantMap
 import de.justjanne.libquassel.protocol.variant.into
diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/ConnectionState.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/network/ConnectionState.kt
similarity index 93%
rename from libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/ConnectionState.kt
rename to libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/network/ConnectionState.kt
index a0bfc58..8176f81 100644
--- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/ConnectionState.kt
+++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/network/ConnectionState.kt
@@ -8,7 +8,7 @@
  * obtain one at https://mozilla.org/MPL/2.0/.
  */
 
-package de.justjanne.libquassel.protocol.models
+package de.justjanne.libquassel.protocol.models.network
 
 enum class ConnectionState(
   /**
diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/NetworkInfo.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/network/NetworkInfo.kt
similarity index 96%
rename from libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/NetworkInfo.kt
rename to libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/network/NetworkInfo.kt
index efdda29..580fa93 100644
--- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/NetworkInfo.kt
+++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/network/NetworkInfo.kt
@@ -8,7 +8,7 @@
  * obtain one at https://mozilla.org/MPL/2.0/.
  */
 
-package de.justjanne.libquassel.protocol.models
+package de.justjanne.libquassel.protocol.models.network
 
 import de.justjanne.libquassel.protocol.models.ids.IdentityId
 import de.justjanne.libquassel.protocol.models.ids.NetworkId
diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/NetworkProxy.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/network/NetworkProxy.kt
similarity index 92%
rename from libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/NetworkProxy.kt
rename to libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/network/NetworkProxy.kt
index bafa63f..92545a6 100644
--- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/NetworkProxy.kt
+++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/network/NetworkProxy.kt
@@ -8,7 +8,7 @@
  * obtain one at https://mozilla.org/MPL/2.0/.
  */
 
-package de.justjanne.libquassel.protocol.models
+package de.justjanne.libquassel.protocol.models.network
 
 enum class NetworkProxy(
   val value: Int,
diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/NetworkServer.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/network/NetworkServer.kt
similarity index 92%
rename from libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/NetworkServer.kt
rename to libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/network/NetworkServer.kt
index 953190b..8d5951f 100644
--- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/NetworkServer.kt
+++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/network/NetworkServer.kt
@@ -8,7 +8,7 @@
  * obtain one at https://mozilla.org/MPL/2.0/.
  */
 
-package de.justjanne.libquassel.protocol.models
+package de.justjanne.libquassel.protocol.models.network
 
 data class NetworkServer(
   val host: String,
diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/PortDefaults.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/network/PortDefaults.kt
similarity index 87%
rename from libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/PortDefaults.kt
rename to libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/network/PortDefaults.kt
index c7279a2..bcda869 100644
--- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/PortDefaults.kt
+++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/network/PortDefaults.kt
@@ -8,7 +8,7 @@
  * obtain one at https://mozilla.org/MPL/2.0/.
  */
 
-package de.justjanne.libquassel.protocol.models
+package de.justjanne.libquassel.protocol.models.network
 
 enum class PortDefaults(
   val port: UInt
diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/HighlightNickType.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/rules/HighlightNickType.kt
similarity index 92%
rename from libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/HighlightNickType.kt
rename to libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/rules/HighlightNickType.kt
index 8cf451b..01edde5 100644
--- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/HighlightNickType.kt
+++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/rules/HighlightNickType.kt
@@ -8,7 +8,7 @@
  * obtain one at https://mozilla.org/MPL/2.0/.
  */
 
-package de.justjanne.libquassel.protocol.models
+package de.justjanne.libquassel.protocol.models.rules
 
 enum class HighlightNickType(
   val value: Int,
diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/HighlightRule.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/rules/HighlightRule.kt
similarity index 95%
rename from libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/HighlightRule.kt
rename to libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/rules/HighlightRule.kt
index af45a71..22acde7 100644
--- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/HighlightRule.kt
+++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/rules/HighlightRule.kt
@@ -8,7 +8,7 @@
  * obtain one at https://mozilla.org/MPL/2.0/.
  */
 
-package de.justjanne.libquassel.protocol.models
+package de.justjanne.libquassel.protocol.models.rules
 
 import de.justjanne.libquassel.protocol.util.expression.ExpressionMatch
 
diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/BackendInfo.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/setup/BackendInfo.kt
similarity index 94%
rename from libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/BackendInfo.kt
rename to libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/setup/BackendInfo.kt
index 7107355..8b33fe3 100644
--- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/BackendInfo.kt
+++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/setup/BackendInfo.kt
@@ -8,7 +8,7 @@
  * obtain one at https://mozilla.org/MPL/2.0/.
  */
 
-package de.justjanne.libquassel.protocol.models
+package de.justjanne.libquassel.protocol.models.setup
 
 /**
  * Model for storage/authenticator backend configuration
diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/BackendInfoSerializer.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/setup/BackendInfoSerializer.kt
similarity index 95%
rename from libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/BackendInfoSerializer.kt
rename to libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/setup/BackendInfoSerializer.kt
index 23d3086..53ab4ab 100644
--- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/BackendInfoSerializer.kt
+++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/setup/BackendInfoSerializer.kt
@@ -8,8 +8,9 @@
  * obtain one at https://mozilla.org/MPL/2.0/.
  */
 
-package de.justjanne.libquassel.protocol.models
+package de.justjanne.libquassel.protocol.models.setup
 
+import de.justjanne.libquassel.protocol.models.QStringList
 import de.justjanne.libquassel.protocol.models.types.QtType
 import de.justjanne.libquassel.protocol.util.collections.triples
 import de.justjanne.libquassel.protocol.variant.QVariantList
diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/SetupEntry.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/setup/SetupEntry.kt
similarity index 92%
rename from libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/SetupEntry.kt
rename to libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/setup/SetupEntry.kt
index e5ce295..2b7b112 100644
--- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/SetupEntry.kt
+++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/setup/SetupEntry.kt
@@ -8,7 +8,7 @@
  * obtain one at https://mozilla.org/MPL/2.0/.
  */
 
-package de.justjanne.libquassel.protocol.models
+package de.justjanne.libquassel.protocol.models.setup
 
 import de.justjanne.libquassel.protocol.variant.QVariant_
 
diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/handshake/ClientInitAckSerializer.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/handshake/ClientInitAckSerializer.kt
index 5366f5c..a9d6048 100644
--- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/handshake/ClientInitAckSerializer.kt
+++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/handshake/ClientInitAckSerializer.kt
@@ -15,9 +15,9 @@ import de.justjanne.bitflags.toBits
 import de.justjanne.libquassel.protocol.features.FeatureSet
 import de.justjanne.libquassel.protocol.features.LegacyFeature
 import de.justjanne.libquassel.protocol.features.QuasselFeatureName
-import de.justjanne.libquassel.protocol.models.BackendInfoSerializer
 import de.justjanne.libquassel.protocol.models.HandshakeMessage
 import de.justjanne.libquassel.protocol.models.QStringList
+import de.justjanne.libquassel.protocol.models.setup.BackendInfoSerializer
 import de.justjanne.libquassel.protocol.models.types.QtType
 import de.justjanne.libquassel.protocol.serializers.HandshakeSerializer
 import de.justjanne.libquassel.protocol.variant.QVariantList
diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/DccIpDetectionModeSerializer.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/DccIpDetectionModeSerializer.kt
index 90cb491..1c2ca33 100644
--- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/DccIpDetectionModeSerializer.kt
+++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/DccIpDetectionModeSerializer.kt
@@ -12,7 +12,7 @@ package de.justjanne.libquassel.protocol.serializers.quassel
 
 import de.justjanne.libquassel.protocol.features.FeatureSet
 import de.justjanne.libquassel.protocol.io.ChainedByteBuffer
-import de.justjanne.libquassel.protocol.models.DccIpDetectionMode
+import de.justjanne.libquassel.protocol.models.dcc.DccIpDetectionMode
 import de.justjanne.libquassel.protocol.serializers.PrimitiveSerializer
 import de.justjanne.libquassel.protocol.serializers.qt.UByteSerializer
 import java.nio.ByteBuffer
diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/DccPortSelectionModeSerializer.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/DccPortSelectionModeSerializer.kt
index 01c9f5c..14a151d 100644
--- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/DccPortSelectionModeSerializer.kt
+++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/DccPortSelectionModeSerializer.kt
@@ -12,7 +12,7 @@ package de.justjanne.libquassel.protocol.serializers.quassel
 
 import de.justjanne.libquassel.protocol.features.FeatureSet
 import de.justjanne.libquassel.protocol.io.ChainedByteBuffer
-import de.justjanne.libquassel.protocol.models.DccPortSelectionMode
+import de.justjanne.libquassel.protocol.models.dcc.DccPortSelectionMode
 import de.justjanne.libquassel.protocol.serializers.PrimitiveSerializer
 import de.justjanne.libquassel.protocol.serializers.qt.UByteSerializer
 import java.nio.ByteBuffer
diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/NetworkInfoSerializer.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/NetworkInfoSerializer.kt
index ebcb290..142fb76 100644
--- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/NetworkInfoSerializer.kt
+++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/NetworkInfoSerializer.kt
@@ -12,11 +12,11 @@ package de.justjanne.libquassel.protocol.serializers.quassel
 
 import de.justjanne.libquassel.protocol.features.FeatureSet
 import de.justjanne.libquassel.protocol.io.ChainedByteBuffer
-import de.justjanne.libquassel.protocol.models.NetworkInfo
-import de.justjanne.libquassel.protocol.models.NetworkServer
 import de.justjanne.libquassel.protocol.models.QStringList
 import de.justjanne.libquassel.protocol.models.ids.IdentityId
 import de.justjanne.libquassel.protocol.models.ids.NetworkId
+import de.justjanne.libquassel.protocol.models.network.NetworkInfo
+import de.justjanne.libquassel.protocol.models.network.NetworkServer
 import de.justjanne.libquassel.protocol.models.types.QtType
 import de.justjanne.libquassel.protocol.models.types.QuasselType
 import de.justjanne.libquassel.protocol.serializers.PrimitiveSerializer
diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/NetworkServerSerializer.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/NetworkServerSerializer.kt
index 4b1beac..70ca521 100644
--- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/NetworkServerSerializer.kt
+++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/NetworkServerSerializer.kt
@@ -12,9 +12,9 @@ package de.justjanne.libquassel.protocol.serializers.quassel
 
 import de.justjanne.libquassel.protocol.features.FeatureSet
 import de.justjanne.libquassel.protocol.io.ChainedByteBuffer
-import de.justjanne.libquassel.protocol.models.NetworkProxy
-import de.justjanne.libquassel.protocol.models.NetworkServer
-import de.justjanne.libquassel.protocol.models.PortDefaults
+import de.justjanne.libquassel.protocol.models.network.NetworkProxy
+import de.justjanne.libquassel.protocol.models.network.NetworkServer
+import de.justjanne.libquassel.protocol.models.network.PortDefaults
 import de.justjanne.libquassel.protocol.models.types.QtType
 import de.justjanne.libquassel.protocol.serializers.PrimitiveSerializer
 import de.justjanne.libquassel.protocol.serializers.qt.QVariantMapSerializer
diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/QHostAddressSerializer.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/QHostAddressSerializer.kt
index 12970e1..f25f255 100644
--- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/QHostAddressSerializer.kt
+++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/QHostAddressSerializer.kt
@@ -12,7 +12,7 @@ package de.justjanne.libquassel.protocol.serializers.quassel
 
 import de.justjanne.libquassel.protocol.features.FeatureSet
 import de.justjanne.libquassel.protocol.io.ChainedByteBuffer
-import de.justjanne.libquassel.protocol.models.NetworkLayerProtocol
+import de.justjanne.libquassel.protocol.models.dcc.NetworkLayerProtocol
 import de.justjanne.libquassel.protocol.serializers.PrimitiveSerializer
 import de.justjanne.libquassel.protocol.serializers.qt.UByteSerializer
 import java.net.Inet4Address
diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/TransferDirectionSerializer.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/TransferDirectionSerializer.kt
index 2cb8598..aa68d05 100644
--- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/TransferDirectionSerializer.kt
+++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/TransferDirectionSerializer.kt
@@ -12,7 +12,7 @@ package de.justjanne.libquassel.protocol.serializers.quassel
 
 import de.justjanne.libquassel.protocol.features.FeatureSet
 import de.justjanne.libquassel.protocol.io.ChainedByteBuffer
-import de.justjanne.libquassel.protocol.models.TransferDirection
+import de.justjanne.libquassel.protocol.models.dcc.TransferDirection
 import de.justjanne.libquassel.protocol.serializers.PrimitiveSerializer
 import de.justjanne.libquassel.protocol.serializers.qt.IntSerializer
 import java.nio.ByteBuffer
diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/TransferIdListSerializer.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/TransferIdListSerializer.kt
index 396109a..b7a97a0 100644
--- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/TransferIdListSerializer.kt
+++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/TransferIdListSerializer.kt
@@ -12,7 +12,7 @@ package de.justjanne.libquassel.protocol.serializers.quassel
 
 import de.justjanne.libquassel.protocol.features.FeatureSet
 import de.justjanne.libquassel.protocol.io.ChainedByteBuffer
-import de.justjanne.libquassel.protocol.models.TransferIdList
+import de.justjanne.libquassel.protocol.models.dcc.TransferIdList
 import de.justjanne.libquassel.protocol.serializers.PrimitiveSerializer
 import de.justjanne.libquassel.protocol.serializers.qt.IntSerializer
 import de.justjanne.libquassel.protocol.serializers.qt.UuidSerializer
diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/TransferStatusSerializer.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/TransferStatusSerializer.kt
index 9d93c21..e14adc1 100644
--- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/TransferStatusSerializer.kt
+++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/TransferStatusSerializer.kt
@@ -12,7 +12,7 @@ package de.justjanne.libquassel.protocol.serializers.quassel
 
 import de.justjanne.libquassel.protocol.features.FeatureSet
 import de.justjanne.libquassel.protocol.io.ChainedByteBuffer
-import de.justjanne.libquassel.protocol.models.TransferStatus
+import de.justjanne.libquassel.protocol.models.dcc.TransferStatus
 import de.justjanne.libquassel.protocol.serializers.PrimitiveSerializer
 import de.justjanne.libquassel.protocol.serializers.qt.IntSerializer
 import java.nio.ByteBuffer
diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/AliasManager.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/AliasManager.kt
index 957bb11..281c348 100644
--- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/AliasManager.kt
+++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/AliasManager.kt
@@ -10,10 +10,10 @@
 
 package de.justjanne.libquassel.protocol.syncables
 
-import de.justjanne.libquassel.protocol.models.Alias
 import de.justjanne.libquassel.protocol.models.BufferInfo
-import de.justjanne.libquassel.protocol.models.Command
 import de.justjanne.libquassel.protocol.models.QStringList
+import de.justjanne.libquassel.protocol.models.alias.Alias
+import de.justjanne.libquassel.protocol.models.alias.Command
 import de.justjanne.libquassel.protocol.models.types.QtType
 import de.justjanne.libquassel.protocol.syncables.state.AliasManagerState
 import de.justjanne.libquassel.protocol.syncables.stubs.AliasManagerStub
diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/DccConfig.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/DccConfig.kt
index 0127d7c..8434fe2 100644
--- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/DccConfig.kt
+++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/DccConfig.kt
@@ -10,8 +10,8 @@
 
 package de.justjanne.libquassel.protocol.syncables
 
-import de.justjanne.libquassel.protocol.models.DccIpDetectionMode
-import de.justjanne.libquassel.protocol.models.DccPortSelectionMode
+import de.justjanne.libquassel.protocol.models.dcc.DccIpDetectionMode
+import de.justjanne.libquassel.protocol.models.dcc.DccPortSelectionMode
 import de.justjanne.libquassel.protocol.models.types.QtType
 import de.justjanne.libquassel.protocol.models.types.QuasselType
 import de.justjanne.libquassel.protocol.syncables.state.DccConfigState
diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/HighlightRuleManager.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/HighlightRuleManager.kt
index a5fac79..17f695a 100644
--- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/HighlightRuleManager.kt
+++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/HighlightRuleManager.kt
@@ -10,9 +10,9 @@
 
 package de.justjanne.libquassel.protocol.syncables
 
-import de.justjanne.libquassel.protocol.models.HighlightNickType
-import de.justjanne.libquassel.protocol.models.HighlightRule
 import de.justjanne.libquassel.protocol.models.QStringList
+import de.justjanne.libquassel.protocol.models.rules.HighlightNickType
+import de.justjanne.libquassel.protocol.models.rules.HighlightRule
 import de.justjanne.libquassel.protocol.models.types.QtType
 import de.justjanne.libquassel.protocol.syncables.state.HighlightRuleManagerState
 import de.justjanne.libquassel.protocol.syncables.stubs.HighlightRuleManagerStub
diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/IgnoreListManager.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/IgnoreListManager.kt
index 30254bc..5a309b6 100644
--- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/IgnoreListManager.kt
+++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/IgnoreListManager.kt
@@ -9,3 +9,188 @@
  */
 
 package de.justjanne.libquassel.protocol.syncables
+
+import de.justjanne.libquassel.protocol.models.QStringList
+import de.justjanne.libquassel.protocol.models.flags.MessageTypes
+import de.justjanne.libquassel.protocol.models.rules.IgnoreRule
+import de.justjanne.libquassel.protocol.models.rules.IgnoreType
+import de.justjanne.libquassel.protocol.models.rules.ScopeType
+import de.justjanne.libquassel.protocol.models.rules.StrictnessType
+import de.justjanne.libquassel.protocol.models.types.QtType
+import de.justjanne.libquassel.protocol.syncables.state.IgnoreListManagerState
+import de.justjanne.libquassel.protocol.syncables.stubs.IgnoreListManagerStub
+import de.justjanne.libquassel.protocol.util.update
+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
+
+class IgnoreListManager(
+  session: Session? = null,
+  state: IgnoreListManagerState = IgnoreListManagerState()
+) : StatefulSyncableObject<IgnoreListManagerState>(session, "IgnoreListManager", state),
+  IgnoreListManagerStub {
+  override fun toVariantMap() = mapOf(
+    "IgnoreList" to qVariant(
+      mapOf(
+        "ignoreType" to qVariant(
+          state().rules.map {
+            qVariant(it.type.value, QtType.Int)
+          },
+          QtType.QVariantList
+        ),
+        "ignoreRule" to qVariant(
+          state().rules.map(IgnoreRule::ignoreRule),
+          QtType.QStringList
+        ),
+        "isRegEx" to qVariant(
+          state().rules.map {
+            qVariant(it.isRegEx, QtType.Bool)
+          },
+          QtType.QVariantList
+        ),
+        "strictness" to qVariant(
+          state().rules.map {
+            qVariant(it.strictness.value, QtType.Int)
+          },
+          QtType.QVariantList
+        ),
+        "scope" to qVariant(
+          state().rules.map {
+            qVariant(it.scope.value, QtType.Int)
+          },
+          QtType.QVariantList
+        ),
+        "isActive" to qVariant(
+          state().rules.map {
+            qVariant(it.isEnabled, QtType.Bool)
+          },
+          QtType.QVariantList
+        ),
+        "scopeRule" to qVariant(
+          state().rules.map(IgnoreRule::scopeRule),
+          QtType.QStringList
+        ),
+      ),
+      QtType.QVariantMap
+    )
+  )
+
+  override fun fromVariantMap(properties: QVariantMap) {
+    val ignoreRules = properties["IgnoreList"].into<QVariantMap>().orEmpty()
+
+    val ignoreTypeList = ignoreRules["ignoreType"].into<QVariantList>().orEmpty()
+    val ignoreRuleList = ignoreRules["ignoreRule"].into<QStringList>().orEmpty()
+    val isRegExList = ignoreRules["isRegEx"].into<QVariantList>().orEmpty()
+    val strictnessList = ignoreRules["strictness"].into<QVariantList>().orEmpty()
+    val isEnabledList = ignoreRules["isActive"].into<QVariantList>().orEmpty()
+    val scopeList = ignoreRules["scope"].into<QVariantList>().orEmpty()
+    val scopeRuleList = ignoreRules["scopeRule"].into<QStringList>().orEmpty()
+
+    require(ignoreTypeList.size == ignoreRuleList.size) {
+      "Sizes do not match: ids=${ignoreTypeList.size}, ignoreRule=${ignoreRuleList.size}"
+    }
+    require(ignoreTypeList.size == isRegExList.size) {
+      "Sizes do not match: ids=${ignoreTypeList.size}, isRegExList=${isRegExList.size}"
+    }
+    require(ignoreTypeList.size == strictnessList.size) {
+      "Sizes do not match: ids=${ignoreTypeList.size}, strictnessList=${strictnessList.size}"
+    }
+    require(ignoreTypeList.size == isEnabledList.size) {
+      "Sizes do not match: ids=${ignoreTypeList.size}, isEnabledList=${isEnabledList.size}"
+    }
+    require(ignoreTypeList.size == scopeList.size) {
+      "Sizes do not match: ids=${ignoreTypeList.size}, scopeList=${scopeList.size}"
+    }
+    require(ignoreTypeList.size == scopeRuleList.size) {
+      "Sizes do not match: ids=${ignoreTypeList.size}, scopeRuleList=${scopeRuleList.size}"
+    }
+
+    state.update {
+      copy(
+        rules = List(ignoreTypeList.size) {
+          IgnoreRule(
+            type = ignoreTypeList[it].into<Int>()?.let(IgnoreType::of)
+              ?: IgnoreType.SenderIgnore,
+            ignoreRule = ignoreRuleList[it] ?: "",
+            isRegEx = isRegExList[it].into(false),
+            strictness = strictnessList[it].into<Int>()?.let(StrictnessType::of)
+              ?: StrictnessType.UnmatchedStrictness,
+            isEnabled = isEnabledList[it].into(false),
+            scope = scopeList[it].into<Int>()?.let(ScopeType::of)
+              ?: ScopeType.GlobalScope,
+            scopeRule = scopeRuleList[it] ?: "",
+          )
+        }
+      )
+    }
+  }
+
+  fun indexOf(ignoreRule: String?): Int = state().indexOf(ignoreRule)
+  fun contains(ignoreRule: String?) = state().contains(ignoreRule)
+
+  fun isEmpty() = state().isEmpty()
+  fun count() = state().count()
+  fun removeAt(index: Int) {
+    state.update {
+      copy(rules = rules.drop(index))
+    }
+  }
+
+  override fun addIgnoreListItem(
+    type: Int,
+    ignoreRule: String?,
+    isRegEx: Boolean,
+    strictness: Int,
+    scope: Int,
+    scopeRule: String?,
+    isActive: Boolean
+  ) {
+    if (contains(ignoreRule)) {
+      return
+    }
+
+    state.update {
+      copy(
+        rules = rules + IgnoreRule(
+          type = IgnoreType.of(type) ?: return,
+          ignoreRule = ignoreRule ?: "",
+          isRegEx = isRegEx,
+          strictness = StrictnessType.of(strictness) ?: return,
+          scope = ScopeType.of(scope) ?: return,
+          scopeRule = scopeRule ?: "",
+          isEnabled = isActive
+        )
+      )
+    }
+
+    super.addIgnoreListItem(type, ignoreRule, isRegEx, strictness, scope, scopeRule, isActive)
+  }
+
+  override fun removeIgnoreListItem(ignoreRule: String?) {
+    removeAt(indexOf(ignoreRule))
+
+    super.removeIgnoreListItem(ignoreRule)
+  }
+
+  override fun toggleIgnoreRule(ignoreRule: String?) {
+    state.update {
+      copy(
+        rules = rules.map {
+          if (it.ignoreRule != ignoreRule) it
+          else it.copy(isEnabled = !it.isEnabled)
+        }
+      )
+    }
+
+    super.toggleIgnoreRule(ignoreRule)
+  }
+
+  fun match(
+    msgContents: String,
+    msgSender: String,
+    msgType: MessageTypes,
+    network: String,
+    bufferName: String
+  ) = state().match(msgContents, msgSender, msgType, network, bufferName)
+}
diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/IrcChannel.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/IrcChannel.kt
index 22b55ce..3b6eae0 100644
--- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/IrcChannel.kt
+++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/IrcChannel.kt
@@ -10,9 +10,9 @@
 
 package de.justjanne.libquassel.protocol.syncables
 
-import de.justjanne.libquassel.protocol.models.ChannelModeType
-import de.justjanne.libquassel.protocol.models.ChannelModes
 import de.justjanne.libquassel.protocol.models.QStringList
+import de.justjanne.libquassel.protocol.models.network.ChannelModeType
+import de.justjanne.libquassel.protocol.models.network.ChannelModes
 import de.justjanne.libquassel.protocol.models.types.QtType
 import de.justjanne.libquassel.protocol.syncables.state.IrcChannelState
 import de.justjanne.libquassel.protocol.syncables.stubs.IrcChannelStub
diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/Network.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/Network.kt
index cee2ac6..16baabf 100644
--- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/Network.kt
+++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/Network.kt
@@ -10,11 +10,11 @@
 
 package de.justjanne.libquassel.protocol.syncables
 
-import de.justjanne.libquassel.protocol.models.ConnectionState
-import de.justjanne.libquassel.protocol.models.NetworkInfo
-import de.justjanne.libquassel.protocol.models.NetworkServer
 import de.justjanne.libquassel.protocol.models.QStringList
 import de.justjanne.libquassel.protocol.models.ids.IdentityId
+import de.justjanne.libquassel.protocol.models.network.ConnectionState
+import de.justjanne.libquassel.protocol.models.network.NetworkInfo
+import de.justjanne.libquassel.protocol.models.network.NetworkServer
 import de.justjanne.libquassel.protocol.models.types.QtType
 import de.justjanne.libquassel.protocol.models.types.QuasselType
 import de.justjanne.libquassel.protocol.serializers.qt.StringSerializerUtf8
diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/state/AliasManagerState.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/state/AliasManagerState.kt
index 94054b6..9634cae 100644
--- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/state/AliasManagerState.kt
+++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/state/AliasManagerState.kt
@@ -10,9 +10,9 @@
 
 package de.justjanne.libquassel.protocol.syncables.state
 
-import de.justjanne.libquassel.protocol.models.Alias
 import de.justjanne.libquassel.protocol.models.BufferInfo
-import de.justjanne.libquassel.protocol.models.Command
+import de.justjanne.libquassel.protocol.models.alias.Alias
+import de.justjanne.libquassel.protocol.models.alias.Command
 import de.justjanne.libquassel.protocol.util.expansion.Expansion
 
 data class AliasManagerState(
diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/state/DccConfigState.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/state/DccConfigState.kt
index 09f14fd..8f6646f 100644
--- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/state/DccConfigState.kt
+++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/state/DccConfigState.kt
@@ -10,8 +10,8 @@
 
 package de.justjanne.libquassel.protocol.syncables.state
 
-import de.justjanne.libquassel.protocol.models.DccIpDetectionMode
-import de.justjanne.libquassel.protocol.models.DccPortSelectionMode
+import de.justjanne.libquassel.protocol.models.dcc.DccIpDetectionMode
+import de.justjanne.libquassel.protocol.models.dcc.DccPortSelectionMode
 import java.net.InetAddress
 
 data class DccConfigState(
diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/state/HighlightRuleManagerState.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/state/HighlightRuleManagerState.kt
index 6401a56..6a11d26 100644
--- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/state/HighlightRuleManagerState.kt
+++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/state/HighlightRuleManagerState.kt
@@ -10,12 +10,12 @@
 
 package de.justjanne.libquassel.protocol.syncables.state
 
-import de.justjanne.libquassel.protocol.models.HighlightNickType
-import de.justjanne.libquassel.protocol.models.HighlightRule
 import de.justjanne.libquassel.protocol.models.flags.MessageFlag
 import de.justjanne.libquassel.protocol.models.flags.MessageFlags
 import de.justjanne.libquassel.protocol.models.flags.MessageType
 import de.justjanne.libquassel.protocol.models.flags.MessageTypes
+import de.justjanne.libquassel.protocol.models.rules.HighlightNickType
+import de.justjanne.libquassel.protocol.models.rules.HighlightRule
 import de.justjanne.libquassel.protocol.util.expression.ExpressionMatch
 import de.justjanne.libquassel.protocol.util.irc.IrcFormatDeserializer
 
diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/state/IrcChannelState.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/state/IrcChannelState.kt
index 06d6c03..f5b749a 100644
--- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/state/IrcChannelState.kt
+++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/state/IrcChannelState.kt
@@ -10,9 +10,9 @@
 
 package de.justjanne.libquassel.protocol.syncables.state
 
-import de.justjanne.libquassel.protocol.models.ChannelModeType
-import de.justjanne.libquassel.protocol.models.ChannelModes
 import de.justjanne.libquassel.protocol.models.ids.NetworkId
+import de.justjanne.libquassel.protocol.models.network.ChannelModeType
+import de.justjanne.libquassel.protocol.models.network.ChannelModes
 
 data class IrcChannelState(
   val network: NetworkId,
diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/state/NetworkState.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/state/NetworkState.kt
index 6f5a7d8..1f765d8 100644
--- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/state/NetworkState.kt
+++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/state/NetworkState.kt
@@ -10,11 +10,11 @@
 
 package de.justjanne.libquassel.protocol.syncables.state
 
-import de.justjanne.libquassel.protocol.models.ChannelModeType
-import de.justjanne.libquassel.protocol.models.ConnectionState
-import de.justjanne.libquassel.protocol.models.NetworkServer
 import de.justjanne.libquassel.protocol.models.ids.IdentityId
 import de.justjanne.libquassel.protocol.models.ids.NetworkId
+import de.justjanne.libquassel.protocol.models.network.ChannelModeType
+import de.justjanne.libquassel.protocol.models.network.ConnectionState
+import de.justjanne.libquassel.protocol.models.network.NetworkServer
 import de.justjanne.libquassel.protocol.syncables.IrcChannel
 import de.justjanne.libquassel.protocol.syncables.IrcUser
 import de.justjanne.libquassel.protocol.util.irc.IrcCapability
diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/stubs/DccConfigStub.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/stubs/DccConfigStub.kt
index f9bb090..69ec5a8 100644
--- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/stubs/DccConfigStub.kt
+++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/stubs/DccConfigStub.kt
@@ -13,8 +13,8 @@ package de.justjanne.libquassel.protocol.syncables.stubs
 import de.justjanne.libquassel.annotations.ProtocolSide
 import de.justjanne.libquassel.annotations.SyncedCall
 import de.justjanne.libquassel.annotations.SyncedObject
-import de.justjanne.libquassel.protocol.models.DccIpDetectionMode
-import de.justjanne.libquassel.protocol.models.DccPortSelectionMode
+import de.justjanne.libquassel.protocol.models.dcc.DccIpDetectionMode
+import de.justjanne.libquassel.protocol.models.dcc.DccPortSelectionMode
 import de.justjanne.libquassel.protocol.models.types.QtType
 import de.justjanne.libquassel.protocol.models.types.QuasselType
 import de.justjanne.libquassel.protocol.syncables.SyncableStub
diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/stubs/NetworkStub.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/stubs/NetworkStub.kt
index 5b54584..fe10389 100644
--- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/stubs/NetworkStub.kt
+++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/stubs/NetworkStub.kt
@@ -13,9 +13,9 @@ package de.justjanne.libquassel.protocol.syncables.stubs
 import de.justjanne.libquassel.annotations.ProtocolSide
 import de.justjanne.libquassel.annotations.SyncedCall
 import de.justjanne.libquassel.annotations.SyncedObject
-import de.justjanne.libquassel.protocol.models.NetworkInfo
 import de.justjanne.libquassel.protocol.models.QStringList
 import de.justjanne.libquassel.protocol.models.ids.IdentityId
+import de.justjanne.libquassel.protocol.models.network.NetworkInfo
 import de.justjanne.libquassel.protocol.models.types.QtType
 import de.justjanne.libquassel.protocol.models.types.QuasselType
 import de.justjanne.libquassel.protocol.syncables.SyncableStub
diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/stubs/RpcHandlerStub.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/stubs/RpcHandlerStub.kt
index 4804e3a..eb4e39b 100644
--- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/stubs/RpcHandlerStub.kt
+++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/stubs/RpcHandlerStub.kt
@@ -15,9 +15,9 @@ import de.justjanne.libquassel.annotations.SyncedCall
 import de.justjanne.libquassel.annotations.SyncedObject
 import de.justjanne.libquassel.protocol.models.BufferInfo
 import de.justjanne.libquassel.protocol.models.Message
-import de.justjanne.libquassel.protocol.models.NetworkInfo
 import de.justjanne.libquassel.protocol.models.ids.IdentityId
 import de.justjanne.libquassel.protocol.models.ids.NetworkId
+import de.justjanne.libquassel.protocol.models.network.NetworkInfo
 import de.justjanne.libquassel.protocol.models.types.QtType
 import de.justjanne.libquassel.protocol.models.types.QuasselType
 import de.justjanne.libquassel.protocol.syncables.SyncableStub
diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/stubs/TransferManagerStub.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/stubs/TransferManagerStub.kt
index ac90362..6badb8a 100644
--- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/stubs/TransferManagerStub.kt
+++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/stubs/TransferManagerStub.kt
@@ -13,7 +13,7 @@ package de.justjanne.libquassel.protocol.syncables.stubs
 import de.justjanne.libquassel.annotations.ProtocolSide
 import de.justjanne.libquassel.annotations.SyncedCall
 import de.justjanne.libquassel.annotations.SyncedObject
-import de.justjanne.libquassel.protocol.models.TransferIdList
+import de.justjanne.libquassel.protocol.models.dcc.TransferIdList
 import de.justjanne.libquassel.protocol.models.types.QtType
 import de.justjanne.libquassel.protocol.models.types.QuasselType
 import de.justjanne.libquassel.protocol.syncables.SyncableStub
diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/stubs/TransferStub.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/stubs/TransferStub.kt
index 4ea1831..7b8ee5e 100644
--- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/stubs/TransferStub.kt
+++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/stubs/TransferStub.kt
@@ -13,8 +13,8 @@ package de.justjanne.libquassel.protocol.syncables.stubs
 import de.justjanne.libquassel.annotations.ProtocolSide
 import de.justjanne.libquassel.annotations.SyncedCall
 import de.justjanne.libquassel.annotations.SyncedObject
-import de.justjanne.libquassel.protocol.models.TransferDirection
-import de.justjanne.libquassel.protocol.models.TransferStatus
+import de.justjanne.libquassel.protocol.models.dcc.TransferDirection
+import de.justjanne.libquassel.protocol.models.dcc.TransferStatus
 import de.justjanne.libquassel.protocol.models.types.QtType
 import de.justjanne.libquassel.protocol.models.types.QuasselType
 import de.justjanne.libquassel.protocol.syncables.SyncableStub
diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/handshake/ClientInitAckSerializerTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/handshake/ClientInitAckSerializerTest.kt
index ae5fe8e..c01a225 100644
--- a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/handshake/ClientInitAckSerializerTest.kt
+++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/handshake/ClientInitAckSerializerTest.kt
@@ -19,9 +19,9 @@
 package de.justjanne.libquassel.protocol.serializers.handshake
 
 import de.justjanne.libquassel.protocol.features.FeatureSet
-import de.justjanne.libquassel.protocol.models.BackendInfo
 import de.justjanne.libquassel.protocol.models.HandshakeMessage
-import de.justjanne.libquassel.protocol.models.SetupEntry
+import de.justjanne.libquassel.protocol.models.setup.BackendInfo
+import de.justjanne.libquassel.protocol.models.setup.SetupEntry
 import de.justjanne.libquassel.protocol.models.types.QtType
 import de.justjanne.libquassel.protocol.testutil.byteBufferOf
 import de.justjanne.libquassel.protocol.testutil.handshakeSerializerTest
diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/DccIpDetectionModeSerializerTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/DccIpDetectionModeSerializerTest.kt
index 674caa7..1176e0b 100644
--- a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/DccIpDetectionModeSerializerTest.kt
+++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/DccIpDetectionModeSerializerTest.kt
@@ -18,7 +18,7 @@
  */
 package de.justjanne.libquassel.protocol.serializers.quassel
 
-import de.justjanne.libquassel.protocol.models.DccIpDetectionMode
+import de.justjanne.libquassel.protocol.models.dcc.DccIpDetectionMode
 import de.justjanne.libquassel.protocol.models.types.QuasselType
 import de.justjanne.libquassel.protocol.testutil.byteBufferOf
 import de.justjanne.libquassel.protocol.testutil.primitiveSerializerTest
diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/DccPortSelectionModeSerializerTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/DccPortSelectionModeSerializerTest.kt
index f478930..140cc2d 100644
--- a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/DccPortSelectionModeSerializerTest.kt
+++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/DccPortSelectionModeSerializerTest.kt
@@ -18,7 +18,7 @@
  */
 package de.justjanne.libquassel.protocol.serializers.quassel
 
-import de.justjanne.libquassel.protocol.models.DccPortSelectionMode
+import de.justjanne.libquassel.protocol.models.dcc.DccPortSelectionMode
 import de.justjanne.libquassel.protocol.models.types.QuasselType
 import de.justjanne.libquassel.protocol.testutil.byteBufferOf
 import de.justjanne.libquassel.protocol.testutil.primitiveSerializerTest
diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/NetworkInfoSerializerTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/NetworkInfoSerializerTest.kt
index 9f28cd6..23938d5 100644
--- a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/NetworkInfoSerializerTest.kt
+++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/NetworkInfoSerializerTest.kt
@@ -18,8 +18,8 @@
  */
 package de.justjanne.libquassel.protocol.serializers.quassel
 
-import de.justjanne.libquassel.protocol.models.NetworkInfo
 import de.justjanne.libquassel.protocol.models.ids.NetworkId
+import de.justjanne.libquassel.protocol.models.network.NetworkInfo
 import de.justjanne.libquassel.protocol.models.types.QuasselType
 import de.justjanne.libquassel.protocol.testutil.byteBufferOf
 import de.justjanne.libquassel.protocol.testutil.primitiveSerializerTest
diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/syncables/NetworkTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/syncables/NetworkTest.kt
index acecf40..88d1094 100644
--- a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/syncables/NetworkTest.kt
+++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/syncables/NetworkTest.kt
@@ -10,18 +10,12 @@
 
 package de.justjanne.libquassel.protocol.syncables
 
-import de.justjanne.libquassel.protocol.models.NetworkServer
-import de.justjanne.libquassel.protocol.models.ids.IdentityId
 import de.justjanne.libquassel.protocol.models.ids.NetworkId
 import de.justjanne.libquassel.protocol.syncables.state.NetworkState
-import de.justjanne.libquassel.protocol.testutil.nextEnum
-import de.justjanne.libquassel.protocol.testutil.nextIrcChannel
-import de.justjanne.libquassel.protocol.testutil.nextIrcUser
-import de.justjanne.libquassel.protocol.testutil.nextString
+import de.justjanne.libquassel.protocol.testutil.nextNetwork
 import org.junit.jupiter.api.Assertions.assertEquals
 import org.junit.jupiter.api.Test
 import kotlin.random.Random
-import kotlin.random.nextUInt
 
 class NetworkTest {
   @Test
@@ -37,68 +31,3 @@ class NetworkTest {
     assertEquals(expected, actual)
   }
 }
-
-fun Random.nextNetwork(networkId: NetworkId) = NetworkState(
-  networkId = networkId,
-  identity = IdentityId(nextInt()),
-  myNick = nextString(),
-  latency = nextInt(),
-  networkName = nextString(),
-  currentServer = nextString(),
-  connected = nextBoolean(),
-  connectionState = nextEnum(),
-  ircUsers = List(nextInt(20)) {
-    nextIrcUser(networkId)
-  }.associateBy(IrcUser::nick),
-  ircChannels = List(nextInt(20)) {
-    nextIrcChannel(networkId)
-  }.associateBy(IrcChannel::name),
-  supports = List(nextInt(20)) {
-    nextString() to nextString()
-  }.toMap(),
-  caps = List(nextInt(20)) {
-    nextString() to nextString()
-  }.toMap(),
-  capsEnabled = List(nextInt(20)) {
-    nextString()
-  }.toSet(),
-  serverList = List(nextInt(20)) {
-    nextNetworkServer()
-  },
-  useRandomServer = nextBoolean(),
-  perform = List(nextInt(20)) {
-    nextString()
-  },
-  useAutoIdentify = nextBoolean(),
-  autoIdentifyService = nextString(),
-  autoIdentifyPassword = nextString(),
-  useSasl = nextBoolean(),
-  saslAccount = nextString(),
-  saslPassword = nextString(),
-  useAutoReconnect = nextBoolean(),
-  autoReconnectInterval = nextUInt(),
-  autoReconnectRetries = nextUInt(UShort.MAX_VALUE.toUInt()).toUShort(),
-  unlimitedReconnectRetries = nextBoolean(),
-  rejoinChannels = nextBoolean(),
-  useCustomMessageRate = nextBoolean(),
-  messageRateBurstSize = nextUInt(),
-  messageRateDelay = nextUInt(),
-  codecForServer = nextString(),
-  codecForEncoding = nextString(),
-  codecForDecoding = nextString()
-)
-
-fun Random.nextNetworkServer() = NetworkServer(
-  host = nextString(),
-  port = nextUInt(),
-  password = nextString(),
-  useSsl = nextBoolean(),
-  sslVerify = nextBoolean(),
-  sslVersion = nextInt(),
-  useProxy = nextBoolean(),
-  proxyType = nextEnum(),
-  proxyHost = nextString(),
-  proxyPort = nextUInt(),
-  proxyUser = nextString(),
-  proxyPass = nextString()
-)
diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/testutil/Random.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/testutil/Random.kt
index 5cf9157..fb4947f 100644
--- a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/testutil/Random.kt
+++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/testutil/Random.kt
@@ -10,15 +10,19 @@
 
 package de.justjanne.libquassel.protocol.testutil
 
+import de.justjanne.libquassel.protocol.models.ids.IdentityId
 import de.justjanne.libquassel.protocol.models.ids.NetworkId
+import de.justjanne.libquassel.protocol.models.network.NetworkServer
 import de.justjanne.libquassel.protocol.syncables.IrcChannel
 import de.justjanne.libquassel.protocol.syncables.IrcUser
 import de.justjanne.libquassel.protocol.syncables.state.IrcChannelState
 import de.justjanne.libquassel.protocol.syncables.state.IrcUserState
+import de.justjanne.libquassel.protocol.syncables.state.NetworkState
 import org.threeten.bp.Instant
 import java.util.EnumSet
 import java.util.UUID
 import kotlin.random.Random
+import kotlin.random.nextUInt
 
 fun Random.nextString(): String {
   return UUID(nextLong(), nextLong()).toString()
@@ -39,6 +43,71 @@ inline fun <reified T : Enum<T>> Random.nextEnum(): T {
 
 fun Random.nextInstant(): Instant = Instant.ofEpochMilli(nextLong())
 
+fun Random.nextNetwork(networkId: NetworkId) = NetworkState(
+  networkId = networkId,
+  identity = IdentityId(nextInt()),
+  myNick = nextString(),
+  latency = nextInt(),
+  networkName = nextString(),
+  currentServer = nextString(),
+  connected = nextBoolean(),
+  connectionState = nextEnum(),
+  ircUsers = List(nextInt(20)) {
+    nextIrcUser(networkId)
+  }.associateBy(IrcUser::nick),
+  ircChannels = List(nextInt(20)) {
+    nextIrcChannel(networkId)
+  }.associateBy(IrcChannel::name),
+  supports = List(nextInt(20)) {
+    nextString() to nextString()
+  }.toMap(),
+  caps = List(nextInt(20)) {
+    nextString() to nextString()
+  }.toMap(),
+  capsEnabled = List(nextInt(20)) {
+    nextString()
+  }.toSet(),
+  serverList = List(nextInt(20)) {
+    nextNetworkServer()
+  },
+  useRandomServer = nextBoolean(),
+  perform = List(nextInt(20)) {
+    nextString()
+  },
+  useAutoIdentify = nextBoolean(),
+  autoIdentifyService = nextString(),
+  autoIdentifyPassword = nextString(),
+  useSasl = nextBoolean(),
+  saslAccount = nextString(),
+  saslPassword = nextString(),
+  useAutoReconnect = nextBoolean(),
+  autoReconnectInterval = nextUInt(),
+  autoReconnectRetries = nextUInt(UShort.MAX_VALUE.toUInt()).toUShort(),
+  unlimitedReconnectRetries = nextBoolean(),
+  rejoinChannels = nextBoolean(),
+  useCustomMessageRate = nextBoolean(),
+  messageRateBurstSize = nextUInt(),
+  messageRateDelay = nextUInt(),
+  codecForServer = nextString(),
+  codecForEncoding = nextString(),
+  codecForDecoding = nextString()
+)
+
+fun Random.nextNetworkServer() = NetworkServer(
+  host = nextString(),
+  port = nextUInt(),
+  password = nextString(),
+  useSsl = nextBoolean(),
+  sslVerify = nextBoolean(),
+  sslVersion = nextInt(),
+  useProxy = nextBoolean(),
+  proxyType = nextEnum(),
+  proxyHost = nextString(),
+  proxyPort = nextUInt(),
+  proxyUser = nextString(),
+  proxyPass = nextString()
+)
+
 fun Random.nextIrcUser(
   networkId: NetworkId = NetworkId(nextInt())
 ) = IrcUser(
-- 
GitLab