diff --git a/app/src/main/assets/updateLog.md b/app/src/main/assets/updateLog.md index 751f4906d..79223d416 100644 --- a/app/src/main/assets/updateLog.md +++ b/app/src/main/assets/updateLog.md @@ -6,6 +6,7 @@ **2020/12/14** * 修复bug * 电池图标不允许改字体 +* 升级js库 **2020/12/13** * 修复bug diff --git a/app/src/main/java/io/legado/app/help/http/AjaxWebView.kt b/app/src/main/java/io/legado/app/help/http/AjaxWebView.kt index c14423c8b..b57409671 100644 --- a/app/src/main/java/io/legado/app/help/http/AjaxWebView.kt +++ b/app/src/main/java/io/legado/app/help/http/AjaxWebView.kt @@ -160,7 +160,7 @@ class AjaxWebView { if (it.isNotEmpty() && it != "null") { val content = StringEscapeUtils.unescapeJson(it) .replace("^\"|\"$".toRegex(), "") - handler.obtainMessage(MSG_SUCCESS, StrResponse.success(content, url)) + handler.obtainMessage(MSG_SUCCESS, StrResponse(url, content)) .sendToTarget() handler.removeCallbacks(this) return@evaluateJavascript @@ -188,7 +188,7 @@ class AjaxWebView { if (url.matches(it.toRegex())) { handler.obtainMessage( MSG_SUCCESS, - StrResponse.success(url, view.url ?: params.url) + StrResponse(view.url ?: params.url, url) ).sendToTarget() } } diff --git a/app/src/main/java/io/legado/app/help/http/HttpHelper.kt b/app/src/main/java/io/legado/app/help/http/HttpHelper.kt index 0b83c0616..31e8dfecf 100644 --- a/app/src/main/java/io/legado/app/help/http/HttpHelper.kt +++ b/app/src/main/java/io/legado/app/help/http/HttpHelper.kt @@ -111,7 +111,7 @@ object HttpHelper { override fun onError(error: Throwable) { if (!block.isCompleted) - block.resume(StrResponse.success(error.msg, params.url)) + block.resume(StrResponse(params.url, error.msg)) } } webView.load(params) diff --git a/app/src/main/java/io/legado/app/help/http/StrResponse.kt b/app/src/main/java/io/legado/app/help/http/StrResponse.kt index 19255c47e..1b1f53395 100644 --- a/app/src/main/java/io/legado/app/help/http/StrResponse.kt +++ b/app/src/main/java/io/legado/app/help/http/StrResponse.kt @@ -2,121 +2,72 @@ package io.legado.app.help.http import okhttp3.* import okhttp3.Response.Builder -import java.util.* /** * An HTTP response. */ @Suppress("unused", "MemberVisibilityCanBePrivate") -class StrResponse private constructor( - val rawResponse: Response, - val body: String?, - val errorBody: ResponseBody? -) { - fun raw() = rawResponse +class StrResponse { + var raw: Response + private set + var body: String? = null + private set + var errorBody: ResponseBody? = null + private set + + constructor(rawResponse: Response, body: String?) { + this.raw = rawResponse + this.body = body + } + + constructor(url: String, body: String?) { + raw = Builder() + .code(200) + .message("OK") + .protocol(Protocol.HTTP_1_1) + .request(Request.Builder().url(url).build()) + .build() + this.body = body + } + + constructor(rawResponse: Response, errorBody: ResponseBody?) { + this.raw = rawResponse + this.errorBody = errorBody + } + + fun raw() = raw fun url(): String { - rawResponse.networkResponse?.let { + raw.networkResponse?.let { return it.request.url.toString() } - return rawResponse.request.url.toString() + return raw.request.url.toString() } + val url: String get() = url() + + fun body() = body + fun code(): Int { - return rawResponse.code + return raw.code } fun message(): String { - return rawResponse.message + return raw.message } fun headers(): Headers { - return rawResponse.headers + return raw.headers } - fun isSuccessful(): Boolean = rawResponse.isSuccessful + fun isSuccessful(): Boolean = raw.isSuccessful fun errorBody(): ResponseBody? { return errorBody } override fun toString(): String { - return rawResponse.toString() + return raw.toString() } - companion object { - fun success(code: Int, body: String): StrResponse { - require(!(code < 200 || code >= 300)) { "code < 200 or >= 300: $code" } - return success( - body, - Builder() // - .code(code) - .message("Response.success()") - .protocol(Protocol.HTTP_1_1) - .request(Request.Builder().url("http://localhost/").build()) - .build() - ) - } - - fun success(body: String, headers: Headers): StrResponse { - return success( - body, - Builder() // - .code(200) - .message("OK") - .protocol(Protocol.HTTP_1_1) - .headers(headers) - .request(Request.Builder().url("http://localhost/").build()) - .build() - ) - } - - fun success(body: String, url: String): StrResponse { - return success( - body, - Builder() // - .code(200) - .message("OK") - .protocol(Protocol.HTTP_1_1) - .request(Request.Builder().url(url).build()) - .build() - ) - } - - @JvmOverloads - fun success( - body: String?, rawResponse: Response = - Builder() // - .code(200) - .message("OK") - .protocol(Protocol.HTTP_1_1) - .request(Request.Builder().url("http://localhost/").build()) - .build() - ): StrResponse { - Objects.requireNonNull(rawResponse, "rawResponse == null") - require(rawResponse.isSuccessful) { "rawResponse must be successful response" } - return StrResponse(rawResponse, body, null) - } - - fun error(code: Int, body: ResponseBody?): StrResponse { - Objects.requireNonNull(body, "body == null") - require(code >= 400) { "code < 400: $code" } - return error( - body, - Builder() // - .code(code) - .message("Response.error()") - .protocol(Protocol.HTTP_1_1) - .request(Request.Builder().url("http://localhost/").build()) - .build() - ) - } - - fun error(body: ResponseBody?, rawResponse: Response): StrResponse { - Objects.requireNonNull(body, "body == null") - Objects.requireNonNull(rawResponse, "rawResponse == null") - require(!rawResponse.isSuccessful) { "rawResponse should not be successful response" } - return StrResponse(rawResponse, null, body) - } - } } \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/help/http/parser/StrResponseParser.kt b/app/src/main/java/io/legado/app/help/http/parser/StrResponseParser.kt index 53ead9d26..9868b9dc8 100644 --- a/app/src/main/java/io/legado/app/help/http/parser/StrResponseParser.kt +++ b/app/src/main/java/io/legado/app/help/http/parser/StrResponseParser.kt @@ -9,11 +9,12 @@ import rxhttp.wrapper.exception.HttpStatusCodeException import java.nio.charset.Charset @Parser(name = "StrResponse") -class StrResponseParser(val encode: String? = null) : rxhttp.wrapper.parse.Parser { +class StrResponseParser(private val encode: String? = null) : + rxhttp.wrapper.parse.Parser { override fun onParse(response: Response): StrResponse { val body = getString(response) - return StrResponse.success(body, response) + return StrResponse(response, body) } private fun getString(response: Response): String { diff --git a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeUrl.kt b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeUrl.kt index 00b2e4b95..9991a49f5 100644 --- a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeUrl.kt +++ b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeUrl.kt @@ -280,7 +280,7 @@ class AnalyzeUrl( sourceRegex: String? = null, ): StrResponse { if (type != null) { - return StrResponse.success(StringUtils.byteToHexString(getByteArray(tag)), url) + return StrResponse(url, StringUtils.byteToHexString(getByteArray(tag))) } setCookie(tag) if (useWebView) { diff --git a/app/src/main/java/io/legado/app/model/webBook/WebBook.kt b/app/src/main/java/io/legado/app/model/webBook/WebBook.kt index 7b2235aab..7a1c29a05 100644 --- a/app/src/main/java/io/legado/app/model/webBook/WebBook.kt +++ b/app/src/main/java/io/legado/app/model/webBook/WebBook.kt @@ -52,7 +52,7 @@ class WebBook(val bookSource: BookSource) { res.body, bookSource, analyzeUrl, - res.url(), + res.url, variableBook, true ) @@ -83,7 +83,7 @@ class WebBook(val bookSource: BookSource) { res.body, bookSource, analyzeUrl, - res.url(), + res.url, variableBook, false ) diff --git a/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt b/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt index 8d3481550..dfdee0a86 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt @@ -611,7 +611,9 @@ class ReadBookActivity : ReadBookBaseActivity(), autoPageProgress += scrollOffset if (autoPageProgress >= binding.readView.height) { autoPageProgress = 0 - binding.readView.fillPage(PageDirection.NEXT) + if (!binding.readView.fillPage(PageDirection.NEXT)) { + autoPageStop() + } } else { binding.readView.invalidate() } diff --git a/app/src/main/java/io/legado/app/ui/book/read/page/ReadView.kt b/app/src/main/java/io/legado/app/ui/book/read/page/ReadView.kt index 716a0bd88..fb91611af 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/page/ReadView.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/page/ReadView.kt @@ -437,15 +437,15 @@ class ReadView(context: Context, attrs: AttributeSet) : curPage.cancelSelect() } - fun fillPage(direction: PageDirection) { - when (direction) { + fun fillPage(direction: PageDirection): Boolean { + return when (direction) { PageDirection.PREV -> { pageFactory.moveToPrev(true) } PageDirection.NEXT -> { pageFactory.moveToNext(true) } - else -> Unit + else -> false } } @@ -547,5 +547,6 @@ class ReadView(context: Context, attrs: AttributeSet) : fun showActionMenu() fun screenOffTimerStart() fun showTextActionMenu() + fun autoPageStop() } } diff --git a/app/src/main/java/io/legado/app/ui/book/read/page/delegate/PageDelegate.kt b/app/src/main/java/io/legado/app/ui/book/read/page/delegate/PageDelegate.kt index 2f1d70c8d..a70961487 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/page/delegate/PageDelegate.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/page/delegate/PageDelegate.kt @@ -173,6 +173,7 @@ abstract class PageDelegate(protected val readView: ReadView) { fun hasNext(): Boolean { val hasNext = readView.pageFactory.hasNext() if (!hasNext) { + readView.callBack.autoPageStop() if (!snackBar.isShown) { snackBar.setText(R.string.no_next_page) snackBar.show()