fix: dataStore逻辑

This commit is contained in:
HapeLee
2026-06-08 13:51:12 +08:00
parent bdc0424073
commit 2ba5f98db9
3 changed files with 13 additions and 15 deletions
@@ -4,6 +4,7 @@ import android.content.SharedPreferences
import android.os.Build
import io.legado.app.BuildConfig
import io.legado.app.constant.PreferKey
import io.legado.app.ui.config.themeConfig.ThemeConfig
import io.legado.app.data.appDb
import io.legado.app.data.repository.ReadPreferences
import io.legado.app.ui.book.manga.config.MangaScrollMode
@@ -50,7 +51,7 @@ object AppConfig : SharedPreferences.OnSharedPreferenceChangeListener {
var mangaClickActionBC = appCtx.getPrefInt(PreferKey.mangaClickActionBC, 1)
var mangaClickActionBR = appCtx.getPrefInt(PreferKey.mangaClickActionBR, 1)
var themeMode = appCtx.getPrefString(PreferKey.themeMode, "0")
val themeMode get() = ThemeConfig.themeMode
var AppTheme = appCtx.getPrefString(PreferKey.appTheme, "0")
var swipeAnimation = appCtx.getPrefBoolean(PreferKey.swipeAnimation, true)
@@ -205,10 +206,6 @@ object AppConfig : SharedPreferences.OnSharedPreferenceChangeListener {
AppTheme = appCtx.getPrefString(PreferKey.appTheme, "0")
}
PreferKey.themeMode -> {
themeMode = appCtx.getPrefString(PreferKey.themeMode, "0")
}
PreferKey.clickActionTL -> clickActionTL =
appCtx.getPrefInt(PreferKey.clickActionTL, 2)
@@ -2587,8 +2587,6 @@ class ReadBookViewModel(
else -> "0" // dark → follow system
}
ThemeConfig.themeMode = nextMode
// 同步更新 AppConfig 缓存,确保 View 层 ReadStyleResolver 立即读到新值
AppConfig.themeMode = nextMode
_uiState.update { it.copy(styleConfig = buildStyleConfig()) }
_effects.tryEmit(ReadBookEffect.UpdateReadViewConfig(
setOf(
@@ -125,14 +125,17 @@ fun <T> prefDelegate(
is Long -> appCtx.putPrefLong(key, value)
is Float -> appCtx.putPrefFloat(key, value)
}
// 同步写入 DataStore(权威存储),确保持久化后再返回
runBlocking(Dispatchers.IO) {
when (value) {
is String? -> DsSync.putString(key, value)
is Int -> DsSync.putInt(key, value)
is Boolean -> DsSync.putBoolean(key, value)
is Long -> DsSync.putLong(key, value)
is Float -> DsSync.putFloat(key, value)
// 同步写入 DataStore,确保持久化后再返回
// 异常不阻断流程:SP 已写入,readFromDs() 会回退到 SP 读取
runCatching {
runBlocking(Dispatchers.IO) {
when (value) {
is String? -> DsSync.putString(key, value)
is Int -> DsSync.putInt(key, value)
is Boolean -> DsSync.putBoolean(key, value)
is Long -> DsSync.putLong(key, value)
is Float -> DsSync.putFloat(key, value)
}
}
}
onValueChange?.invoke(value)