From aa75678f71e40fe229e69d7a46da281ca9dd7f9f Mon Sep 17 00:00:00 2001 From: Syer10 Date: Wed, 16 Jun 2021 20:22:20 -0400 Subject: [PATCH] Half fix StringSet listener --- .../kotlin/ca/gosyer/core/prefs/JvmPreference.kt | 4 +++- .../ca/gosyer/core/prefs/JvmPreferenceAdapters.kt | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/main/kotlin/ca/gosyer/core/prefs/JvmPreference.kt b/src/main/kotlin/ca/gosyer/core/prefs/JvmPreference.kt index b7f76e39..4386e005 100644 --- a/src/main/kotlin/ca/gosyer/core/prefs/JvmPreference.kt +++ b/src/main/kotlin/ca/gosyer/core/prefs/JvmPreference.kt @@ -30,6 +30,8 @@ internal class JvmPreference( fun set(key: String, value: T, editor: ObservableSettings) fun isSet(keys: Set, key: String): Boolean = key in keys + + fun keyListener(key: String) = key } /** @@ -83,7 +85,7 @@ internal class JvmPreference( */ override fun changes(): Flow { return callbackFlow { - val listener = preferences.addListener(key) { + val listener = preferences.addListener(adapter.keyListener(key)) { trySend(get()) } awaitClose { listener.deactivate() } diff --git a/src/main/kotlin/ca/gosyer/core/prefs/JvmPreferenceAdapters.kt b/src/main/kotlin/ca/gosyer/core/prefs/JvmPreferenceAdapters.kt index a8d8310a..ac9d6ef7 100644 --- a/src/main/kotlin/ca/gosyer/core/prefs/JvmPreferenceAdapters.kt +++ b/src/main/kotlin/ca/gosyer/core/prefs/JvmPreferenceAdapters.kt @@ -73,6 +73,21 @@ internal object StringSetAdapter : JvmPreference.Adapter> { override fun set(key: String, value: Set, editor: ObservableSettings) { editor.encodeValue(SetSerializer(String.serializer()), key, value) } + + /** + * Encoding a string set makes a list of keys and a size key, such as key.size and key.0-size + */ + override fun isSet(keys: Set, key: String): Boolean { + return keys.contains("$key.size") + } + + /** + * Watching the regular key doesnt produce updates for a string set for some reason + * TODO make better, doesnt produce updates when you add something and remove something + */ + override fun keyListener(key: String): String { + return "$key.size" + } } internal class ObjectAdapter(