mirror of
https://github.com/gedoor/legado.git
synced 2025-08-10 00:52:30 +00:00
优化
This commit is contained in:
@@ -19,8 +19,6 @@ import io.legado.app.model.ReadBook
|
||||
import io.legado.app.model.analyzeRule.AnalyzeUrl
|
||||
import io.legado.app.utils.*
|
||||
import kotlinx.coroutines.*
|
||||
import kotlinx.coroutines.sync.Mutex
|
||||
import kotlinx.coroutines.sync.withLock
|
||||
import okhttp3.Response
|
||||
import org.mozilla.javascript.WrappedException
|
||||
import java.io.File
|
||||
@@ -43,9 +41,10 @@ class HttpReadAloudService : BaseReadAloudService(),
|
||||
}
|
||||
private var speechRate: Int = AppConfig.speechRatePlay
|
||||
private val cacheFiles = hashSetOf<String>()
|
||||
private var task: Coroutine<*>? = null
|
||||
private var downloadTask: Coroutine<*>? = null
|
||||
private var playIndexJob: Job? = null
|
||||
private val mutex = Mutex()
|
||||
private var downloadErrorNo: Int = 0
|
||||
private var playErrorNo = 0
|
||||
|
||||
override fun onCreate() {
|
||||
super.onCreate()
|
||||
@@ -54,7 +53,7 @@ class HttpReadAloudService : BaseReadAloudService(),
|
||||
|
||||
override fun onDestroy() {
|
||||
super.onDestroy()
|
||||
task?.cancel()
|
||||
downloadTask?.cancel()
|
||||
exoPlayer.release()
|
||||
}
|
||||
|
||||
@@ -73,7 +72,7 @@ class HttpReadAloudService : BaseReadAloudService(),
|
||||
AppConfig.ttsSpeechRate.toString(),
|
||||
contentList[nowSpeak]
|
||||
)
|
||||
if (nowSpeak == 0) {
|
||||
if (nowSpeak == 0 && downloadTask?.isActive != true) {
|
||||
downloadAudio()
|
||||
} else {
|
||||
val file = getSpeakFileAsMd5(fileName)
|
||||
@@ -103,11 +102,9 @@ class HttpReadAloudService : BaseReadAloudService(),
|
||||
}
|
||||
}
|
||||
|
||||
private var downloadErrorNo: Int = 0
|
||||
|
||||
private fun downloadAudio() {
|
||||
task?.cancel()
|
||||
task = execute {
|
||||
downloadTask?.cancel()
|
||||
downloadTask = execute {
|
||||
clearSpeakCache()
|
||||
removeCacheFile()
|
||||
val httpTts = ReadAloud.httpTTS ?: return@execute
|
||||
@@ -136,9 +133,7 @@ class HttpReadAloudService : BaseReadAloudService(),
|
||||
source = httpTts,
|
||||
headerMapF = httpTts.getHeaderMap(true)
|
||||
)
|
||||
var response = mutex.withLock {
|
||||
analyzeUrl.getResponseAwait()
|
||||
}
|
||||
var response = analyzeUrl.getResponseAwait()
|
||||
ensureActive()
|
||||
httpTts.loginCheckJs?.takeIf { checkJs ->
|
||||
checkJs.isNotBlank()
|
||||
@@ -156,7 +151,6 @@ class HttpReadAloudService : BaseReadAloudService(),
|
||||
}
|
||||
ensureActive()
|
||||
response.body!!.bytes().let { bytes ->
|
||||
ensureActive()
|
||||
val file = createSpeakFileAsMd5IfNotExist(fileName)
|
||||
file.writeBytes(bytes)
|
||||
removeSpeakCache(fileName)
|
||||
@@ -316,7 +310,7 @@ class HttpReadAloudService : BaseReadAloudService(),
|
||||
* 更新朗读速度
|
||||
*/
|
||||
override fun upSpeechRate(reset: Boolean) {
|
||||
task?.cancel()
|
||||
downloadTask?.cancel()
|
||||
exoPlayer.stop()
|
||||
speechRate = AppConfig.speechRatePlay
|
||||
downloadAudio()
|
||||
@@ -345,8 +339,6 @@ class HttpReadAloudService : BaseReadAloudService(),
|
||||
}
|
||||
}
|
||||
|
||||
private var playErrorNo = 0
|
||||
|
||||
override fun onPlayerError(error: PlaybackException) {
|
||||
super.onPlayerError(error)
|
||||
AppLog.put("朗读错误\n${contentList[nowSpeak]}", error)
|
||||
|
||||
Reference in New Issue
Block a user