settings wird so langsam (#1)

This commit is contained in:
Hartmut Bauer committed 2026-02-05 18:41:38 +01:00
1 parent 231132dd9e
commit 632d7c34ef
10 files changed
+68 -3

No files matched your search

@@ -0,0 +1,3 @@
package net.keinekekse.app.config
expect fun configProperties(): ConfigProperties
@@ -0,0 +1,8 @@
package net.keinekekse.app.config
import org.koin.core.annotation.Singleton
@Singleton
actual fun configProperties(): ConfigProperties {
return JvmConfigProperties("config.properties")
}
@@ -19,6 +19,7 @@ import kotlinx.coroutines.withContext
import net.keinekekse.app.auth.AuthResult import net.keinekekse.app.auth.AuthResult
import net.keinekekse.app.auth.Authenticator import net.keinekekse.app.auth.Authenticator
import net.keinekekse.app.books.di.KoinApp import net.keinekekse.app.books.di.KoinApp
import net.keinekekse.app.config.ConfigProperties
import net.keinekekse.app.config.Settings import net.keinekekse.app.config.Settings
import net.keinekekse.app.ui.ProgressIndicator import net.keinekekse.app.ui.ProgressIndicator
import org.koin.compose.koinInject import org.koin.compose.koinInject
@@ -37,12 +38,14 @@ fun main() = application {
startKoin<KoinApp>() startKoin<KoinApp>()
val config: ConfigProperties = koinInject()
val settings: Settings = koinInject() val settings: Settings = koinInject()
// val settings: Settings = PreferencesSettings(delegate) // val settings: Settings = PreferencesSettings(delegate)
// //
// settings.put("kc_server", "kec.keinekekse.net") // settings.put("kc_server", "kec.keinekekse.net")
println(settings.get("kc_server", "default")) println("Properties: ${config["keycloakServer"]}")
println("Settings: ${settings.get("kc_server", "default")}")
// println(Preferences.userRoot()) // println(Preferences.userRoot())
// println("System properties:") // println("System properties:")
@@ -0,0 +1,3 @@
keycloakServer=kec.keinekekse.net
keycloakRealm=app-server-realm
keycloakClient=pkce-book-app
+1
View File
@@ -24,6 +24,7 @@ kotlin {
sourceSets { sourceSets {
commonMain.dependencies { commonMain.dependencies {
implementation(libs.bundles.kotlin.compose) implementation(libs.bundles.kotlin.compose)
implementation(libs.ktor.serializationJson)
} }
jvmMain.dependencies { jvmMain.dependencies {
@@ -0,0 +1,5 @@
package net.keinekekse.app.config
interface ConfigProperties {
operator fun get(key: String): String?
}
@@ -1,5 +1,10 @@
package net.keinekekse.app.config package net.keinekekse.app.config
import kotlinx.serialization.Serializable
@Serializable
data class SettingsEntry(val key: String, val value: String)
interface Settings { interface Settings {
fun get(key: String): String? fun get(key: String): String?
fun get(key: String, default: String): String = get(key) ?: default fun get(key: String, default: String): String = get(key) ?: default
@@ -24,4 +29,7 @@ interface Settings {
fun size(): Int fun size(): Int
fun keys(): Set<String> fun keys(): Set<String>
fun export(): String
fun import(data: String)
} }
@@ -10,8 +10,6 @@ import androidx.compose.ui.draw.drawBehind
import androidx.compose.ui.graphics.drawscope.Stroke import androidx.compose.ui.graphics.drawscope.Stroke
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
// TODO (ProgressIndicator.() -> Unit) --> { animationSize = ....
@Composable @Composable
fun ProgressIndicator(animationSize: Int = 48, paddingTop: Int = 16, strokeWidth: Int = 5) { fun ProgressIndicator(animationSize: Int = 48, paddingTop: Int = 16, strokeWidth: Int = 5) {
val primaryColor = MaterialTheme.colorScheme.primary val primaryColor = MaterialTheme.colorScheme.primary
@@ -0,0 +1,26 @@
package net.keinekekse.app.config
import java.io.InputStream
import java.util.*
class JvmConfigProperties(val configFileName: String = "config.properties") : ConfigProperties {
private var properties = Properties()
override operator fun get(key: String): String? = properties.getProperty(key)
init {
loadConfigFile()
}
private fun loadConfigFile() {
getConfigStream().use { stream ->
properties.load(stream)
}
}
private fun getConfigStream(): InputStream {
return javaClass.classLoader.getResourceAsStream(configFileName)
?: throw IllegalStateException("Could not load configuration from $configFileName")
}
}
@@ -1,5 +1,6 @@
package net.keinekekse.app.config package net.keinekekse.app.config
import kotlinx.serialization.json.Json
import java.util.prefs.Preferences import java.util.prefs.Preferences
class JvmSettings(clazz: Class<*>? = null) : Settings { class JvmSettings(clazz: Class<*>? = null) : Settings {
@@ -52,4 +53,13 @@ class JvmSettings(clazz: Class<*>? = null) : Settings {
override fun keys(): Set<String> { override fun keys(): Set<String> {
return preferences.keys().toSet() return preferences.keys().toSet()
} }
override fun export(): String {
val prefList = keys().filter { get(it) != null }.map { SettingsEntry(it, get(it)!!) }
return Json {}.encodeToString(prefList)
}
override fun import(data: String) {
Json { }.decodeFromString<List<SettingsEntry>>(data).forEach { put(it.key, it.value) }
}
} }