Merge pull request #831 from litcc/dev2

fix: 修复bug
pull/832/head
kunfei 4 years ago committed by GitHub
commit d61c438cc7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 30
      app/src/main/java/io/legado/app/service/HttpReadAloudService.kt

@ -17,9 +17,12 @@ import io.legado.app.utils.postEvent
import kotlinx.coroutines.ensureActive
import kotlinx.coroutines.isActive
import org.jetbrains.anko.collections.forEachWithIndex
import org.jetbrains.anko.runOnUiThread
import org.jetbrains.anko.toast
import java.io.File
import java.io.FileDescriptor
import java.io.FileInputStream
import java.io.IOException
import java.net.ConnectException
import java.net.SocketTimeoutException
import java.util.*
@ -105,22 +108,38 @@ class HttpReadAloudService : BaseReadAloudService(),
speakSpeed = AppConfig.ttsSpeechRate
).getByteArray().let { bytes ->
ensureActive()
val file = getSpeakFileAsMd5(fileName)
val file = getSpeakFileAsMd5IfNotExist(fileName)
//val file = getSpeakFile(index)
file.writeBytes(bytes)
removeSpeakCacheFile(fileName)
val fis = FileInputStream(file)
// 用来检测下载的文件是否为可正常播放的音频 (如果不是的话抛出异常,没找到更秒的办法,先这么着吧)
MediaPlayer().apply {
setDataSource(fis.fd)
prepare()
release()
}
if (index == nowSpeak) {
@Suppress("BlockingMethodInNonBlockingContext")
val fis = FileInputStream(file)
playAudio(fis.fd)
}
}
} catch (e: SocketTimeoutException) {
removeSpeakCacheFile(fileName)
// delay(2000)
// downloadAudio()
runOnUiThread { toast("tts接口超时,尝试重新获取") }
downloadAudio()
} catch (e: ConnectException) {
removeSpeakCacheFile(fileName)
runOnUiThread { toast("网络错误") }
} catch (e: IOException) {
val file = getSpeakFileAsMd5(fileName)
if (file.exists()) {
FileUtils.deleteFile(file.absolutePath)
}
runOnUiThread { toast("tts文件解析错误") }
} catch (e: Exception) {
removeSpeakCacheFile(fileName)
}
@ -165,6 +184,9 @@ class HttpReadAloudService : BaseReadAloudService(),
}
private fun getSpeakFileAsMd5(name: String): File =
FileUtils.getFile(File(speakFilePath()), "$name.mp3")
private fun getSpeakFileAsMd5IfNotExist(name: String): File =
FileUtils.createFileIfNotExist("${speakFilePath()}$name.mp3")
private fun removeCacheFile() {

Loading…
Cancel
Save