From 0468da31e107e8965579b993cf02ffd52ea71225 Mon Sep 17 00:00:00 2001 From: 1552980358 <1552980358@qq.com> Date: Fri, 4 Feb 2022 14:42:32 +0800 Subject: [PATCH 01/10] CodeView.kt: Optimize highlight() Editable length identification --- app/src/main/java/io/legado/app/ui/widget/code/CodeView.kt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/io/legado/app/ui/widget/code/CodeView.kt b/app/src/main/java/io/legado/app/ui/widget/code/CodeView.kt index 4f2207d4b..81505c1cd 100644 --- a/app/src/main/java/io/legado/app/ui/widget/code/CodeView.kt +++ b/app/src/main/java/io/legado/app/ui/widget/code/CodeView.kt @@ -169,7 +169,10 @@ class CodeView : AppCompatMultiAutoCompleteTextView { } private fun highlight(editable: Editable): Editable { - if (editable.isEmpty() || editable.length > 1024) return editable + // if (editable.isEmpty() || editable.length > 1024) return editable + if (editable.length !in 1 .. 1024) { + return editable + } try { clearSpans(editable) highlightErrorLines(editable) From 313ca3c2d36e14d4584decf63df4e49f4bc7f529 Mon Sep 17 00:00:00 2001 From: kunfei Date: Fri, 4 Feb 2022 16:44:29 +0800 Subject: [PATCH 02/10] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/legado/app/ui/widget/code/CodeView.kt | 105 ++++++++---------- 1 file changed, 46 insertions(+), 59 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/widget/code/CodeView.kt b/app/src/main/java/io/legado/app/ui/widget/code/CodeView.kt index 81505c1cd..c07a0d56f 100644 --- a/app/src/main/java/io/legado/app/ui/widget/code/CodeView.kt +++ b/app/src/main/java/io/legado/app/ui/widget/code/CodeView.kt @@ -20,7 +20,9 @@ import java.util.regex.Pattern import kotlin.math.roundToInt @Suppress("unused") -class CodeView : AppCompatMultiAutoCompleteTextView { +class CodeView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null) : + AppCompatMultiAutoCompleteTextView(context, attrs) { + private var tabWidth = 0 private var tabWidthInCharacters = 0 private var mUpdateDelayTime = 500 @@ -35,23 +37,53 @@ class CodeView : AppCompatMultiAutoCompleteTextView { private val mSyntaxPatternMap: MutableMap = HashMap() private var mIndentCharacterList = mutableListOf('{', '+', '-', '*', '/', '=') - constructor(context: Context?) : super(context!!) { - initEditorView() + private val mUpdateRunnable = Runnable { + val source = text + highlightWithoutChange(source) } - constructor(context: Context?, attrs: AttributeSet?) : super( - context!!, attrs - ) { - initEditorView() - } + private val mEditorTextWatcher: TextWatcher = object : TextWatcher { + private var start = 0 + private var count = 0 + override fun beforeTextChanged( + charSequence: CharSequence, + start: Int, + before: Int, + count: Int + ) { + this.start = start + this.count = count + } - constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super( - context!!, attrs, defStyleAttr - ) { - initEditorView() + override fun onTextChanged( + charSequence: CharSequence, + start: Int, + before: Int, + count: Int + ) { + if (!modified) return + if (highlightWhileTextChanging) { + if (mSyntaxPatternMap.isNotEmpty()) { + convertTabs(editableText, start, count) + mUpdateHandler.postDelayed(mUpdateRunnable, mUpdateDelayTime.toLong()) + } + } + if (mRemoveErrorsWhenTextChanged) removeAllErrorLines() + } + + override fun afterTextChanged(editable: Editable) { + if (!highlightWhileTextChanging) { + if (!modified) return + cancelHighlighterRender() + if (mSyntaxPatternMap.isNotEmpty()) { + convertTabs(editableText, start, count) + mUpdateHandler.postDelayed(mUpdateRunnable, mUpdateDelayTime.toLong()) + } + } + } } - private fun initEditorView() { + init { if (mAutoCompleteTokenizer == null) { mAutoCompleteTokenizer = KeywordTokenizer() } @@ -170,7 +202,7 @@ class CodeView : AppCompatMultiAutoCompleteTextView { private fun highlight(editable: Editable): Editable { // if (editable.isEmpty() || editable.length > 1024) return editable - if (editable.length !in 1 .. 1024) { + if (editable.length !in 1..1024) { return editable } try { @@ -348,51 +380,6 @@ class CodeView : AppCompatMultiAutoCompleteTextView { super.showDropDown() } - private val mUpdateRunnable = Runnable { - val source = text - highlightWithoutChange(source) - } - private val mEditorTextWatcher: TextWatcher = object : TextWatcher { - private var start = 0 - private var count = 0 - override fun beforeTextChanged( - charSequence: CharSequence, - start: Int, - before: Int, - count: Int - ) { - this.start = start - this.count = count - } - - override fun onTextChanged( - charSequence: CharSequence, - start: Int, - before: Int, - count: Int - ) { - if (!modified) return - if (highlightWhileTextChanging) { - if (mSyntaxPatternMap.isNotEmpty()) { - convertTabs(editableText, start, count) - mUpdateHandler.postDelayed(mUpdateRunnable, mUpdateDelayTime.toLong()) - } - } - if (mRemoveErrorsWhenTextChanged) removeAllErrorLines() - } - - override fun afterTextChanged(editable: Editable) { - if (!highlightWhileTextChanging) { - if (!modified) return - cancelHighlighterRender() - if (mSyntaxPatternMap.isNotEmpty()) { - convertTabs(editableText, start, count) - mUpdateHandler.postDelayed(mUpdateRunnable, mUpdateDelayTime.toLong()) - } - } - } - } - private inner class TabWidthSpan : ReplacementSpan() { override fun getSize( paint: Paint, From f614182b07f2517027dc9e53c79ac770ac89ef5a Mon Sep 17 00:00:00 2001 From: kunfei Date: Sat, 5 Feb 2022 09:33:17 +0800 Subject: [PATCH 03/10] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/legado/app/service/TTSReadAloudService.kt | 8 +++++--- app/src/main/java/io/legado/app/utils/ToastUtils.kt | 8 ++++---- 2 files changed, 9 insertions(+), 7 deletions(-) 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 09f122f18..0bd8b96cc 100644 --- a/app/src/main/java/io/legado/app/service/TTSReadAloudService.kt +++ b/app/src/main/java/io/legado/app/service/TTSReadAloudService.kt @@ -73,16 +73,18 @@ class TTSReadAloudService : BaseReadAloudService(), TextToSpeech.OnInitListener ReadBook.readAloud() } else { super.play() - execute { + kotlin.runCatching { MediaHelp.playSilentSound(this@TTSReadAloudService) - }.onFinally { - textToSpeech?.let { + textToSpeech!!.let { it.speak("", TextToSpeech.QUEUE_FLUSH, null, null) for (i in nowSpeak until contentList.size) { val text = contentList[i].replace(AppPattern.notReadAloudRegex, "") it.speak(text, TextToSpeech.QUEUE_ADD, null, AppConst.APP_TAG + i) } } + }.onFailure { + AppLog.put("tts朗读出错", it) + toastOnUi(it.localizedMessage) } } } diff --git a/app/src/main/java/io/legado/app/utils/ToastUtils.kt b/app/src/main/java/io/legado/app/utils/ToastUtils.kt index a2373f819..c2a91858f 100644 --- a/app/src/main/java/io/legado/app/utils/ToastUtils.kt +++ b/app/src/main/java/io/legado/app/utils/ToastUtils.kt @@ -26,9 +26,9 @@ fun Context.toastOnUi(message: CharSequence?) { runOnUI { kotlin.runCatching { if (toast == null) { - toast = Toast.makeText(this, message, Toast.LENGTH_SHORT) + toast = Toast.makeText(this, message.toString(), Toast.LENGTH_SHORT) } else { - toast?.setText(message) + toast?.setText(message.toString()) toast?.duration = Toast.LENGTH_SHORT } toast?.show() @@ -54,9 +54,9 @@ fun Context.longToastOnUi(message: CharSequence?) { runOnUI { kotlin.runCatching { if (toast == null) { - toast = Toast.makeText(this, message, Toast.LENGTH_LONG) + toast = Toast.makeText(this, message.toString(), Toast.LENGTH_LONG) } else { - toast?.setText(message) + toast?.setText(message.toString()) toast?.duration = Toast.LENGTH_LONG } toast?.show() From ad164692107b9429b5c9f7017f53536e046200d8 Mon Sep 17 00:00:00 2001 From: kunfei Date: Sat, 5 Feb 2022 11:13:20 +0800 Subject: [PATCH 04/10] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/legado/app/service/HttpReadAloudService.kt | 7 +++++-- .../io/legado/app/service/TTSReadAloudService.kt | 12 ++++++------ 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt b/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt index db06ea216..3b2dbd588 100644 --- a/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt +++ b/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt @@ -68,9 +68,10 @@ class HttpReadAloudService : BaseReadAloudService(), ReadBook.readAloud() } else { super.play() - ReadAloud.httpTTS?.let { + kotlin.runCatching { + val tts = ReadAloud.httpTTS ?: throw NoStackTraceException("httpTts is null") val fileName = - md5SpeakFileName(it.url, AppConfig.ttsSpeechRate.toString(), contentList[nowSpeak]) + md5SpeakFileName(tts.url, AppConfig.ttsSpeechRate.toString(), contentList[nowSpeak]) if (nowSpeak == 0) { downloadAudio() } else { @@ -81,6 +82,8 @@ class HttpReadAloudService : BaseReadAloudService(), downloadAudio() } } + }.onFailure { + toastOnUi("朗读出错:${it.localizedMessage}") } } } 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 0bd8b96cc..13b251143 100644 --- a/app/src/main/java/io/legado/app/service/TTSReadAloudService.kt +++ b/app/src/main/java/io/legado/app/service/TTSReadAloudService.kt @@ -11,6 +11,7 @@ import io.legado.app.constant.EventBus import io.legado.app.help.AppConfig import io.legado.app.help.MediaHelp import io.legado.app.lib.dialogs.SelectItem +import io.legado.app.model.NoStackTraceException import io.legado.app.model.ReadBook import io.legado.app.utils.* import java.util.* @@ -75,12 +76,11 @@ class TTSReadAloudService : BaseReadAloudService(), TextToSpeech.OnInitListener super.play() kotlin.runCatching { MediaHelp.playSilentSound(this@TTSReadAloudService) - textToSpeech!!.let { - it.speak("", TextToSpeech.QUEUE_FLUSH, null, null) - for (i in nowSpeak until contentList.size) { - val text = contentList[i].replace(AppPattern.notReadAloudRegex, "") - it.speak(text, TextToSpeech.QUEUE_ADD, null, AppConst.APP_TAG + i) - } + val tts = textToSpeech ?: throw NoStackTraceException("tts is null") + tts.speak("", TextToSpeech.QUEUE_FLUSH, null, null) + for (i in nowSpeak until contentList.size) { + val text = contentList[i].replace(AppPattern.notReadAloudRegex, "") + tts.speak(text, TextToSpeech.QUEUE_ADD, null, AppConst.APP_TAG + i) } }.onFailure { AppLog.put("tts朗读出错", it) From ae38b242abf126e280f70b4768603de5a773c4cd Mon Sep 17 00:00:00 2001 From: kunfei Date: Sat, 5 Feb 2022 16:34:59 +0800 Subject: [PATCH 05/10] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index ef8b49bf5..242612614 100644 --- a/build.gradle +++ b/build.gradle @@ -13,7 +13,7 @@ buildscript { //maven { url 'https://maven.aliyun.com/repository/gradle-plugin' } } dependencies { - classpath 'com.android.tools.build:gradle:7.1.0' + classpath 'com.android.tools.build:gradle:7.1.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath 'de.timfreiheit.resourceplaceholders:placeholders:0.4' classpath 'de.undercouch:gradle-download-task:4.1.2' From 93ec50824c7ec2aa1f5e70603423b8e31db8bea9 Mon Sep 17 00:00:00 2001 From: kunfei Date: Mon, 7 Feb 2022 11:30:08 +0800 Subject: [PATCH 06/10] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=87=AA=E5=AE=9A?= =?UTF-8?q?=E4=B9=89webDav=E6=96=87=E4=BB=B6=E5=A4=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/io/legado/app/constant/PreferKey.kt | 2 +- app/src/main/java/io/legado/app/help/AppConfig.kt | 2 ++ .../java/io/legado/app/help/storage/AppWebDav.kt | 12 ++++++------ .../io/legado/app/ui/config/BackupConfigFragment.kt | 7 +++++++ app/src/main/res/values-es-rES/strings.xml | 3 +-- app/src/main/res/values-ja-rJP/strings.xml | 3 +-- app/src/main/res/values-pt-rBR/strings.xml | 3 +-- app/src/main/res/values-zh-rHK/strings.xml | 3 +-- app/src/main/res/values-zh-rTW/strings.xml | 3 +-- app/src/main/res/values-zh/strings.xml | 3 +-- app/src/main/res/values/strings.xml | 3 +-- app/src/main/res/xml/pref_config_backup.xml | 8 +++----- 12 files changed, 26 insertions(+), 26 deletions(-) diff --git a/app/src/main/java/io/legado/app/constant/PreferKey.kt b/app/src/main/java/io/legado/app/constant/PreferKey.kt index 62ff58866..c0951a129 100644 --- a/app/src/main/java/io/legado/app/constant/PreferKey.kt +++ b/app/src/main/java/io/legado/app/constant/PreferKey.kt @@ -49,7 +49,7 @@ object PreferKey { const val webDavUrl = "web_dav_url" const val webDavAccount = "web_dav_account" const val webDavPassword = "web_dav_password" - const val webDavCreateDir = "webDavCreateDir" + const val webDavDir = "webDavDir" const val exportToWebDav = "webDavCacheBackup" const val exportNoChapterName = "exportNoChapterName" const val exportType = "exportType" diff --git a/app/src/main/java/io/legado/app/help/AppConfig.kt b/app/src/main/java/io/legado/app/help/AppConfig.kt index 0f8fa940e..8375e07d6 100644 --- a/app/src/main/java/io/legado/app/help/AppConfig.kt +++ b/app/src/main/java/io/legado/app/help/AppConfig.kt @@ -271,6 +271,8 @@ object AppConfig : SharedPreferences.OnSharedPreferenceChangeListener { val replaceEnableDefault get() = appCtx.getPrefBoolean(PreferKey.replaceEnableDefault, true) + val webDavDir get() = appCtx.getPrefString(PreferKey.webDavDir, "legado") + val recordLog get() = appCtx.getPrefBoolean(PreferKey.recordLog) val doublePageHorizontal: Boolean diff --git a/app/src/main/java/io/legado/app/help/storage/AppWebDav.kt b/app/src/main/java/io/legado/app/help/storage/AppWebDav.kt index 1fc779247..dc6f66aef 100644 --- a/app/src/main/java/io/legado/app/help/storage/AppWebDav.kt +++ b/app/src/main/java/io/legado/app/help/storage/AppWebDav.kt @@ -29,13 +29,13 @@ object AppWebDav { private val rootWebDavUrl: String get() { - var url = appCtx.getPrefString(PreferKey.webDavUrl)?.trim() - if (url.isNullOrEmpty()) { - url = defaultWebDavUrl - } + val configUrl = appCtx.getPrefString(PreferKey.webDavUrl)?.trim() + var url = if (configUrl.isNullOrEmpty()) defaultWebDavUrl else configUrl if (!url.endsWith("/")) url = "${url}/" - if (appCtx.getPrefBoolean(PreferKey.webDavCreateDir, true)) { - url = "${url}legado/" + AppConfig.webDavDir?.trim()?.let { + if (it.isNotEmpty()) { + url = "${url}${it}/" + } } return url } diff --git a/app/src/main/java/io/legado/app/ui/config/BackupConfigFragment.kt b/app/src/main/java/io/legado/app/ui/config/BackupConfigFragment.kt index 6314e693b..6d5377760 100644 --- a/app/src/main/java/io/legado/app/ui/config/BackupConfigFragment.kt +++ b/app/src/main/java/io/legado/app/ui/config/BackupConfigFragment.kt @@ -121,6 +121,7 @@ class BackupConfigFragment : BasePreferenceFragment(), upPreferenceSummary(PreferKey.webDavUrl, getPrefString(PreferKey.webDavUrl)) upPreferenceSummary(PreferKey.webDavAccount, getPrefString(PreferKey.webDavAccount)) upPreferenceSummary(PreferKey.webDavPassword, getPrefString(PreferKey.webDavPassword)) + upPreferenceSummary(PreferKey.webDavDir, AppConfig.webDavDir) upPreferenceSummary(PreferKey.backupPath, getPrefString(PreferKey.backupPath)) findPreference("web_dav_restore") ?.onLongClick { restoreDir.launch(); true } @@ -168,6 +169,7 @@ class BackupConfigFragment : BasePreferenceFragment(), PreferKey.backupPath -> { upPreferenceSummary(key, getPrefString(key)) } + PreferKey.webDavDir -> upPreferenceSummary(key, AppConfig.webDavDir) } } @@ -192,6 +194,11 @@ class BackupConfigFragment : BasePreferenceFragment(), } else { preference.summary = "*".repeat(value.toString().length) } + PreferKey.webDavDir -> if (value.isNullOrBlank()) { + preference.summary = "null" + } else { + preference.summary = value + } else -> { if (preference is ListPreference) { val index = preference.findIndexOfValue(value) diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index 52599d81a..f43d92ac1 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -9,8 +9,6 @@ Inicio Restaurar Importar datos de Legado - Crear carpeta - Crea una carpeta de respaldo bajo el nombre de Legado. Respaldo de caché de libros sin conexión Exporta localmente lo respalda para su exportación Respaldar para @@ -927,5 +925,6 @@ 小于 校验超时: %1$s秒\n校验项目:%2$s 记录调试日志 + 子文件夹 diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index 7ee8d230b..69147d155 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -9,8 +9,6 @@ Home Restore Import Legado data - Create a subfolder - Create a folder named Legado as the backup folder. Offline cache book backup Export to local and back up to the exports directory under the legado folder Backup to @@ -930,5 +928,6 @@ 小于 校验超时: %1$s秒\n校验项目:%2$s 记录调试日志 + 子文件夹 diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index e4056e388..94949dc6d 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -9,8 +9,6 @@ Início Restaurar Importar dados ao Legado - Criar uma subpasta - Criar uma pasta de Backup com o nome Legado. Backup do cache dos livros para leitura off-line Exportar localmente e fazer Backup à pasta de exportação Backup para @@ -930,5 +928,6 @@ 小于 校验超时: %1$s秒\n校验项目:%2$s 记录调试日志 + 子文件夹 diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index 891ea6dcb..6ac0b6001 100644 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -8,8 +8,6 @@ Home 還原 導入閲讀數據 - 創建子文件夾 - 創建 legado 文件夾作爲備份路徑 離線緩存書籍備份 導出本地同時備份到legado文件夾下exports目錄 備份路徑 @@ -927,5 +925,6 @@ 小于 校验超时: %1$s秒\n校验项目:%2$s 记录调试日志 + 子文件夹 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index c1dd02fc1..a9cfc60f2 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -8,8 +8,6 @@ 備份 復原 匯入閱讀資料 - 建立子資料夾 - 建立legado資料夾作為備份資料夾 離線快取書籍備份 匯出本機同時備份到legado資料夾下exports目錄 備份路徑 @@ -929,5 +927,6 @@ 小于 校验超时: %1$s秒\n校验项目:%2$s 记录调试日志 + 子文件夹 diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index 87e293862..656992fdf 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -8,8 +8,6 @@ Home 恢复 导入阅读数据 - 创建子文件夹 - 创建legado文件夹作为备份文件夹 离线缓存书籍备份 导出本地同时备份到legado文件夹下exports目录 备份路径 @@ -929,5 +927,6 @@ 小于 校验超时: %1$s秒\n校验项目:%2$s 记录调试日志 + 子文件夹 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a8314a49f..a5cbace51 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -9,8 +9,6 @@ Home Restore Import Legado data - Create a subfolder - Create a folder named Legado as the backup folder. Offline cache book backup Export to local and back up to the exports directory under the legado folder Backup to @@ -930,5 +928,6 @@ 小于 校验超时: %1$s秒\n校验项目:%2$s 记录调试日志 + Sub dir diff --git a/app/src/main/res/xml/pref_config_backup.xml b/app/src/main/res/xml/pref_config_backup.xml index 6a57dcc87..06085208d 100644 --- a/app/src/main/res/xml/pref_config_backup.xml +++ b/app/src/main/res/xml/pref_config_backup.xml @@ -27,11 +27,9 @@ android:summary="@string/web_dav_pw_s" app:iconSpaceReserved="false" /> - From 834a95728d3ad1e785cbdab9edf41d801551653c Mon Sep 17 00:00:00 2001 From: kunfei Date: Mon, 7 Feb 2022 12:00:43 +0800 Subject: [PATCH 07/10] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/legado/app/service/TTSReadAloudService.kt | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) 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 13b251143..b2ef936b0 100644 --- a/app/src/main/java/io/legado/app/service/TTSReadAloudService.kt +++ b/app/src/main/java/io/legado/app/service/TTSReadAloudService.kt @@ -77,10 +77,16 @@ class TTSReadAloudService : BaseReadAloudService(), TextToSpeech.OnInitListener kotlin.runCatching { MediaHelp.playSilentSound(this@TTSReadAloudService) val tts = textToSpeech ?: throw NoStackTraceException("tts is null") - tts.speak("", TextToSpeech.QUEUE_FLUSH, null, null) + var result = tts.speak("", TextToSpeech.QUEUE_FLUSH, null, null) + if (result == TextToSpeech.ERROR) { + throw NoStackTraceException("朗读出错:空") + } for (i in nowSpeak until contentList.size) { val text = contentList[i].replace(AppPattern.notReadAloudRegex, "") - tts.speak(text, TextToSpeech.QUEUE_ADD, null, AppConst.APP_TAG + i) + result = tts.speak(text, TextToSpeech.QUEUE_ADD, null, AppConst.APP_TAG + i) + if (result == TextToSpeech.ERROR) { + AppLog.put("tts朗读出错:$text") + } } }.onFailure { AppLog.put("tts朗读出错", it) From 6af96d2771776b89b445c6902b8838dd06678286 Mon Sep 17 00:00:00 2001 From: kunfei Date: Mon, 7 Feb 2022 16:53:51 +0800 Subject: [PATCH 08/10] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/io/legado/app/service/TTSReadAloudService.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 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 b2ef936b0..dac6e3ced 100644 --- a/app/src/main/java/io/legado/app/service/TTSReadAloudService.kt +++ b/app/src/main/java/io/legado/app/service/TTSReadAloudService.kt @@ -79,7 +79,9 @@ class TTSReadAloudService : BaseReadAloudService(), TextToSpeech.OnInitListener val tts = textToSpeech ?: throw NoStackTraceException("tts is null") var result = tts.speak("", TextToSpeech.QUEUE_FLUSH, null, null) if (result == TextToSpeech.ERROR) { - throw NoStackTraceException("朗读出错:空") + clearTTS() + initTts() + return } for (i in nowSpeak until contentList.size) { val text = contentList[i].replace(AppPattern.notReadAloudRegex, "") From 7095198d63883c99894407e9cdb1f62b6f984726 Mon Sep 17 00:00:00 2001 From: kunfei Date: Mon, 7 Feb 2022 18:56:17 +0800 Subject: [PATCH 09/10] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/io/legado/app/data/entities/BookChapter.kt | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/io/legado/app/data/entities/BookChapter.kt b/app/src/main/java/io/legado/app/data/entities/BookChapter.kt index 2f46bc002..ac5718872 100644 --- a/app/src/main/java/io/legado/app/data/entities/BookChapter.kt +++ b/app/src/main/java/io/legado/app/data/entities/BookChapter.kt @@ -80,7 +80,6 @@ data class BookChapter( chineseConvert: Boolean = true, ): String { var displayTitle = title.replace(AppPattern.rnRegex, "") - val mDisplayTitle = displayTitle if (chineseConvert) { when (AppConfig.chineseConverterType) { 1 -> displayTitle = ChineseUtils.t2s(displayTitle) @@ -91,18 +90,20 @@ data class BookChapter( replaceRules.forEach { item -> if (item.pattern.isNotEmpty()) { try { - displayTitle = if (item.isRegex) { + val mDisplayTitle = if (item.isRegex) { displayTitle.replace(item.pattern.toRegex(), item.replacement) } else { displayTitle.replace(item.pattern, item.replacement) } + if (mDisplayTitle.isNotBlank()) { + displayTitle = mDisplayTitle + } } catch (e: Exception) { appCtx.toastOnUi("${item.name}替换出错") } } } } - if (displayTitle.isBlank()) displayTitle = mDisplayTitle return when { !isVip -> displayTitle isPay -> appCtx.getString(R.string.payed_title, displayTitle) From 10e117f679f0480ed812df6649e38b6123a650c7 Mon Sep 17 00:00:00 2001 From: kunfei Date: Mon, 7 Feb 2022 19:14:58 +0800 Subject: [PATCH 10/10] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/assets/updateLog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/assets/updateLog.md b/app/src/main/assets/updateLog.md index 61be7e0ee..0ad1e59bc 100644 --- a/app/src/main/assets/updateLog.md +++ b/app/src/main/assets/updateLog.md @@ -16,6 +16,7 @@ * 校验失效分组具体到搜索发现目录正文 * txt文件初次解析目录不选择禁用的正则 * txt单章字数超102400均分txt +* 修复tts被回收后无法继续朗读的bug,重新初始化tts **2022/02/03**