mirror of
https://github.com/gedoor/legado.git
synced 2024-09-01 09:34:25 +08:00
优化tts登录
This commit is contained in:
parent
665a053101
commit
50385a8ce3
@ -15,6 +15,24 @@
|
||||
|
||||
* 阿里云语音自动登录
|
||||
* 修复一些bug
|
||||
* 优化阿里云登录,需重新登录
|
||||
|
||||
```
|
||||
source登录相关方法,可在js内通过source.调用,可以参考阿里云语音登录
|
||||
login()
|
||||
getHeaderMap(hasLoginHeader: Boolean = false)
|
||||
getLoginHeader(): String?
|
||||
getLoginHeaderMap(): Map<String, String>?
|
||||
putLoginHeader(header: String)
|
||||
removeLoginHeader()
|
||||
setVariable(variable: String?)
|
||||
getVariable(): String?
|
||||
AnalyzeUrl相关函数,js中通过java.调用
|
||||
initUrl() //重新解析url,可以用于登录检测js登录后重新解析url重新访问
|
||||
getHeaderMap().putAll(source.getHeaderMap(true)) //重新设置登录头
|
||||
getStrResponse( jsStr: String? = null, sourceRegex: String? = null) //返回访问结果,文本类型,书源内部重新登录后可调用此方法重新返回结果
|
||||
getResponse(): Response //返回访问结果,网络朗读引擎采用的是这个,调用登录后在调用这方法可以重新访问,参考阿里云登录检测
|
||||
```
|
||||
|
||||
**2021/10/07**
|
||||
|
||||
|
@ -116,7 +116,7 @@ object BookHelp {
|
||||
downloadImages.add(src)
|
||||
val analyzeUrl = AnalyzeUrl(src, source = bookSource)
|
||||
try {
|
||||
analyzeUrl.getByteArray().let {
|
||||
analyzeUrl.getByteArrayAwait().let {
|
||||
FileUtils.createFileIfNotExist(
|
||||
downloadDir,
|
||||
cacheFolderName,
|
||||
|
@ -46,7 +46,7 @@ interface JsExtensions {
|
||||
return runBlocking {
|
||||
kotlin.runCatching {
|
||||
val analyzeUrl = AnalyzeUrl(urlStr, source = getSource())
|
||||
analyzeUrl.getStrResponse().body
|
||||
analyzeUrl.getStrResponseAwait().body
|
||||
}.onFailure {
|
||||
log("ajax(${urlStr}) error\n${it.stackTraceToString()}")
|
||||
it.printOnDebug()
|
||||
@ -65,7 +65,7 @@ interface JsExtensions {
|
||||
async(IO) {
|
||||
val url = urlList[it]
|
||||
val analyzeUrl = AnalyzeUrl(url, source = getSource())
|
||||
analyzeUrl.getStrResponse()
|
||||
analyzeUrl.getStrResponseAwait()
|
||||
}
|
||||
}
|
||||
val resArray = Array<StrResponse?>(urlList.size) {
|
||||
@ -82,7 +82,7 @@ interface JsExtensions {
|
||||
return runBlocking {
|
||||
val analyzeUrl = AnalyzeUrl(urlStr, source = getSource())
|
||||
kotlin.runCatching {
|
||||
analyzeUrl.getStrResponse()
|
||||
analyzeUrl.getStrResponseAwait()
|
||||
}.onFailure {
|
||||
log("connect(${urlStr}) error\n${it.stackTraceToString()}")
|
||||
it.printOnDebug()
|
||||
@ -97,7 +97,7 @@ interface JsExtensions {
|
||||
val headerMap = GSON.fromJsonObject<Map<String, String>>(header)
|
||||
val analyzeUrl = AnalyzeUrl(urlStr, headerMapF = headerMap, source = getSource())
|
||||
kotlin.runCatching {
|
||||
analyzeUrl.getStrResponse()
|
||||
analyzeUrl.getStrResponseAwait()
|
||||
}.onFailure {
|
||||
log("ajax($urlStr,$header) error\n${it.stackTraceToString()}")
|
||||
it.printOnDebug()
|
||||
|
@ -655,7 +655,7 @@ class AnalyzeRule(
|
||||
return runBlocking {
|
||||
kotlin.runCatching {
|
||||
val analyzeUrl = AnalyzeUrl(urlStr, source = source, ruleData = book)
|
||||
analyzeUrl.getStrResponse().body
|
||||
analyzeUrl.getStrResponseAwait().body
|
||||
}.onFailure {
|
||||
log("ajax(${urlStr}) error\n${it.stackTraceToString()}")
|
||||
it.printOnDebug()
|
||||
|
@ -16,6 +16,7 @@ import io.legado.app.help.JsExtensions
|
||||
import io.legado.app.help.http.*
|
||||
import io.legado.app.model.ConcurrentException
|
||||
import io.legado.app.utils.*
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import okhttp3.Response
|
||||
import java.net.URLEncoder
|
||||
import java.util.*
|
||||
@ -328,13 +329,13 @@ class AnalyzeUrl(
|
||||
/**
|
||||
* 访问网站,返回StrResponse
|
||||
*/
|
||||
suspend fun getStrResponse(
|
||||
suspend fun getStrResponseAwait(
|
||||
jsStr: String? = null,
|
||||
sourceRegex: String? = null,
|
||||
useWebView: Boolean = true,
|
||||
): StrResponse {
|
||||
if (type != null) {
|
||||
return StrResponse(url, StringUtils.byteToHexString(getByteArray()))
|
||||
return StrResponse(url, StringUtils.byteToHexString(getByteArrayAwait()))
|
||||
}
|
||||
judgmentConcurrent()
|
||||
setCookie(source?.getKey())
|
||||
@ -384,10 +385,21 @@ class AnalyzeUrl(
|
||||
}
|
||||
}
|
||||
|
||||
@JvmOverloads
|
||||
fun getStrResponse(
|
||||
jsStr: String? = null,
|
||||
sourceRegex: String? = null,
|
||||
useWebView: Boolean = true,
|
||||
): StrResponse {
|
||||
return runBlocking {
|
||||
getStrResponseAwait(jsStr, sourceRegex, useWebView)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 访问网站,返回Response
|
||||
*/
|
||||
suspend fun getResponse(): Response {
|
||||
suspend fun getResponseAwait(): Response {
|
||||
judgmentConcurrent()
|
||||
setCookie(source?.getKey())
|
||||
@Suppress("BlockingMethodInNonBlockingContext")
|
||||
@ -407,10 +419,16 @@ class AnalyzeUrl(
|
||||
}
|
||||
}
|
||||
|
||||
fun getResponse(): Response {
|
||||
return runBlocking {
|
||||
getResponseAwait()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 访问网站,返回ByteArray
|
||||
*/
|
||||
suspend fun getByteArray(): ByteArray {
|
||||
suspend fun getByteArrayAwait(): ByteArray {
|
||||
judgmentConcurrent()
|
||||
setCookie(source?.getKey())
|
||||
@Suppress("BlockingMethodInNonBlockingContext")
|
||||
@ -430,6 +448,12 @@ class AnalyzeUrl(
|
||||
}.bytes()
|
||||
}
|
||||
|
||||
fun getByteArray(): ByteArray {
|
||||
return runBlocking {
|
||||
getByteArrayAwait()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 上传文件
|
||||
*/
|
||||
|
@ -42,7 +42,7 @@ object Rss {
|
||||
ruleData = ruleData,
|
||||
headerMapF = rssSource.getHeaderMap()
|
||||
)
|
||||
val body = analyzeUrl.getStrResponse().body
|
||||
val body = analyzeUrl.getStrResponseAwait().body
|
||||
return RssParserByRule.parseXML(sortName, sortUrl, body, rssSource, ruleData)
|
||||
}
|
||||
|
||||
@ -70,7 +70,7 @@ object Rss {
|
||||
ruleData = rssArticle,
|
||||
headerMapF = rssSource.getHeaderMap()
|
||||
)
|
||||
val body = analyzeUrl.getStrResponse().body
|
||||
val body = analyzeUrl.getStrResponseAwait().body
|
||||
Debug.log(rssSource.sourceUrl, "≡获取成功:${rssSource.sourceUrl}")
|
||||
Debug.log(rssSource.sourceUrl, body, state = 20)
|
||||
val analyzeRule = AnalyzeRule(rssArticle, rssSource)
|
||||
|
@ -67,7 +67,7 @@ object BookChapterList {
|
||||
source = bookSource,
|
||||
ruleData = book,
|
||||
headerMapF = bookSource.getHeaderMap()
|
||||
).getStrResponse().body?.let { nextBody ->
|
||||
).getStrResponseAwait().body?.let { nextBody ->
|
||||
chapterData = analyzeChapterList(
|
||||
scope, book, nextUrl, nextUrl,
|
||||
nextBody, tocRule, listRule, bookSource
|
||||
@ -90,7 +90,7 @@ object BookChapterList {
|
||||
ruleData = book,
|
||||
headerMapF = bookSource.getHeaderMap()
|
||||
)
|
||||
val res = analyzeUrl.getStrResponse()
|
||||
val res = analyzeUrl.getStrResponseAwait()
|
||||
analyzeChapterList(
|
||||
this, book, urlStr, res.url,
|
||||
res.body!!, tocRule, listRule, bookSource, false
|
||||
|
@ -72,7 +72,7 @@ object BookContent {
|
||||
source = bookSource,
|
||||
ruleData = book,
|
||||
headerMapF = bookSource.getHeaderMap()
|
||||
).getStrResponse()
|
||||
).getStrResponseAwait()
|
||||
res.body?.let { nextBody ->
|
||||
contentData = analyzeContent(
|
||||
book, nextUrl, res.url, nextBody, contentRule,
|
||||
@ -96,7 +96,7 @@ object BookContent {
|
||||
ruleData = book,
|
||||
headerMapF = bookSource.getHeaderMap()
|
||||
)
|
||||
val res = analyzeUrl.getStrResponse()
|
||||
val res = analyzeUrl.getStrResponseAwait()
|
||||
analyzeContent(
|
||||
book, urlStr, res.url, res.body!!, contentRule,
|
||||
bookChapter, bookSource, mNextChapterUrl, false
|
||||
|
@ -74,7 +74,7 @@ object WebBook {
|
||||
source = bookSource,
|
||||
ruleData = variableBook,
|
||||
)
|
||||
var res = analyzeUrl.getStrResponse()
|
||||
var res = analyzeUrl.getStrResponseAwait()
|
||||
//检测书源是否已登录
|
||||
bookSource.loginCheckJs?.let { checkJs ->
|
||||
if (checkJs.isNotBlank()) {
|
||||
@ -124,7 +124,7 @@ object WebBook {
|
||||
ruleData = variableBook,
|
||||
headerMapF = bookSource.getHeaderMap(true)
|
||||
)
|
||||
var res = analyzeUrl.getStrResponse()
|
||||
var res = analyzeUrl.getStrResponseAwait()
|
||||
//检测书源是否已登录
|
||||
bookSource.loginCheckJs?.let { checkJs ->
|
||||
if (checkJs.isNotBlank()) {
|
||||
@ -182,7 +182,7 @@ object WebBook {
|
||||
ruleData = book,
|
||||
headerMapF = bookSource.getHeaderMap(true)
|
||||
)
|
||||
var res = analyzeUrl.getStrResponse()
|
||||
var res = analyzeUrl.getStrResponseAwait()
|
||||
//检测书源是否已登录
|
||||
bookSource.loginCheckJs?.let { checkJs ->
|
||||
if (checkJs.isNotBlank()) {
|
||||
@ -239,7 +239,7 @@ object WebBook {
|
||||
ruleData = book,
|
||||
headerMapF = bookSource.getHeaderMap(true)
|
||||
)
|
||||
var res = analyzeUrl.getStrResponse()
|
||||
var res = analyzeUrl.getStrResponseAwait()
|
||||
//检测书源是否已登录
|
||||
bookSource.loginCheckJs?.let { checkJs ->
|
||||
if (checkJs.isNotBlank()) {
|
||||
@ -304,7 +304,7 @@ object WebBook {
|
||||
chapter = bookChapter,
|
||||
headerMapF = bookSource.getHeaderMap(true)
|
||||
)
|
||||
var res = analyzeUrl.getStrResponse(
|
||||
var res = analyzeUrl.getStrResponseAwait(
|
||||
jsStr = bookSource.getContentRule().webJs,
|
||||
sourceRegex = bookSource.getContentRule().sourceRegex
|
||||
)
|
||||
|
@ -111,7 +111,7 @@ class HttpReadAloudService : BaseReadAloudService(),
|
||||
source = httpTts,
|
||||
headerMapF = httpTts.getHeaderMap(true)
|
||||
)
|
||||
var response = analyzeUrl.getResponse()
|
||||
var response = analyzeUrl.getResponseAwait()
|
||||
httpTts.loginCheckJs?.let { checkJs ->
|
||||
if (checkJs.isNotBlank()) {
|
||||
response = analyzeUrl.evalJS(checkJs, response) as Response
|
||||
|
@ -34,7 +34,7 @@ class WebViewModel(application: Application) : BaseViewModel(application) {
|
||||
baseUrl = analyzeUrl.url
|
||||
headerMap.putAll(analyzeUrl.headerMap)
|
||||
if (analyzeUrl.isPost()) {
|
||||
html = analyzeUrl.getStrResponse(useWebView = false).body
|
||||
html = analyzeUrl.getStrResponseAwait(useWebView = false).body
|
||||
}
|
||||
}.onSuccess {
|
||||
success.invoke()
|
||||
|
Loading…
Reference in New Issue
Block a user