fix: 朗读配置面板无法标识当前引擎及切换引擎后状态不一致
This commit is contained in:
3 files changed
+39
-7
No files matched your search
@@ -133,6 +133,7 @@ data class ReadBookUiState(
|
|||||||
val contentEditSaveToSource: Boolean = false,
|
val contentEditSaveToSource: Boolean = false,
|
||||||
val ttsEngineItems: ImmutableList<ReadBookTtsEngineItem> = persistentListOf(),
|
val ttsEngineItems: ImmutableList<ReadBookTtsEngineItem> = persistentListOf(),
|
||||||
val selectedTtsEngine: String? = null,
|
val selectedTtsEngine: String? = null,
|
||||||
|
val speakEngineName: String = "",
|
||||||
val preDownloadNum: Int = 10,
|
val preDownloadNum: Int = 10,
|
||||||
val audioCacheCleanTime: Int = 10,
|
val audioCacheCleanTime: Int = 10,
|
||||||
// Read aloud config
|
// Read aloud config
|
||||||
|
|||||||
@@ -39,10 +39,9 @@ import io.legado.app.help.book.removeType
|
|||||||
import io.legado.app.help.book.simulatedTotalChapterNum
|
import io.legado.app.help.book.simulatedTotalChapterNum
|
||||||
import io.legado.app.help.config.AppConfig
|
import io.legado.app.help.config.AppConfig
|
||||||
import io.legado.app.help.config.ReadBookConfig
|
import io.legado.app.help.config.ReadBookConfig
|
||||||
import io.legado.app.ui.config.themeConfig.ThemeConfig
|
|
||||||
import io.legado.app.ui.book.read.config.HighlightRuleStore
|
|
||||||
import io.legado.app.help.coroutine.Coroutine
|
import io.legado.app.help.coroutine.Coroutine
|
||||||
import io.legado.app.help.source.getSourceType
|
import io.legado.app.help.source.getSourceType
|
||||||
|
import io.legado.app.lib.dialogs.SelectItem
|
||||||
import io.legado.app.model.ImageProvider
|
import io.legado.app.model.ImageProvider
|
||||||
import io.legado.app.model.ReadAloud
|
import io.legado.app.model.ReadAloud
|
||||||
import io.legado.app.model.ReadBook
|
import io.legado.app.model.ReadBook
|
||||||
@@ -53,15 +52,19 @@ import io.legado.app.model.analyzeRule.AnalyzeRule.Companion.setCoroutineContext
|
|||||||
import io.legado.app.model.localBook.LocalBook
|
import io.legado.app.model.localBook.LocalBook
|
||||||
import io.legado.app.model.webBook.WebBook
|
import io.legado.app.model.webBook.WebBook
|
||||||
import io.legado.app.service.BaseReadAloudService
|
import io.legado.app.service.BaseReadAloudService
|
||||||
|
import io.legado.app.ui.book.read.config.HighlightRuleStore
|
||||||
import io.legado.app.ui.book.read.page.entities.TextChapter
|
import io.legado.app.ui.book.read.page.entities.TextChapter
|
||||||
import io.legado.app.ui.book.read.page.entities.TextPage
|
import io.legado.app.ui.book.read.page.entities.TextPage
|
||||||
import io.legado.app.ui.book.read.page.provider.ChapterProvider
|
import io.legado.app.ui.book.read.page.provider.ChapterProvider
|
||||||
import io.legado.app.ui.book.read.page.provider.TextChapterLayout
|
import io.legado.app.ui.book.read.page.provider.TextChapterLayout
|
||||||
import splitties.init.appCtx
|
|
||||||
import io.legado.app.ui.book.searchContent.SearchResult
|
import io.legado.app.ui.book.searchContent.SearchResult
|
||||||
import io.legado.app.ui.config.otherConfig.OtherConfig
|
import io.legado.app.ui.config.otherConfig.OtherConfig
|
||||||
|
import io.legado.app.ui.config.themeConfig.ThemeConfig
|
||||||
|
import io.legado.app.utils.GSON
|
||||||
import io.legado.app.utils.ImageSaveUtils
|
import io.legado.app.utils.ImageSaveUtils
|
||||||
import io.legado.app.utils.NetworkUtils
|
import io.legado.app.utils.NetworkUtils
|
||||||
|
import io.legado.app.utils.fromJsonObject
|
||||||
|
import io.legado.app.utils.StringUtils
|
||||||
import io.legado.app.utils.hexString
|
import io.legado.app.utils.hexString
|
||||||
import io.legado.app.utils.isAbsUrl
|
import io.legado.app.utils.isAbsUrl
|
||||||
import io.legado.app.utils.isTrue
|
import io.legado.app.utils.isTrue
|
||||||
@@ -525,7 +528,13 @@ class ReadBookViewModel(
|
|||||||
}
|
}
|
||||||
|
|
||||||
is ReadBookIntent.ShowReadAloudConfig -> {
|
is ReadBookIntent.ShowReadAloudConfig -> {
|
||||||
_uiState.update { it.copy(activeSheet = ReadBookSheet.ReadAloudConfig) }
|
_uiState.update {
|
||||||
|
it.copy(
|
||||||
|
speakEngineName = computeSpeakEngineName(),
|
||||||
|
activeSheet = ReadBookSheet.ReadAloudConfig,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
loadTtsEngineItems()
|
||||||
}
|
}
|
||||||
|
|
||||||
is ReadBookIntent.SelectSpeakEngine -> {
|
is ReadBookIntent.SelectSpeakEngine -> {
|
||||||
@@ -554,7 +563,8 @@ class ReadBookViewModel(
|
|||||||
AppConfig.ttsEngine = intent.value
|
AppConfig.ttsEngine = intent.value
|
||||||
_uiState.update {
|
_uiState.update {
|
||||||
it.copy(
|
it.copy(
|
||||||
selectedTtsEngine = intent.value,
|
selectedTtsEngine = ReadAloud.ttsEngine,
|
||||||
|
speakEngineName = computeSpeakEngineName(),
|
||||||
activeSheet = ReadBookSheet.ReadAloudConfig,
|
activeSheet = ReadBookSheet.ReadAloudConfig,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -850,6 +860,12 @@ class ReadBookViewModel(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun showSpeakEngineConfig() {
|
private fun showSpeakEngineConfig() {
|
||||||
|
loadTtsEngineItems {
|
||||||
|
_uiState.update { it.copy(activeSheet = ReadBookSheet.SpeakEngineConfig) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun loadTtsEngineItems(onSuccess: (() -> Unit)? = null) {
|
||||||
execute {
|
execute {
|
||||||
buildList {
|
buildList {
|
||||||
add(ReadBookTtsEngineItem(context.getString(R.string.system_tts), null))
|
add(ReadBookTtsEngineItem(context.getString(R.string.system_tts), null))
|
||||||
@@ -861,13 +877,25 @@ class ReadBookViewModel(
|
|||||||
_uiState.update {
|
_uiState.update {
|
||||||
it.copy(
|
it.copy(
|
||||||
ttsEngineItems = items.toImmutableList(),
|
ttsEngineItems = items.toImmutableList(),
|
||||||
selectedTtsEngine = AppConfig.ttsEngine,
|
selectedTtsEngine = ReadAloud.ttsEngine,
|
||||||
activeSheet = ReadBookSheet.SpeakEngineConfig,
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
onSuccess?.invoke()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun computeSpeakEngineName(): String {
|
||||||
|
val ttsEngine = ReadAloud.ttsEngine
|
||||||
|
?: return context.getString(R.string.system_tts)
|
||||||
|
if (StringUtils.isNumeric(ttsEngine)) {
|
||||||
|
return appDb.httpTTSDao.getName(ttsEngine.toLong())
|
||||||
|
?: context.getString(R.string.system_tts)
|
||||||
|
}
|
||||||
|
return GSON.fromJsonObject<SelectItem<String>>(ttsEngine)
|
||||||
|
.getOrNull()?.title
|
||||||
|
?: context.getString(R.string.system_tts)
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called from the network changed listener (registered by route).
|
* Called from the network changed listener (registered by route).
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -97,6 +97,9 @@ fun ReadAloudConfigSheet(
|
|||||||
)
|
)
|
||||||
TinyClickableSettingItem(
|
TinyClickableSettingItem(
|
||||||
title = stringResource(R.string.speak_engine),
|
title = stringResource(R.string.speak_engine),
|
||||||
|
description = state.speakEngineName.ifEmpty {
|
||||||
|
stringResource(R.string.system_tts)
|
||||||
|
},
|
||||||
onClick = { onIntent(ReadBookIntent.SelectSpeakEngine) },
|
onClick = { onIntent(ReadBookIntent.SelectSpeakEngine) },
|
||||||
)
|
)
|
||||||
TinyClickableSettingItem(
|
TinyClickableSettingItem(
|
||||||
|
|||||||
Reference in new issue
Block a user