Update HttpReadAloudService.kt

This commit is contained in:
Ktouls authored and Kudomaga committed 2026-01-17 06:39:29 +08:00
1 parent a0cc30f914
commit beb95b6203
1 file changed
+22 -7
@@ -29,7 +29,6 @@ import io.legado.app.R
import io.legado.app.constant.AppLog import io.legado.app.constant.AppLog
import io.legado.app.constant.AppPattern import io.legado.app.constant.AppPattern
import io.legado.app.data.appDb import io.legado.app.data.appDb
// 核心引用,缺了它构建会挂
import io.legado.app.data.entities.Book import io.legado.app.data.entities.Book
import io.legado.app.data.entities.BookChapter import io.legado.app.data.entities.BookChapter
import io.legado.app.data.entities.HttpTTS import io.legado.app.data.entities.HttpTTS
@@ -70,7 +69,7 @@ import kotlin.coroutines.coroutineContext
/** /**
* 在线朗读 * 在线朗读
* (完美匹配版:修复文件名MD5不一致导致的重复下载 + 修复缓存不可见) * (完美匹配版:修复文件名MD5不一致 + 修复缓存不可见 + 修复0分钟不彻底清理)
*/ */
@SuppressLint("UnsafeOptInUsageError") @SuppressLint("UnsafeOptInUsageError")
class HttpReadAloudService : BaseReadAloudService(), class HttpReadAloudService : BaseReadAloudService(),
@@ -493,15 +492,31 @@ class HttpReadAloudService : BaseReadAloudService(),
/** /**
* 移除缓存文件 * 移除缓存文件
* 修复逻辑:如果时间设置为0,则不再保护当前章节,退出即全删。
*/ */
private fun removeCacheFile() { private fun removeCacheFile() {
val titleMd5 = MD5Utils.md5Encode16(this.textChapter?.chapter?.title ?: "") val keepTime = AppConfig.audioCacheCleanTime
// 只有当时间大于0时,才需要保护当前章节。如果为0,说明用户想彻底不留缓存。
val protectCurrentChapter = keepTime > 0
val titleMd5 = if (protectCurrentChapter) MD5Utils.md5Encode16(this.textChapter?.chapter?.title ?: "") else ""
FileUtils.listDirsAndFiles(ttsFolderPath)?.forEach { FileUtils.listDirsAndFiles(ttsFolderPath)?.forEach {
val isSilentSound = it.length() == 2160L val isSilentSound = it.length() == 2160L
if ((!it.name.startsWith(titleMd5)
&& System.currentTimeMillis() - it.lastModified() > AppConfig.audioCacheCleanTime) // 判断逻辑:
|| isSilentSound // 1. 如果是无声文件 -> 删
) { // 2. 如果保留时间设为0 -> 删 (不管是不是当前章节)
// 3. 如果保留时间>0 -> 保护当前章节,且只删过期的
val shouldDelete = if (keepTime == 0L) {
// 模式:即听即焚 (保留时间0)
true
} else {
// 模式:保留一段时间
// 条件:(不是当前章节) 且 (时间过期了)
!it.name.startsWith(titleMd5) && (System.currentTimeMillis() - it.lastModified() > keepTime)
}
if (shouldDelete || isSilentSound) {
FileUtils.delete(it.absolutePath) FileUtils.delete(it.absolutePath)
} }
} }