tts朗读引擎跟随单本书籍

pull/1601/head
Xwite 3 years ago
parent f5a4725ba4
commit 717c451a3e
  1. 1
      app/src/main/assets/updateLog.md
  2. 9
      app/src/main/java/io/legado/app/data/entities/Book.kt
  3. 3
      app/src/main/java/io/legado/app/model/ReadAloud.kt
  4. 2
      app/src/main/java/io/legado/app/service/TTSReadAloudService.kt
  5. 4
      app/src/main/java/io/legado/app/ui/book/read/config/ReadAloudConfigDialog.kt
  6. 8
      app/src/main/java/io/legado/app/ui/book/read/config/SpeakEngineDialog.kt

@ -18,6 +18,7 @@
* txt单章字数超102400均分txt,添加开关 by Xwite
* 修复tts被回收后无法继续朗读的bug,重新初始化tts
* webDav备份支持自定义文件夹
* tts朗读引擎按书籍配置,未设置的和上一次设置的引擎相同
**2022/02/03**

@ -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,

@ -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
}

@ -36,7 +36,7 @@ class TTSReadAloudService : BaseReadAloudService(), TextToSpeech.OnInitListener
@Synchronized
private fun initTts() {
ttsInitFinish = false
val engine = GSON.fromJsonObject<SelectItem<String>>(AppConfig.ttsEngine)?.value
val engine = GSON.fromJsonObject<SelectItem<String>>(ReadBook.book?.ttsEngine)?.value
textToSpeech = if (engine.isNullOrBlank()) {
TextToSpeech(this, this)
} else {

@ -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())

@ -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()

Loading…
Cancel
Save