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