fix js模块加载问题;

解决部分drpy遗留问题;
main
21561 1 year ago
parent 49b6cc7e0c
commit 826550e1f1
  1. 3
      .gitignore
  2. 20
      app/src/main/java/com/github/tvbox/osc/util/FileUtils.java
  3. 2
      app/src/main/java/com/github/tvbox/osc/util/js/Connect.java
  4. 16
      app/src/main/java/com/github/tvbox/osc/util/js/JsSpider.java
  5. 2
      gradle.properties

3
.gitignore vendored

@ -95,3 +95,6 @@ lint/tmp/
/LTDecodeNew3.exe
.idea/
*.hprof
output-metadata.json

@ -259,6 +259,7 @@ public class FileUtils {
//JS 工具方法
private static final Pattern URL_JOIN = Pattern.compile("^http.*\\.(js|txt|json)", Pattern.MULTILINE | Pattern.CASE_INSENSITIVE);
public static String loadModule(String name) {
String rel = null;
try {
if (name.contains("gbk.js")) {
name = "gbk.js";
@ -272,38 +273,37 @@ public class FileUtils {
if (m.find()) {
if (!Hawk.get(HawkConfig.DEBUG_OPEN, false)) {
String cache = getCache(MD5.encode(name));
rel= cache;
if (StringUtils.isEmpty(cache)) {
String netStr = get(name);
if (!TextUtils.isEmpty(netStr)) {
setCache(604800, MD5.encode(name), netStr);
}
return netStr;
rel= netStr;
}
return cache;
} else {
return get(name);
rel= get(name);
}
} else if (name.startsWith("assets://")) {
return getAsOpen(name.substring(9));
rel= getAsOpen(name.substring(9));
} else if (isAsFile(name, "js/lib")) {
return getAsOpen("js/lib/" + name);
rel=getAsOpen("js/lib/" + name);
} else if (name.startsWith("file://")) {
return get(ControlManager.get()
rel=get(ControlManager.get()
.getAddress(true) + "file/" + name.replace("file:///", "")
.replace("file://", ""));
} else if (name.startsWith("clan://localhost/")) {
return get(ControlManager.get()
rel=get(ControlManager.get()
.getAddress(true) + "file/" + name.replace("clan://localhost/", ""));
} else if (name.startsWith("clan://")) {
String substring = name.substring(7);
int indexOf = substring.indexOf(47);
return get("http://" + substring.substring(0, indexOf) + "/file/" + substring.substring(indexOf + 1));
rel=get("http://" + substring.substring(0, indexOf) + "/file/" + substring.substring(indexOf + 1));
}
} catch (Exception e) {
e.printStackTrace();
return name;
}
return name;
return rel;
}

@ -46,7 +46,7 @@ public class Connect {
for (byte aByte : res.body().bytes()) array.push((int) aByte);
jsObject.set("content", array);
}
if (req.getBuffer() == 2) jsObject.set("content", Base64.encodeToString(res.body().bytes(), Base64.DEFAULT));
if (req.getBuffer() == 2) jsObject.set("content", Base64.encodeToString(res.body().bytes(), Base64.DEFAULT | Base64.NO_WRAP));
return jsObject;
} catch (Exception e) {
return error(ctx);

@ -244,7 +244,10 @@ public class JsSpider extends Spider {
@Override
public byte[] getModuleBytecode(String moduleName) {
String ss = FileUtils.loadModule(moduleName);
if (TextUtils.isEmpty(ss)) {return null;}
if (TextUtils.isEmpty(ss)) {
LOG.i("echo-getModuleBytecode empty :"+ moduleName);
return ctx.compileModule("", moduleName);
}
if(ss.startsWith("//DRPY")){
return Base64.decode(ss.replace("//DRPY",""), Base64.URL_SAFE);
} else if(ss.startsWith("//bb")){
@ -350,6 +353,17 @@ public class JsSpider extends Spider {
result[1] = array.opt(1);
result[2] = getStream(array.opt(2));
result[3] = headerAvailable ? getHeader(array.opt(3)) : null;
if (array.length() > 4) {
try {
if ( array.optInt(4) == 1) {
String content = array.optString(2);
if (content.contains("base64,")) content = content.substring(content.indexOf("base64,") + 7);
result[2] = new ByteArrayInputStream(Base64.decode(content, Base64.DEFAULT));
}
} catch (Exception e) {
e.printStackTrace();
}
}
return result;
}

@ -18,4 +18,4 @@ android.useAndroidX=true
android.enableJetifier=true
IsDebug=true
#build on off
#org.gradle.jvmargs=-Xmx2048m --add-opens java.base/java.io=ALL-UNNAMED
org.gradle.jvmargs=-Xmx2048m --add-opens java.base/java.io=ALL-UNNAMED
Loading…
Cancel
Save