From 818e6931c6bc89e0bb111e77418542a88f8db37c Mon Sep 17 00:00:00 2001 From: AwkwardPeak7 <48650614+AwkwardPeak7@users.noreply.github.com> Date: Sun, 13 Apr 2025 21:28:44 +0500 Subject: [PATCH] Fix duplicate requests in WebView due to empty reasonPhrase (#2003) --- CHANGELOG.md | 1 + .../webview/WebViewScreenContent.kt | 6 +- .../tachiyomi/util/system/WebViewUtil.kt | 69 +++++++++++++++++++ 3 files changed, 75 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index da0c0753a..15f9280c6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -38,6 +38,7 @@ The format is a modified version of [Keep a Changelog](https://keepachangelog.co - Fix app bar action tooltips blocking clicks ([@Bartuzen](https://github.com/Bartuzen)) ([#1928](https://github.com/mihonapp/mihon/pull/1928)) - Fix unintended app permissions due to Firebase misconfiguration ([@AntsyLich](https://github.com/AntsyLich)) ([#1960](https://github.com/mihonapp/mihon/pull/1960)) - Fix navigation issue after migrating a duplicated entry from History tab ([@cuong-tran](https://github.com/cuong-tran)) ([#1980](https://github.com/mihonapp/mihon/pull/1980)) +- Fix duplicate requests in WebView due to empty reasonPhrase ([@AwkwardPeak7](https://github.com/AwkwardPeak7)) ([#2003](https://github.com/mihonapp/mihon/pull/2003)) ## [v0.18.0] - 2025-03-20 ### Added diff --git a/app/src/main/java/eu/kanade/presentation/webview/WebViewScreenContent.kt b/app/src/main/java/eu/kanade/presentation/webview/WebViewScreenContent.kt index 7a947979b..9cd9e4eb6 100644 --- a/app/src/main/java/eu/kanade/presentation/webview/WebViewScreenContent.kt +++ b/app/src/main/java/eu/kanade/presentation/webview/WebViewScreenContent.kt @@ -45,7 +45,9 @@ import eu.kanade.tachiyomi.util.system.getHtml import eu.kanade.tachiyomi.util.system.setDefaultSettings import kotlinx.collections.immutable.persistentListOf import kotlinx.coroutines.launch +import logcat.LogPriority import okhttp3.Request +import tachiyomi.core.common.util.system.logcat import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.i18n.stringResource @@ -145,16 +147,18 @@ fun WebViewScreenContent( val contentType = response.body.contentType()?.let { "${it.type}/${it.subtype}" } ?: "text/html" val contentEncoding = response.body.contentType()?.charset()?.name() ?: "utf-8" + val message = response.message.ifBlank { WebViewUtil.getMessageFromHttpStatusCode(response.code) } WebResourceResponse( contentType, contentEncoding, response.code, - response.message, + message, response.headers.associate { it.first to it.second }, response.body.byteStream(), ) } catch (e: Throwable) { + logcat(priority = LogPriority.ERROR, throwable = e) super.shouldInterceptRequest(view, request) } } diff --git a/core/common/src/main/kotlin/eu/kanade/tachiyomi/util/system/WebViewUtil.kt b/core/common/src/main/kotlin/eu/kanade/tachiyomi/util/system/WebViewUtil.kt index a66ca6994..7dc5ab839 100644 --- a/core/common/src/main/kotlin/eu/kanade/tachiyomi/util/system/WebViewUtil.kt +++ b/core/common/src/main/kotlin/eu/kanade/tachiyomi/util/system/WebViewUtil.kt @@ -64,6 +64,75 @@ object WebViewUtil { SYSTEM_SETTINGS_PACKAGE } } + + fun getMessageFromHttpStatusCode(code: Int): String { + return when (code) { + 100 -> "Continue" + 101 -> "Switching Protocols" + 102 -> "Processing" + 103 -> "Early Hints" + 200 -> "OK" + 201 -> "Created" + 202 -> "Accepted" + 203 -> "Non-Authoritative Information" + 204 -> "No Content" + 205 -> "Reset Content" + 206 -> "Partial Content" + 207 -> "Multi-Status" + 208 -> "Already Reported" + 226 -> "IM Used" + 300 -> "Multiple Choices" + 301 -> "Moved Permanently" + 302 -> "Found" + 303 -> "See Other" + 304 -> "Not Modified" + 305 -> "Use Proxy" + 306 -> "unused" + 307 -> "Temporary Redirect" + 308 -> "Permanent Redirect" + 400 -> "Bad Request" + 401 -> "Unauthorized" + 402 -> "Payment Required" + 403 -> "Forbidden" + 404 -> "Not Found" + 405 -> "Method Not Allowed" + 406 -> "Not Acceptable" + 407 -> "Proxy Authentication Required" + 408 -> "Request Timeout" + 409 -> "Conflict" + 410 -> "Gone" + 411 -> "Length Required" + 412 -> "Precondition Failed" + 413 -> "Content Too Large" + 414 -> "URI Too Long" + 415 -> "Unsupported Media Type" + 416 -> "Range Not Satisfiable" + 417 -> "Expectation Failed" + 418 -> "I'm a teapot" + 421 -> "Misdirected Request" + 422 -> "Unprocessable Content" + 423 -> "Locked" + 424 -> "Failed Dependency" + 425 -> "Too Early" + 426 -> "Upgrade Required" + 428 -> "Precondition Required" + 429 -> "Too Many Requests" + 431 -> "Request Header Fields Too Large" + 451 -> "Unavailable For Legal Reasons" + 500 -> "Internal Server Error" + 501 -> "Not Implemented" + 502 -> "Bad Gateway" + 503 -> "Service Unavailable" + 504 -> "Gateway Timeout" + 505 -> "HTTP Version Not Supported" + 506 -> "Variant Also Negotiates" + 507 -> "Insufficient Storage" + 508 -> "Loop Detected" + 510 -> "Not Extended" + 511 -> "Network Authentication Required" + else -> "Unknown" + } + } } fun WebView.isOutdated(): Boolean {