commit 86404c9b380b78321aa48c0dfd3269a27ea75147
parent d8e98d575bca8cca12c3cfa163ec89cb2abee5fd
Author: rhunk <101876869+rhunk@users.noreply.github.com>
Date: Thu, 27 Jun 2024 23:33:32 +0200
fix(common/config): concurrent load
Signed-off-by: rhunk <101876869+rhunk@users.noreply.github.com>
Diffstat:
1 file changed, 26 insertions(+), 20 deletions(-)
diff --git a/common/src/main/kotlin/me/rhunk/snapenhance/common/config/ModConfig.kt b/common/src/main/kotlin/me/rhunk/snapenhance/common/config/ModConfig.kt
@@ -34,41 +34,47 @@ class ModConfig(
private fun createRootConfig() = RootConfig().apply { lateInit(context) }
fun load() {
- root = createRootConfig()
wasPresent = fileWrapper.exists()
- if (!wasPresent) {
- writeConfig()
- return
- }
-
- runCatching {
- loadConfig()
- }.onFailure {
- writeConfig()
+ root = createRootConfig().apply {
+ if (!wasPresent) {
+ writeConfigObject(this)
+ return@apply
+ }
+ runCatching {
+ loadConfig(this)
+ }.onFailure {
+ writeConfigObject(this)
+ }
}
}
- private fun loadConfig() {
+ private fun loadConfig(config: RootConfig) {
val configFileContent = fileWrapper.readBytes()
val configObject = gson.fromJson(configFileContent.toString(Charsets.UTF_8), JsonObject::class.java)
locale = configObject.get("_locale")?.asString ?: LocaleWrapper.DEFAULT_LOCALE
- root.fromJson(configObject)
+ config.fromJson(configObject)
}
fun exportToString(
- exportSensitiveData: Boolean = true
+ exportSensitiveData: Boolean = true,
+ config: RootConfig = root,
): String {
- val configObject = root.toJson(exportSensitiveData)
- configObject.addProperty("_locale", locale)
- return gson.toJson(configObject)
+ return gson.toJson(config.toJson(exportSensitiveData).apply {
+ addProperty("_locale", locale)
+ })
}
fun reset() {
- root = RootConfig()
- writeConfig()
+ root = RootConfig().apply {
+ writeConfigObject(this)
+ }
}
fun writeConfig() {
+ writeConfigObject(root)
+ }
+
+ private fun writeConfigObject(config: RootConfig) {
var shouldRestart = false
var shouldCleanCache = false
var configChanged = false
@@ -105,13 +111,13 @@ class ModConfig(
}
val oldConfig = runCatching { fileWrapper.readBytes().toString(Charsets.UTF_8) }.getOrNull()
- fileWrapper.writeBytes(exportToString().toByteArray(Charsets.UTF_8))
+ fileWrapper.writeBytes(exportToString(config = config).toByteArray(Charsets.UTF_8))
configStateListener?.also {
runCatching {
compareDiff(createRootConfig().apply {
fromJson(gson.fromJson(oldConfig ?: return@runCatching, JsonObject::class.java))
- }, root)
+ }, config)
if (configChanged) {
it.onConfigChanged()