diff --git a/app/build.gradle b/app/build.gradle index 19db5b208..4cedca019 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -168,7 +168,7 @@ dependencies { implementation 'io.github.jeremyliao:live-event-bus-x:1.8.0' //规则相关 - implementation 'org.jsoup:jsoup:1.13.1' + implementation 'org.jsoup:jsoup:1.14.1' //noinspection GradleDependency implementation 'cn.wanghaomiao:JsoupXpath:2.3.2' implementation 'com.jayway.jsonpath:json-path:2.6.0' @@ -205,4 +205,4 @@ dependencies { //转换繁体 implementation 'com.github.liuyueyi.quick-chinese-transfer:quick-transfer-core:0.2.1' -} \ No newline at end of file +} 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 64fb8d954..cab0b6d96 100644 --- a/app/src/main/java/io/legado/app/help/JsExtensions.kt +++ b/app/src/main/java/io/legado/app/help/JsExtensions.kt @@ -15,9 +15,13 @@ import kotlinx.coroutines.runBlocking import org.jsoup.Connection import org.jsoup.Jsoup import splitties.init.appCtx +import java.io.ByteArrayInputStream +import java.io.ByteArrayOutputStream import java.io.File import java.net.URLEncoder import java.util.* +import java.util.zip.ZipEntry +import java.util.zip.ZipInputStream @Keep @Suppress("unused") @@ -275,6 +279,59 @@ interface JsExtensions { return null } + /** + * 获取网络zip文件里面的数据 + * @param url zip文件的链接 + * @param path 所需获取文件在zip内的路径 + * @return zip指定文件的数据 + */ + fun getZipStringContent(url: String, path: String): String { + val bytes = runBlocking { + return@runBlocking okHttpClient.newCall { url(url) }.bytes() + } + val bos = ByteArrayOutputStream() + val zis = ZipInputStream(ByteArrayInputStream(bytes)) + + var entry: ZipEntry = zis.nextEntry + + while (entry != null) { + if (entry.name.equals(path)) { + zis.use { it.copyTo(bos) } + return bos.toString() + } + entry = zis.nextEntry + } + Debug.log("getZipContent 未发现内容") + + return ""; + } + + /** + * 获取网络zip文件里面的数据 + * @param url zip文件的链接 + * @param path 所需获取文件在zip内的路径 + * @return zip指定文件的数据 + */ + fun getZipByteArrayContent(url: String, path: String): ByteArray? { + val bytes = runBlocking { + return@runBlocking okHttpClient.newCall { url(url) }.bytes() + } + val bos = ByteArrayOutputStream() + val zis = ZipInputStream(ByteArrayInputStream(bytes)) + + var entry: ZipEntry = zis.nextEntry + while (entry != null) { + if (entry.name.equals(path)) { + zis.use { it.copyTo(bos) } + return bos.toByteArray() + } + entry = zis.nextEntry; + } + Debug.log("getZipContent 未发现内容") + + return null; + } + /** * 返回字体解析类 * @param str 支持url,本地文件,base64,自动判断,自动缓存