From 57fac675a51e11d3bea430b9f82c1f8a27debe47 Mon Sep 17 00:00:00 2001 From: Horis <8674809+821938089@users.noreply.github.com> Date: Mon, 28 Apr 2025 10:31:36 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/io/legado/app/help/JsExtensions.kt | 16 ++++++++++++---- app/src/main/java/io/legado/app/utils/JsURL.kt | 2 +- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/io/legado/app/help/JsExtensions.kt b/app/src/main/java/io/legado/app/help/JsExtensions.kt index fe9b2065d..97367b180 100644 --- a/app/src/main/java/io/legado/app/help/JsExtensions.kt +++ b/app/src/main/java/io/legado/app/help/JsExtensions.kt @@ -57,7 +57,6 @@ import splitties.init.appCtx import java.io.ByteArrayInputStream import java.io.ByteArrayOutputStream import java.io.File -import java.io.FileOutputStream import java.net.URLEncoder import java.nio.charset.Charset import java.security.MessageDigest @@ -310,16 +309,24 @@ interface JsExtensions : JsEncodeUtils { * @return 下载的文件相对路径 */ fun downloadFile(url: String): String { + rhinoContext.ensureActive() val analyzeUrl = AnalyzeUrl(url, source = getSource(), coroutineContext = context) val type = UrlUtil.getSuffix(url, analyzeUrl.type) val path = FileUtils.getPath( File(FileUtils.getCachePath()), "${MD5Utils.md5Encode16(url)}.${type}" ) - val file = File(path).createFileReplace() + val file = File(path) + file.delete() analyzeUrl.getInputStream().use { iStream -> - FileOutputStream(file).use { oStream -> - iStream.copyTo(oStream) + file.createFileReplace() + try { + file.outputStream().buffered().use { oStream -> + iStream.copyTo(oStream) + } + } catch (e: Throwable) { + file.delete() + throw e } } return path.substring(FileUtils.getCachePath().length) @@ -337,6 +344,7 @@ interface JsExtensions : JsEncodeUtils { ReplaceWith("downloadFile(url)") ) fun downloadFile(content: String, url: String): String { + rhinoContext.ensureActive() val type = AnalyzeUrl(url, source = getSource(), coroutineContext = context).type ?: return "" val path = FileUtils.getPath( diff --git a/app/src/main/java/io/legado/app/utils/JsURL.kt b/app/src/main/java/io/legado/app/utils/JsURL.kt index 3d5ac4cbf..fbd6a39db 100644 --- a/app/src/main/java/io/legado/app/utils/JsURL.kt +++ b/app/src/main/java/io/legado/app/utils/JsURL.kt @@ -31,7 +31,7 @@ class JsURL(url: String, baseUrl: String? = null) { searchParams = query?.let { _ -> val map = hashMapOf() query.split("&").forEach { - val x = it.split("=") + val x = it.split("=", limit = 2) map[x[0]] = URLDecoder.decode(x[1], "utf-8") } map