Update quickjs

pull/142/head
FongMi 3 years ago
parent 5ccf98cdff
commit 3e420eea3f
  1. 2
      quickjs/build.gradle
  2. 18
      quickjs/src/main/java/com/fongmi/quickjs/Provider.java
  3. 33
      quickjs/src/main/java/com/fongmi/quickjs/crawler/Spider.java
  4. 38
      quickjs/src/main/java/com/fongmi/quickjs/method/Global.java

@ -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'
}

@ -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;
}

@ -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;
}

@ -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);
}

Loading…
Cancel
Save