diff --git a/app/src/main/assets/updateLog.md b/app/src/main/assets/updateLog.md index 105bae5e3..786b426c5 100644 --- a/app/src/main/assets/updateLog.md +++ b/app/src/main/assets/updateLog.md @@ -18,6 +18,7 @@ * txt单章字数超102400均分txt,添加开关 by Xwite * 修复tts被回收后无法继续朗读的bug,重新初始化tts * webDav备份支持自定义文件夹 +* tts朗读引擎按书籍配置,未设置的和上一次设置的引擎相同 **2022/02/03** diff --git a/app/src/main/java/io/legado/app/data/entities/Book.kt b/app/src/main/java/io/legado/app/data/entities/Book.kt index 8384e7305..18dedb468 100644 --- a/app/src/main/java/io/legado/app/data/entities/Book.kt +++ b/app/src/main/java/io/legado/app/data/entities/Book.kt @@ -188,6 +188,14 @@ data class Book( return config().delTag and tag == tag } + var ttsEngine: String? + get() = config().ttsEngine + set(value) { + config().ttsEngine = value + AppConfig.ttsEngine = value + save() + } + fun getFolderName(): String { //防止书名过长,只取9位 var folderName = name.replace(AppPattern.fileNameRegex, "") @@ -277,6 +285,7 @@ data class Book( data class ReadConfig( var reverseToc: Boolean = false, var pageAnim: Int = -1, + var ttsEngine: String? = AppConfig.ttsEngine, var reSegment: Boolean = false, var limitContentLength: Boolean = true, //txt规则解析目录时超过规定的最大字数时均分txt var imageStyle: String? = null, diff --git a/app/src/main/java/io/legado/app/model/ReadAloud.kt b/app/src/main/java/io/legado/app/model/ReadAloud.kt index 65f5ee6eb..b320f625f 100644 --- a/app/src/main/java/io/legado/app/model/ReadAloud.kt +++ b/app/src/main/java/io/legado/app/model/ReadAloud.kt @@ -5,7 +5,6 @@ import android.content.Intent import io.legado.app.constant.IntentAction import io.legado.app.data.appDb import io.legado.app.data.entities.HttpTTS -import io.legado.app.help.AppConfig import io.legado.app.service.BaseReadAloudService import io.legado.app.service.HttpReadAloudService import io.legado.app.service.TTSReadAloudService @@ -17,7 +16,7 @@ object ReadAloud { var httpTTS: HttpTTS? = null private fun getReadAloudClass(): Class<*> { - val ttsEngine = AppConfig.ttsEngine + val ttsEngine = ReadBook.book?.ttsEngine if (ttsEngine.isNullOrBlank()) { return TTSReadAloudService::class.java } diff --git a/app/src/main/java/io/legado/app/service/TTSReadAloudService.kt b/app/src/main/java/io/legado/app/service/TTSReadAloudService.kt index dac6e3ced..2f89f59d5 100644 --- a/app/src/main/java/io/legado/app/service/TTSReadAloudService.kt +++ b/app/src/main/java/io/legado/app/service/TTSReadAloudService.kt @@ -36,7 +36,7 @@ class TTSReadAloudService : BaseReadAloudService(), TextToSpeech.OnInitListener @Synchronized private fun initTts() { ttsInitFinish = false - val engine = GSON.fromJsonObject>(AppConfig.ttsEngine)?.value + val engine = GSON.fromJsonObject>(ReadBook.book?.ttsEngine)?.value textToSpeech = if (engine.isNullOrBlank()) { TextToSpeech(this, this) } else { diff --git a/app/src/main/java/io/legado/app/ui/book/read/config/ReadAloudConfigDialog.kt b/app/src/main/java/io/legado/app/ui/book/read/config/ReadAloudConfigDialog.kt index 2bcd7490a..829eb4979 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/config/ReadAloudConfigDialog.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/config/ReadAloudConfigDialog.kt @@ -14,11 +14,11 @@ import io.legado.app.base.BasePreferenceFragment import io.legado.app.constant.EventBus import io.legado.app.constant.PreferKey import io.legado.app.data.appDb -import io.legado.app.help.AppConfig import io.legado.app.lib.dialogs.SelectItem import io.legado.app.lib.theme.backgroundColor import io.legado.app.lib.theme.primaryColor import io.legado.app.model.ReadAloud +import io.legado.app.model.ReadBook import io.legado.app.service.BaseReadAloudService import io.legado.app.utils.* @@ -60,7 +60,7 @@ class ReadAloudConfigDialog : DialogFragment() { private val speakEngineSummary: String get() { - val ttsEngine = AppConfig.ttsEngine + val ttsEngine = ReadBook.book?.ttsEngine ?: return getString(R.string.system_tts) if (StringUtils.isNumeric(ttsEngine)) { return appDb.httpTTSDao.getName(ttsEngine.toLong()) diff --git a/app/src/main/java/io/legado/app/ui/book/read/config/SpeakEngineDialog.kt b/app/src/main/java/io/legado/app/ui/book/read/config/SpeakEngineDialog.kt index 26d52ba59..d5d01e6e5 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/config/SpeakEngineDialog.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/config/SpeakEngineDialog.kt @@ -17,12 +17,12 @@ import io.legado.app.data.entities.HttpTTS import io.legado.app.databinding.DialogEditTextBinding import io.legado.app.databinding.DialogRecyclerViewBinding import io.legado.app.databinding.ItemHttpTtsBinding -import io.legado.app.help.AppConfig import io.legado.app.help.DirectLinkUpload import io.legado.app.lib.dialogs.SelectItem import io.legado.app.lib.dialogs.alert import io.legado.app.lib.dialogs.selector import io.legado.app.lib.theme.primaryColor +import io.legado.app.model.ReadBook import io.legado.app.ui.document.HandleFileContract import io.legado.app.utils.* import io.legado.app.utils.viewbindingdelegate.viewBinding @@ -37,7 +37,7 @@ class SpeakEngineDialog : BaseDialogFragment(R.layout.dialog_recycler_view), private val viewModel: SpeakEngineViewModel by viewModels() private val ttsUrlKey = "ttsUrlKey" private val adapter by lazy { Adapter(requireContext()) } - private var ttsEngine: String? = AppConfig.ttsEngine + private var ttsEngine: String? = ReadBook.book?.ttsEngine private val importDocResult = registerForActivityResult(HandleFileContract()) { it.uri?.let { uri -> viewModel.importLocal(uri) @@ -87,7 +87,7 @@ class SpeakEngineDialog : BaseDialogFragment(R.layout.dialog_recycler_view), } tvOk.visible() tvOk.setOnClickListener { - AppConfig.ttsEngine = ttsEngine + ReadBook.book?.ttsEngine = ttsEngine dismissAllowingStateLoss() } tvCancel.visible() @@ -136,7 +136,7 @@ class SpeakEngineDialog : BaseDialogFragment(R.layout.dialog_recycler_view), SelectItem(it.label, it.name) } context?.selector(R.string.system_tts, ttsItems) { _, item, _ -> - AppConfig.ttsEngine = GSON.toJson(item) + ReadBook.book?.ttsEngine = GSON.toJson(item) ttsEngine = null adapter.notifyItemRangeChanged(0, adapter.itemCount) dismissAllowingStateLoss()