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(