From 5654a2e56d7fe97c7dccb1d56648ca9ce4cabcc3 Mon Sep 17 00:00:00 2001 From: Horis <8674809+821938089@users.noreply.github.com> Date: Tue, 1 Apr 2025 17:31:23 +0800 Subject: [PATCH] =?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/help/exoplayer/InputStreamDataSource.kt | 7 +------ .../io/legado/app/service/HttpReadAloudService.kt | 11 ++++++++++- .../ui/book/changesource/ChangeBookSourceDialog.kt | 1 - .../ui/book/changesource/ChangeBookSourceViewModel.kt | 8 ++++++-- .../main/java/io/legado/app/utils/FlowExtensions.kt | 2 +- app/src/main/java/io/legado/app/utils/UrlUtil.kt | 4 +++- 6 files changed, 21 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/io/legado/app/help/exoplayer/InputStreamDataSource.kt b/app/src/main/java/io/legado/app/help/exoplayer/InputStreamDataSource.kt index e77fd10c8..cc44828b0 100644 --- a/app/src/main/java/io/legado/app/help/exoplayer/InputStreamDataSource.kt +++ b/app/src/main/java/io/legado/app/help/exoplayer/InputStreamDataSource.kt @@ -27,12 +27,7 @@ class InputStreamDataSource(private val supplier: () -> InputStream) : BaseDataS inputStream.skip(dataSpec.position) - if (dataSpec.length == C.LENGTH_UNSET.toLong()) { - bytesRemaining = inputStream.available().toLong() - if (bytesRemaining == 0L) bytesRemaining = C.LENGTH_UNSET.toLong() - } else { - bytesRemaining = dataSpec.length - } + bytesRemaining = dataSpec.length opened = true transferStarted(dataSpec) 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 fe0800cbd..79a9aee7e 100644 --- a/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt +++ b/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt @@ -550,6 +550,7 @@ class HttpReadAloudService : BaseReadAloudService(), override fun onPlayerError(error: PlaybackException) { super.onPlayerError(error) AppLog.put("朗读错误\n${contentList[nowSpeak]}", error) + deleteCurrentSpeakFile() playErrorNo++ if (playErrorNo >= 5) { toastOnUi("朗读连续5次错误, 最后一次错误代码(${error.localizedMessage})") @@ -558,7 +559,6 @@ class HttpReadAloudService : BaseReadAloudService(), } else { if (exoPlayer.hasNextMediaItem()) { exoPlayer.seekToNextMediaItem() - exoPlayer.playWhenReady = true exoPlayer.prepare() } else { exoPlayer.clearMediaItems() @@ -567,6 +567,15 @@ class HttpReadAloudService : BaseReadAloudService(), } } + private fun deleteCurrentSpeakFile() { + if (AppConfig.streamReadAloudAudio) { + return + } + val mediaItem = exoPlayer.currentMediaItem ?: return + val filePath = mediaItem.localConfiguration!!.uri.path!! + File(filePath).delete() + } + override fun aloudServicePendingIntent(actionStr: String): PendingIntent? { return servicePendingIntent(actionStr) } diff --git a/app/src/main/java/io/legado/app/ui/book/changesource/ChangeBookSourceDialog.kt b/app/src/main/java/io/legado/app/ui/book/changesource/ChangeBookSourceDialog.kt index 18b773080..11ceaa66e 100644 --- a/app/src/main/java/io/legado/app/ui/book/changesource/ChangeBookSourceDialog.kt +++ b/app/src/main/java/io/legado/app/ui/book/changesource/ChangeBookSourceDialog.kt @@ -253,7 +253,6 @@ class ChangeBookSourceDialog() : BaseDialogFragment(R.layout.dialog_book_change_ delay(500) } } - } lifecycleScope.launch { diff --git a/app/src/main/java/io/legado/app/ui/book/changesource/ChangeBookSourceViewModel.kt b/app/src/main/java/io/legado/app/ui/book/changesource/ChangeBookSourceViewModel.kt index 85eb5dd27..d3f778f6d 100644 --- a/app/src/main/java/io/legado/app/ui/book/changesource/ChangeBookSourceViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/changesource/ChangeBookSourceViewModel.kt @@ -25,6 +25,7 @@ import io.legado.app.help.config.SourceConfig import io.legado.app.help.coroutine.Coroutine import io.legado.app.model.webBook.WebBook import io.legado.app.utils.internString +import io.legado.app.utils.mapParallel import io.legado.app.utils.mapParallelSafe import io.legado.app.utils.onEachIndexed import io.legado.app.utils.toastOnUi @@ -35,6 +36,7 @@ import kotlinx.coroutines.Job import kotlinx.coroutines.asCoroutineDispatcher import kotlinx.coroutines.channels.awaitClose import kotlinx.coroutines.coroutineScope +import kotlinx.coroutines.currentCoroutineContext import kotlinx.coroutines.ensureActive import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asStateFlow @@ -231,11 +233,13 @@ open class ChangeBookSourceViewModel(application: Application) : BaseViewModel(a } }.onStart { searchStateData.postValue(true) - }.mapParallelSafe(threadCount) { - runCatching { + }.mapParallel(threadCount) { + try { withTimeout(60000L) { search(it) } + } catch (_: Throwable) { + currentCoroutineContext().ensureActive() } it }.onEachIndexed { index, value -> diff --git a/app/src/main/java/io/legado/app/utils/FlowExtensions.kt b/app/src/main/java/io/legado/app/utils/FlowExtensions.kt index d2ce0d674..2195f570f 100644 --- a/app/src/main/java/io/legado/app/utils/FlowExtensions.kt +++ b/app/src/main/java/io/legado/app/utils/FlowExtensions.kt @@ -64,7 +64,7 @@ inline fun Flow.mapParallelSafe( flow { try { emit(transform(value)) - } catch (e: Throwable) { + } catch (_: Throwable) { coroutineContext.ensureActive() } } diff --git a/app/src/main/java/io/legado/app/utils/UrlUtil.kt b/app/src/main/java/io/legado/app/utils/UrlUtil.kt index 8cad7a6e6..eb5425cb2 100644 --- a/app/src/main/java/io/legado/app/utils/UrlUtil.kt +++ b/app/src/main/java/io/legado/app/utils/UrlUtil.kt @@ -159,7 +159,9 @@ object UrlUtil { .substringAfterLast(".", "") //检查截取的后缀字符是否合法 [a-zA-Z0-9] return if (suffix.length > 5 || !suffix.matches(fileSuffixRegex)) { - AppLog.put("Cannot find legal suffix:\n target: $str\n suffix: $suffix") + if (default == null) { + AppLog.put("Cannot find legal suffix:\n target: $str\n suffix: $suffix") + } default ?: "ext" } else { suffix