From a50ca5406898bd92e69f28e0316e148291b5c451 Mon Sep 17 00:00:00 2001 From: Xwite <1797350009@qq.com> Date: Sat, 25 Mar 2023 11:34:10 +0800 Subject: [PATCH 1/4] =?UTF-8?q?fix(js/java.cacheFile):=20=E4=B8=8B?= =?UTF-8?q?=E8=BD=BD=E5=87=BA=E9=94=99=E6=97=B6=E4=BF=9D=E5=AD=98=E7=B1=BB?= =?UTF-8?q?=E5=87=BA=E9=94=99=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/legado/app/help/JsExtensions.kt | 25 +++++++++++-------- .../main/java/io/legado/app/utils/UrlUtil.kt | 1 + 2 files changed, 16 insertions(+), 10 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 fa8d61388..01015d7c0 100644 --- a/app/src/main/java/io/legado/app/help/JsExtensions.kt +++ b/app/src/main/java/io/legado/app/help/JsExtensions.kt @@ -195,16 +195,17 @@ interface JsExtensions : JsEncodeUtils { * 缓存以文本方式保存的文件 如.js .txt等 * @param saveTime 缓存时间,单位:秒 */ - fun cacheFile(urlStr: String, saveTime: Int): String? { + fun cacheFile(urlStr: String, saveTime: Int): String { val key = md5Encode16(urlStr) - val cache = CacheManager.getFile(key) - if (cache.isNullOrBlank()) { - log("首次下载 $urlStr") - val value = ajax(urlStr) ?: return null - CacheManager.putFile(key, value, saveTime) - return value + val cahcePath = CacheManager.get(key) + return if (cache.isNullOrBlank()) { + val path = downloadFile(urlStr) + log("首次下载 $urlStr >> $path") + CacheManager.put(key, path, saveTime) + readTxtFile(path) + } else { + readTxtFile(cahcePath) } - return cache } /** @@ -224,12 +225,12 @@ interface JsExtensions : JsEncodeUtils { /** * 下载文件 - * @param url 下载地址:可带参数type,文件后缀,不带默认zip + * @param url 下载地址:可带参数type * @return 下载的文件相对路径 */ fun downloadFile(url: String): String { val analyzeUrl = AnalyzeUrl(url, source = getSource()) - val type = analyzeUrl.type ?: "zip" + val type = UrlUtil.getSuffix(url, analyzeUrl.type) val path = FileUtils.getPath( File(FileUtils.getCachePath()), "${MD5Utils.md5Encode16(url)}.${type}" @@ -250,6 +251,10 @@ interface JsExtensions : JsEncodeUtils { * @param url 通过url里的参数来判断文件类型 * @return 相对路径 */ + @Deprecated( + "Depreted", + ReplaceWith("downloadFile(url: String)") + ) fun downloadFile(content: String, url: String): String { val type = AnalyzeUrl(url, source = getSource()).type ?: return "" val path = FileUtils.getPath( diff --git a/app/src/main/java/io/legado/app/utils/UrlUtil.kt b/app/src/main/java/io/legado/app/utils/UrlUtil.kt index 91438bc5c..3214c12a9 100644 --- a/app/src/main/java/io/legado/app/utils/UrlUtil.kt +++ b/app/src/main/java/io/legado/app/utils/UrlUtil.kt @@ -142,6 +142,7 @@ object UrlUtil { ) { path.substringAfterLast("/") } else { + AppLog.put("getFileNameFromPath: Unexpected file suffix: $suffix") null } } From e527b7fb5d2c3e63acb1efdbbb9c1bb2738c9126 Mon Sep 17 00:00:00 2001 From: Xwite <1797350009@qq.com> Date: Sat, 25 Mar 2023 11:36:18 +0800 Subject: [PATCH 2/4] =?UTF-8?q?fix(js/java.cacheFile):=20=E4=B8=8B?= =?UTF-8?q?=E8=BD=BD=E5=87=BA=E9=94=99=E6=97=B6=E4=BF=9D=E5=AD=98=E7=B1=BB?= =?UTF-8?q?=E5=87=BA=E9=94=99=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/assets/help/jsHelp.md | 5 ++--- app/src/main/java/io/legado/app/help/JsExtensions.kt | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/app/src/main/assets/help/jsHelp.md b/app/src/main/assets/help/jsHelp.md index 7b313c079..7ae78076b 100644 --- a/app/src/main/assets/help/jsHelp.md +++ b/app/src/main/assets/help/jsHelp.md @@ -124,7 +124,7 @@ eval(String(java.cacheFile(url))) 删除缓存文件 cache.delete(java.md5Encode16(url)) ``` -* 获取网络压缩文件里面指定路径的数据 *可替换Zip Rar 7Z Archive +* 获取网络压缩文件里面指定路径的数据 *可替换Zip Rar 7Z ``` java.get*StringContent(url: String, path: String): String @@ -167,8 +167,7 @@ java.androidId() * 文件 > 所有对于文件的读写删操作都是相对路径,只能操作阅读缓存/android/data/{package}/cache/内的文件 ``` -//文件下载,content为十六进制字符串,url用于生成文件名,返回文件路径 -downloadFile(content: String, url: String): String +//文件下载 url用于生成文件名,返回文件路径 downloadFile(url: String): String //文件解压,zipPath为压缩文件路径,返回解压路径 unArchiveFile(zipPath: String): String 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 01015d7c0..87c01ef57 100644 --- a/app/src/main/java/io/legado/app/help/JsExtensions.kt +++ b/app/src/main/java/io/legado/app/help/JsExtensions.kt @@ -198,7 +198,7 @@ interface JsExtensions : JsEncodeUtils { fun cacheFile(urlStr: String, saveTime: Int): String { val key = md5Encode16(urlStr) val cahcePath = CacheManager.get(key) - return if (cache.isNullOrBlank()) { + return if (cahcePath.isNullOrBlank()) { val path = downloadFile(urlStr) log("首次下载 $urlStr >> $path") CacheManager.put(key, path, saveTime) From 99582dfcd70e2f8c9da4d51bd249a83e4677f284 Mon Sep 17 00:00:00 2001 From: Xwite <1797350009@qq.com> Date: Sat, 25 Mar 2023 11:53:10 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/io/legado/app/help/JsExtensions.kt | 4 ++-- .../io/legado/app/ui/association/FileAssociationViewModel.kt | 4 +++- 2 files changed, 5 insertions(+), 3 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 87c01ef57..7ac1261e9 100644 --- a/app/src/main/java/io/legado/app/help/JsExtensions.kt +++ b/app/src/main/java/io/legado/app/help/JsExtensions.kt @@ -173,7 +173,7 @@ interface JsExtensions : JsEncodeUtils { */ fun importScript(path: String): String { val result = when { - path.startsWith("http") -> cacheFile(path) ?: "" + path.startsWith("http") -> cacheFile(path) path.isUri() -> Uri.parse(path).readText(appCtx) path.startsWith("/storage") -> FileUtils.readText(path) else -> readTxtFile(path) @@ -187,7 +187,7 @@ interface JsExtensions : JsEncodeUtils { * @param urlStr 网络文件的链接 * @return 返回缓存后的文件内容 */ - fun cacheFile(urlStr: String): String? { + fun cacheFile(urlStr: String): String { return cacheFile(urlStr, 0) } diff --git a/app/src/main/java/io/legado/app/ui/association/FileAssociationViewModel.kt b/app/src/main/java/io/legado/app/ui/association/FileAssociationViewModel.kt index dc3a9b7f3..e9b3c47a2 100644 --- a/app/src/main/java/io/legado/app/ui/association/FileAssociationViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/association/FileAssociationViewModel.kt @@ -24,7 +24,9 @@ class FileAssociationViewModel(application: Application) : BaseAssociationViewMo val fileDoc = FileDoc.fromUri(uri, false) fileName = fileDoc.name if (fileName.matches(AppPattern.archiveFileRegex)) { - ArchiveUtils.deCompress(fileDoc).forEach { + ArchiveUtils.deCompress(fileDoc, ArchiveUtils.TEMP_PATH) { + it.matches(bookFileRegex) + }.forEach { dispatch(FileDoc.fromFile(it)) } } else { From e38c72f5f27e02e0986f8bd5d08923cecd63af81 Mon Sep 17 00:00:00 2001 From: Xwite <1797350009@qq.com> Date: Sat, 25 Mar 2023 12:22:34 +0800 Subject: [PATCH 4/4] chore(RhinoScriptEngine): remove function print println --- rhino/src/main/java/com/script/rhino/RhinoScriptEngine.kt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/rhino/src/main/java/com/script/rhino/RhinoScriptEngine.kt b/rhino/src/main/java/com/script/rhino/RhinoScriptEngine.kt index d69494767..6b536b5b5 100644 --- a/rhino/src/main/java/com/script/rhino/RhinoScriptEngine.kt +++ b/rhino/src/main/java/com/script/rhino/RhinoScriptEngine.kt @@ -165,6 +165,7 @@ class RhinoScriptEngine : AbstractScriptEngine(), Invocable, Compilable { val newScope: Scriptable = ExternalScriptable(ctxt, indexedProps) newScope.prototype = topLevel newScope.put("context", newScope, ctxt) + /* val cx = Context.enter() try { @Language("js") @@ -196,6 +197,7 @@ class RhinoScriptEngine : AbstractScriptEngine(), Invocable, Compilable { } finally { Context.exit() } + */ newScope } } @@ -304,6 +306,7 @@ class RhinoScriptEngine : AbstractScriptEngine(), Invocable, Compilable { private const val DEBUG = false + /* @Language("js") private val printSource = """ function print(str, newline) { @@ -323,6 +326,7 @@ class RhinoScriptEngine : AbstractScriptEngine(), Invocable, Compilable { print(str, true); } """.trimIndent() + */ init { ContextFactory.initGlobal(object : ContextFactory() {