From fafd18f344e7e50a570b2b465963ea70e3f074a6 Mon Sep 17 00:00:00 2001 From: Janne Koschinski <janne@kuschku.de> Date: Mon, 29 Jul 2019 23:35:39 +0200 Subject: [PATCH] Fixing crash clusters 5101dbb1 and 935b3057 --- .../de/kuschku/libquassel/session/Session.kt | 51 +++++++++++-------- 1 file changed, 31 insertions(+), 20 deletions(-) diff --git a/lib/src/main/java/de/kuschku/libquassel/session/Session.kt b/lib/src/main/java/de/kuschku/libquassel/session/Session.kt index 371c3a867..007047f1d 100644 --- a/lib/src/main/java/de/kuschku/libquassel/session/Session.kt +++ b/lib/src/main/java/de/kuschku/libquassel/session/Session.kt @@ -85,21 +85,24 @@ class Session( override val backlogManager = BacklogManager(this, backlogStorage) override val bufferViewManager = BufferViewManager(this) override val bufferSyncer = BufferSyncer(this, notificationManager) - override val certManagers = mutableMapOf<IdentityId, CertManager>() + override var certManagers = emptyMap<IdentityId, CertManager>() + private set override val coreInfo = CoreInfo(this) override val dccConfig = DccConfig(this) - override val identities = mutableMapOf<IdentityId, Identity>() + override var identities = emptyMap<IdentityId, Identity>() + private set private val live_identities = BehaviorSubject.createDefault(Unit) - override fun liveIdentities(): Observable<Map<IdentityId, Identity>> = live_identities.map { identities.toMap() } + override fun liveIdentities(): Observable<Map<IdentityId, Identity>> = live_identities.map { identities } override val ignoreListManager = IgnoreListManager(this) override val highlightRuleManager = HighlightRuleManager(this) override val ircListHelper = IrcListHelper(this) - override val networks = mutableMapOf<NetworkId, Network>() + override var networks = emptyMap<NetworkId, Network>() + private set private val live_networks = BehaviorSubject.createDefault(Unit) - override fun liveNetworks(): Observable<Map<NetworkId, Network>> = live_networks.map { networks.toMap() } + override fun liveNetworks(): Observable<Map<NetworkId, Network>> = live_networks.map { networks } private val network_added = PublishSubject.create<NetworkId>() override fun liveNetworkAdded(): Observable<NetworkId> = network_added @@ -183,14 +186,15 @@ class Session( override fun addNetwork(networkId: NetworkId) { val network = Network(networkId, this) - networks[networkId] = network + networks = networks + Pair(networkId, network) synchronize(network) live_networks.onNext(Unit) network_added.onNext(networkId) } override fun removeNetwork(networkId: NetworkId) { - val network = networks.remove(networkId) + val network = networks[networkId] + networks = networks - networkId stopSynchronize(network) live_networks.onNext(Unit) } @@ -198,13 +202,14 @@ class Session( override fun addIdentity(initData: QVariantMap) { val identity = Identity(this) identity.fromVariantMap(initData) - identities[identity.id()] = identity + identities = identities + Pair(identity.id(), identity) synchronize(identity) live_identities.onNext(Unit) } override fun removeIdentity(identityId: IdentityId) { - val identity = identities.remove(identityId) + val identity = identities[identityId] + identities = identities - identityId stopSynchronize(identity) live_identities.onNext(Unit) } @@ -219,23 +224,29 @@ class Session( handlerService.backend { bufferSyncer.initSetBufferInfos(f.bufferInfos) - f.networkIds?.forEach { - val network = Network(it.value(NetworkId(-1)), this) - networks[network.networkId()] = network - } + networks = f.networkIds?.map { + Pair(it.value(NetworkId(-1)), Network(it.value(NetworkId(-1)), this)) + }?.toMap().orEmpty() live_networks.onNext(Unit) - f.identities?.forEach { + val identityCertmanagerPairs = f.identities?.map { val identity = Identity(this) identity.fromVariantMap(it.valueOr(::emptyMap)) identity.initialized = true identity.init() - identities[identity.id()] = identity synchronize(identity) val certManager = CertManager(identity.id(), this) - certManagers[identity.id()] = certManager - } + Pair(identity, certManager) + }?.toMap().orEmpty() + + identities = identityCertmanagerPairs.map { (identity, _) -> + Pair(identity.id(), identity) + }.toMap() + + certManagers = identityCertmanagerPairs.map { (identity, certManager) -> + Pair(identity.id(), certManager) + }.toMap() isInitializing = true networks.values.forEach { syncableObject -> this.synchronize(syncableObject, true) } @@ -318,10 +329,10 @@ class Session( backlogManager.deinit() rpcHandler.deinit() - certManagers.clear() - identities.clear() + certManagers = emptyMap() + identities = emptyMap() live_identities.onNext(Unit) - networks.clear() + networks = emptyMap() live_networks.onNext(Unit) } -- GitLab