From 3e420eea3f8b8d3edc64d52a04a98f79f6bc0d25 Mon Sep 17 00:00:00 2001 From: FongMi Date: Mon, 11 Sep 2023 11:00:13 +0800 Subject: [PATCH] Update quickjs --- quickjs/build.gradle | 2 +- .../java/com/fongmi/quickjs/Provider.java | 18 --------- .../com/fongmi/quickjs/crawler/Spider.java | 33 ++++++++++------ .../com/fongmi/quickjs/method/Global.java | 38 +++++++++++++++---- 4 files changed, 53 insertions(+), 38 deletions(-) diff --git a/quickjs/build.gradle b/quickjs/build.gradle index b50f68dcd..277364d6c 100644 --- a/quickjs/build.gradle +++ b/quickjs/build.gradle @@ -13,5 +13,5 @@ android { dependencies { implementation project(':catvod') - implementation 'wang.harlon.quickjs:wrapper-android:0.21.1' + implementation 'wang.harlon.quickjs:wrapper-android:0.22.1-beta' } \ No newline at end of file diff --git a/quickjs/src/main/java/com/fongmi/quickjs/Provider.java b/quickjs/src/main/java/com/fongmi/quickjs/Provider.java index a198c967f..cd04c8080 100644 --- a/quickjs/src/main/java/com/fongmi/quickjs/Provider.java +++ b/quickjs/src/main/java/com/fongmi/quickjs/Provider.java @@ -7,11 +7,8 @@ import android.net.Uri; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.media3.common.util.UriUtil; -import com.fongmi.quickjs.utils.Module; import com.whl.quickjs.android.QuickJSLoader; -import com.whl.quickjs.wrapper.JSModule; public class Provider extends ContentProvider { @@ -22,23 +19,8 @@ public class Provider extends ContentProvider { } } - private void setModuleLoader() { - JSModule.setModuleLoader(new JSModule.ModuleLoader() { - @Override - public String convertModuleName(String moduleBaseName, String moduleName) { - return UriUtil.resolve(moduleBaseName, moduleName); - } - - @Override - public String getModuleScript(String moduleName) { - return Module.get().fetch(moduleName); - } - }); - } - @Override public boolean onCreate() { - setModuleLoader(); return true; } diff --git a/quickjs/src/main/java/com/fongmi/quickjs/crawler/Spider.java b/quickjs/src/main/java/com/fongmi/quickjs/crawler/Spider.java index 090b7fa10..3073e8d83 100644 --- a/quickjs/src/main/java/com/fongmi/quickjs/crawler/Spider.java +++ b/quickjs/src/main/java/com/fongmi/quickjs/crawler/Spider.java @@ -1,7 +1,6 @@ package com.fongmi.quickjs.crawler; import android.content.Context; -import android.util.Base64; import com.fongmi.quickjs.bean.Res; import com.fongmi.quickjs.method.Function; @@ -39,12 +38,15 @@ public class Spider extends com.github.catvod.crawler.Spider { private final DexClassLoader dex; private QuickJSContext ctx; private JSObject jsObject; + private final String name; private final String key; private final String api; + private boolean cat; - public Spider(String api, DexClassLoader dex) throws Exception { - this.key = "__" + UUID.randomUUID().toString().replace("-", "") + "__"; + public Spider(String key, String api, DexClassLoader dex) throws Exception { + this.name = "__" + UUID.randomUUID().toString().replace("-", "") + "__"; this.executor = Executors.newSingleThreadExecutor(); + this.key = key; this.api = api; this.dex = dex; initializeJS(); @@ -132,8 +134,9 @@ public class Spider extends com.github.catvod.crawler.Spider { submit(() -> { if (ctx == null) createCtx(); if (dex != null) createDex(); - ctx.evaluateModule(getContent(), api); - jsObject = (JSObject) ctx.getProperty(ctx.getGlobalObject(), key); + String context = getContent(); + ctx.evaluateModule(context, api); + jsObject = (JSObject) ctx.getProperty(ctx.getGlobalObject(), name); return null; }).get(); } @@ -144,6 +147,12 @@ public class Spider extends com.github.catvod.crawler.Spider { Global.create(ctx, executor).setProperty(); ctx.getGlobalObject().setProperty("local", Local.class); ctx.getGlobalObject().getContext().evaluate(Path.asset("js/lib/http.js")); + ctx.setModuleLoader(new QuickJSContext.DefaultModuleLoader() { + @Override + public String getModuleStringCode(String moduleName) { + return Module.get().fetch(moduleName); + } + }); } private void createDex() { @@ -190,11 +199,11 @@ public class Spider extends com.github.catvod.crawler.Spider { } private String getContent() { - String global = "globalThis." + key; - String content = Module.get().load(api); + String global = "globalThis." + name; + String content = Module.get().fetch(api); if (content.contains("__jsEvalReturn")) { - ctx.evaluate("req = http"); - return content.concat(global).concat(" = __jsEvalReturn()"); + cat = true; + return content.concat(global + " = __jsEvalReturn()"); } else if (content.contains("__JS_SPIDER__")) { return content.replace("__JS_SPIDER__", global); } else { @@ -220,9 +229,9 @@ public class Spider extends com.github.catvod.crawler.Spider { String json = (String) call("proxy", array, object); Res res = Res.objectFrom(json); Object[] result = new Object[3]; - result[0] = 200; - result[1] = "application/octet-stream"; - result[2] = new ByteArrayInputStream(Base64.decode(res.getContent(), Base64.DEFAULT)); + result[0] = res.getCode(); + result[1] = res.getContentType(); + result[2] = res.getStream(); return result; } diff --git a/quickjs/src/main/java/com/fongmi/quickjs/method/Global.java b/quickjs/src/main/java/com/fongmi/quickjs/method/Global.java index 2d4408b6e..76f610f9a 100644 --- a/quickjs/src/main/java/com/fongmi/quickjs/method/Global.java +++ b/quickjs/src/main/java/com/fongmi/quickjs/method/Global.java @@ -9,6 +9,7 @@ import com.fongmi.quickjs.bean.Req; import com.fongmi.quickjs.utils.Connect; import com.fongmi.quickjs.utils.Parser; import com.fongmi.quickjs.utils.Proxy; +import com.github.catvod.utils.Trans; import com.google.gson.Gson; import com.whl.quickjs.wrapper.JSFunction; import com.whl.quickjs.wrapper.JSMethod; @@ -18,7 +19,6 @@ import com.whl.quickjs.wrapper.QuickJSContext; import java.io.IOException; import java.lang.reflect.Method; import java.net.URLEncoder; -import java.nio.charset.StandardCharsets; import java.util.Arrays; import java.util.Timer; import java.util.TimerTask; @@ -65,6 +65,30 @@ public class Global { } } + private void submit(Runnable runnable) { + if (!executor.isShutdown()) executor.submit(runnable); + } + + @Keep + @JSMethod + public String s2t(String text) { + try { + return Trans.s2t(false, text); + } catch (Exception e) { + return ""; + } + } + + @Keep + @JSMethod + public String t2s(String text) { + try { + return Trans.t2s(false, text); + } catch (Exception e) { + return ""; + } + } + @Keep @JSMethod public String getProxy(Boolean local) { @@ -74,7 +98,7 @@ public class Global { @Keep @JSMethod public String js2Proxy(Boolean dynamic, Integer siteType, String siteKey, String url, JSObject headers) { - return getProxy(true) + "&from=catvod" + "&header=" + URLEncoder.encode(headers.stringify()) + "&url=" + URLEncoder.encode(url); + return getProxy(true) + "&from=catvod" + "&siteType=" + siteType + "&siteKey=" + siteKey + "&header=" + URLEncoder.encode(headers.stringify()) + "&url=" + URLEncoder.encode(url); } @Keep @@ -169,8 +193,8 @@ public class Global { SecretKeySpec keySpec = new SecretKeySpec(keyBuf, "AES"); if (iv == null) cipher.init(encrypt ? Cipher.ENCRYPT_MODE : Cipher.DECRYPT_MODE, keySpec); else cipher.init(encrypt ? Cipher.ENCRYPT_MODE : Cipher.DECRYPT_MODE, keySpec, new IvParameterSpec(ivBuf)); - byte[] inBuf = inBase64 ? Base64.decode(input, Base64.DEFAULT) : input.getBytes(StandardCharsets.UTF_8); - return outBase64 ? Base64.encodeToString(cipher.doFinal(inBuf), Base64.DEFAULT) : new String(cipher.doFinal(inBuf), StandardCharsets.UTF_8); + byte[] inBuf = inBase64 ? Base64.decode(input, Base64.DEFAULT) : input.getBytes("UTF-8"); + return outBase64 ? Base64.encodeToString(cipher.doFinal(inBuf), Base64.DEFAULT) : new String(cipher.doFinal(inBuf), "UTF-8"); } catch (Exception e) { e.printStackTrace(); return ""; @@ -181,12 +205,12 @@ public class Global { return new Callback() { @Override public void onResponse(@NonNull Call call, @NonNull Response res) { - if (!executor.isShutdown()) executor.submit(() -> {complete.call(Connect.success(ctx, req, res));}); + submit(() -> complete.call(Connect.success(ctx, req, res))); } @Override public void onFailure(@NonNull Call call, @NonNull IOException e) { - if (!executor.isShutdown()) executor.submit(() -> {complete.call(Connect.error(ctx));}); + submit(() -> complete.call(Connect.error(ctx))); } }; } @@ -195,7 +219,7 @@ public class Global { timer.schedule(new TimerTask() { @Override public void run() { - if (!executor.isShutdown()) executor.submit(() -> {func.call();}); + submit(func::call); } }, delay); }