|
|
@@ -1,35 +1,83 @@
|
|
|
package io.legado.app.ui.book.changesource
|
|
|
|
|
|
-import io.legado.app.constant.PreferKey
|
|
|
+import androidx.compose.runtime.mutableStateOf
|
|
|
+import androidx.compose.runtime.snapshots.Snapshot
|
|
|
+import io.legado.app.data.local.preferences.LocalPreferencesKeys
|
|
|
+import io.legado.app.data.local.preferences.LocalPreferencesRepository
|
|
|
import io.legado.app.domain.usecase.ChangeSourceMigrationOptions
|
|
|
import io.legado.app.ui.config.prefDelegate
|
|
|
+import kotlinx.coroutines.CoroutineScope
|
|
|
+import kotlinx.coroutines.Dispatchers
|
|
|
+import kotlinx.coroutines.SupervisorJob
|
|
|
+import kotlinx.coroutines.flow.first
|
|
|
+import kotlinx.coroutines.launch
|
|
|
+import kotlinx.coroutines.runBlocking
|
|
|
+import splitties.init.appCtx
|
|
|
|
|
|
object ChangeSourceConfig {
|
|
|
|
|
|
- var searchScope by prefDelegate(
|
|
|
- key = "changeSourceSearchScope",
|
|
|
- defaultValue = ""
|
|
|
- )
|
|
|
+ private val repo = LocalPreferencesRepository(appCtx)
|
|
|
+ private val scope = CoroutineScope(Dispatchers.IO + SupervisorJob())
|
|
|
|
|
|
- var checkAuthor by prefDelegate(
|
|
|
- key = PreferKey.changeSourceCheckAuthor,
|
|
|
- defaultValue = false
|
|
|
- )
|
|
|
+ private val _searchScope = mutableStateOf("")
|
|
|
+ var searchScope: String
|
|
|
+ get() = _searchScope.value
|
|
|
+ set(value) {
|
|
|
+ if (_searchScope.value != value) {
|
|
|
+ Snapshot.withMutableSnapshot { _searchScope.value = value }
|
|
|
+ scope.launch {
|
|
|
+ repo.updatePreference(LocalPreferencesKeys.CHANGE_SOURCE_SEARCH_SCOPE, value)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- var loadInfo by prefDelegate(
|
|
|
- key = PreferKey.changeSourceLoadInfo,
|
|
|
- defaultValue = false
|
|
|
- )
|
|
|
+ private val _checkAuthor = mutableStateOf(false)
|
|
|
+ var checkAuthor: Boolean
|
|
|
+ get() = _checkAuthor.value
|
|
|
+ set(value) {
|
|
|
+ if (_checkAuthor.value != value) {
|
|
|
+ Snapshot.withMutableSnapshot { _checkAuthor.value = value }
|
|
|
+ scope.launch {
|
|
|
+ repo.updatePreference(LocalPreferencesKeys.CHANGE_SOURCE_CHECK_AUTHOR, value)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- var loadToc by prefDelegate(
|
|
|
- key = PreferKey.changeSourceLoadToc,
|
|
|
- defaultValue = false
|
|
|
- )
|
|
|
+ private val _loadInfo = mutableStateOf(false)
|
|
|
+ var loadInfo: Boolean
|
|
|
+ get() = _loadInfo.value
|
|
|
+ set(value) {
|
|
|
+ if (_loadInfo.value != value) {
|
|
|
+ Snapshot.withMutableSnapshot { _loadInfo.value = value }
|
|
|
+ scope.launch {
|
|
|
+ repo.updatePreference(LocalPreferencesKeys.CHANGE_SOURCE_LOAD_INFO, value)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- var loadWordCount by prefDelegate(
|
|
|
- key = PreferKey.changeSourceLoadWordCount,
|
|
|
- defaultValue = false
|
|
|
- )
|
|
|
+ private val _loadToc = mutableStateOf(false)
|
|
|
+ var loadToc: Boolean
|
|
|
+ get() = _loadToc.value
|
|
|
+ set(value) {
|
|
|
+ if (_loadToc.value != value) {
|
|
|
+ Snapshot.withMutableSnapshot { _loadToc.value = value }
|
|
|
+ scope.launch {
|
|
|
+ repo.updatePreference(LocalPreferencesKeys.CHANGE_SOURCE_LOAD_TOC, value)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private val _loadWordCount = mutableStateOf(false)
|
|
|
+ var loadWordCount: Boolean
|
|
|
+ get() = _loadWordCount.value
|
|
|
+ set(value) {
|
|
|
+ if (_loadWordCount.value != value) {
|
|
|
+ Snapshot.withMutableSnapshot { _loadWordCount.value = value }
|
|
|
+ scope.launch {
|
|
|
+ repo.updatePreference(LocalPreferencesKeys.CHANGE_SOURCE_LOAD_WORD_COUNT, value)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
var migrateChapters by prefDelegate(
|
|
|
key = "migrateChapters",
|
|
|
@@ -64,6 +112,44 @@ object ChangeSourceConfig {
|
|
|
defaultValue = false
|
|
|
)
|
|
|
|
|
|
+ init {
|
|
|
+ runBlocking(Dispatchers.IO) {
|
|
|
+ Snapshot.withMutableSnapshot {
|
|
|
+ _searchScope.value =
|
|
|
+ repo.getPreference(LocalPreferencesKeys.CHANGE_SOURCE_SEARCH_SCOPE, "").first()
|
|
|
+ _checkAuthor.value =
|
|
|
+ repo.getPreference(LocalPreferencesKeys.CHANGE_SOURCE_CHECK_AUTHOR, false).first()
|
|
|
+ _loadInfo.value =
|
|
|
+ repo.getPreference(LocalPreferencesKeys.CHANGE_SOURCE_LOAD_INFO, false).first()
|
|
|
+ _loadToc.value =
|
|
|
+ repo.getPreference(LocalPreferencesKeys.CHANGE_SOURCE_LOAD_TOC, false).first()
|
|
|
+ _loadWordCount.value =
|
|
|
+ repo.getPreference(LocalPreferencesKeys.CHANGE_SOURCE_LOAD_WORD_COUNT, false).first()
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ scope.launch {
|
|
|
+ repo.getPreference(LocalPreferencesKeys.CHANGE_SOURCE_SEARCH_SCOPE, "")
|
|
|
+ .collect { Snapshot.withMutableSnapshot { _searchScope.value = it } }
|
|
|
+ }
|
|
|
+ scope.launch {
|
|
|
+ repo.getPreference(LocalPreferencesKeys.CHANGE_SOURCE_CHECK_AUTHOR, false)
|
|
|
+ .collect { Snapshot.withMutableSnapshot { _checkAuthor.value = it } }
|
|
|
+ }
|
|
|
+ scope.launch {
|
|
|
+ repo.getPreference(LocalPreferencesKeys.CHANGE_SOURCE_LOAD_INFO, false)
|
|
|
+ .collect { Snapshot.withMutableSnapshot { _loadInfo.value = it } }
|
|
|
+ }
|
|
|
+ scope.launch {
|
|
|
+ repo.getPreference(LocalPreferencesKeys.CHANGE_SOURCE_LOAD_TOC, false)
|
|
|
+ .collect { Snapshot.withMutableSnapshot { _loadToc.value = it } }
|
|
|
+ }
|
|
|
+ scope.launch {
|
|
|
+ repo.getPreference(LocalPreferencesKeys.CHANGE_SOURCE_LOAD_WORD_COUNT, false)
|
|
|
+ .collect { Snapshot.withMutableSnapshot { _loadWordCount.value = it } }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
fun getMigrationOptions(): ChangeSourceMigrationOptions {
|
|
|
return ChangeSourceMigrationOptions(
|
|
|
migrateChapters = migrateChapters,
|