diff --git a/lib/src/main/java/de/kuschku/libquassel/session/ObjectStorage.kt b/lib/src/main/java/de/kuschku/libquassel/session/ObjectStorage.kt index 5cee6a28efcaca47eb8b803e4dd2459483c57a9b..044bfeba440ed854a7dc5ee8e33aee58f27949cc 100644 --- a/lib/src/main/java/de/kuschku/libquassel/session/ObjectStorage.kt +++ b/lib/src/main/java/de/kuschku/libquassel/session/ObjectStorage.kt @@ -6,6 +6,7 @@ import de.kuschku.libquassel.protocol.Type import de.kuschku.libquassel.protocol.message.SignalProxyMessage import de.kuschku.libquassel.quassel.exceptions.ObjectNotFoundException import de.kuschku.libquassel.quassel.syncables.interfaces.ISyncableObject +import de.kuschku.libquassel.util.helpers.removeIfEqual class ObjectStorage(private val proxy: SignalProxy) { private val objectTree: MutableMap<Pair<String, String>, ISyncableObject> = HashMap() @@ -35,7 +36,7 @@ class ObjectStorage(private val proxy: SignalProxy) { fun rename(obj: ISyncableObject, new: String, old: String) { objectTree[Pair(obj.className, new)] = obj - objectTree.remove(Pair(obj.className, old), obj) + objectTree.removeIfEqual(Pair(obj.className, old), obj) if (get(obj.className, new) != obj) { throw IllegalStateException("Object should be existing") } diff --git a/lib/src/main/java/de/kuschku/libquassel/util/helpers/MapHelper.kt b/lib/src/main/java/de/kuschku/libquassel/util/helpers/MapHelper.kt index 471d163478f74bc441746ff7610d5f0994dd9fa8..d0aeb7099416b027fd59baa908b30dd79221601f 100644 --- a/lib/src/main/java/de/kuschku/libquassel/util/helpers/MapHelper.kt +++ b/lib/src/main/java/de/kuschku/libquassel/util/helpers/MapHelper.kt @@ -1,3 +1,14 @@ package de.kuschku.libquassel.util.helpers fun <K, V> Map<K, V>.getOr(key: K, defValue: V) = this[key] ?: defValue + +fun <K, V> MutableMap<K, V>.removeIfEqual(key: K, value: V): Boolean { + if (!this.containsKey(key)) + return false + + if (this[key] != value) + return false + + this.remove(key) + return true +}