pull/137/head
FongMi 3 years ago
parent 407bc2692c
commit c4832c72e5
  1. 2
      app/src/main/java/com/fongmi/android/tv/api/ApiConfig.java
  2. 36
      app/src/main/java/com/fongmi/android/tv/api/JarLoader.java
  3. 6
      app/src/main/java/com/fongmi/android/tv/bean/Vod.java
  4. 1
      app/src/main/java/com/fongmi/android/tv/utils/Utils.java

@ -120,7 +120,7 @@ public class ApiConfig {
private void parseConfig(JsonObject object, Callback callback) {
try {
parseJson(object);
loader.parseJar("", Json.safeString(object, "spider", ""));
loader.parseJar(Json.safeString(object, "spider", ""));
handler.post(() -> callback.success(object.toString()));
} catch (Exception e) {
e.printStackTrace();

@ -22,60 +22,62 @@ import dalvik.system.DexClassLoader;
public class JarLoader {
private final ConcurrentHashMap<String, DexClassLoader> loaders;
private final ConcurrentHashMap<String, Spider> spiders;
private final ConcurrentHashMap<String, Method> methods;
private final ConcurrentHashMap<String, Spider> spiders;
private String baseJar;
private String current;
public JarLoader() {
this.loaders = new ConcurrentHashMap<>();
this.spiders = new ConcurrentHashMap<>();
this.methods = new ConcurrentHashMap<>();
this.spiders = new ConcurrentHashMap<>();
}
public void clear() {
this.loaders.clear();
this.spiders.clear();
this.methods.clear();
this.spiders.clear();
}
public void load(String key, File file) {
public void load(String jar, File file) {
try {
DexClassLoader loader = new DexClassLoader(file.getAbsolutePath(), FileUtil.getCachePath(), null, App.get().getClassLoader());
Class<?> classInit = loader.loadClass("com.github.catvod.spider.Init");
Method method = classInit.getMethod("init", Context.class);
method.invoke(classInit, App.get());
loaders.put(key, loader);
if (loaders.isEmpty()) baseJar = jar;
loaders.put(jar, loader);
Class<?> classProxy = loader.loadClass("com.github.catvod.spider.Proxy");
methods.put(key, classProxy.getMethod("proxy", Map.class));
methods.put(jar, classProxy.getMethod("proxy", Map.class));
} catch (Exception ignored) {
ignored.printStackTrace();
}
}
public void parseJar(String key, String jar) throws Exception {
public void parseJar(String jar) throws Exception {
String[] texts = jar.split(";md5;");
String md5 = jar.startsWith("http") && texts.length > 1 ? texts[1].trim() : "";
jar = texts[0];
if (md5.length() > 0 && FileUtil.equals(jar, md5)) {
load(key, FileUtil.getJar(jar));
load(jar, FileUtil.getJar(jar));
} else if (jar.startsWith("http")) {
load(key, FileUtil.write(FileUtil.getJar(jar), OKHttp.newCall(jar).execute().body().bytes()));
load(jar, FileUtil.write(FileUtil.getJar(jar), OKHttp.newCall(jar).execute().body().bytes()));
} else if (jar.startsWith("file")) {
load(key, FileUtil.getLocal(jar));
load(jar, FileUtil.getLocal(jar));
} else if (!jar.isEmpty()) {
parseJar(key, FileUtil.convert(jar));
parseJar(FileUtil.convert(jar));
}
}
public Spider getSpider(String key, String api, String ext, String jar) {
try {
current = FileUtil.getMD5(jar);
current = jar.isEmpty() ? baseJar : jar;
if (spiders.containsKey(current + key)) return spiders.get(current + key);
if (!loaders.containsKey(current)) parseJar(current);
api = api.replace("csp_", "");
if (spiders.containsKey(key)) return spiders.get(key);
if (!loaders.containsKey(current)) parseJar(current, jar);
Spider spider = (Spider) loaders.get(current).loadClass("com.github.catvod.spider." + api).newInstance();
spider.init(App.get(), ext);
spiders.put(key, spider);
spiders.put(current + key, spider);
return spider;
} catch (Exception e) {
e.printStackTrace();
@ -87,7 +89,7 @@ public class JarLoader {
try {
String clsKey = "Json" + key;
String hotClass = "com.github.catvod.parser." + clsKey;
Class<?> jsonParserCls = loaders.get("").loadClass(hotClass);
Class<?> jsonParserCls = loaders.get(baseJar).loadClass(hotClass);
Method mth = jsonParserCls.getMethod("parse", LinkedHashMap.class, String.class);
return (JSONObject) mth.invoke(null, jxs, url);
} catch (Exception e) {
@ -100,7 +102,7 @@ public class JarLoader {
try {
String clsKey = "Mix" + key;
String hotClass = "com.github.catvod.parser." + clsKey;
Class<?> jsonParserCls = loaders.get("").loadClass(hotClass);
Class<?> jsonParserCls = loaders.get(baseJar).loadClass(hotClass);
Method mth = jsonParserCls.getMethod("parse", LinkedHashMap.class, String.class, String.class, String.class);
return (JSONObject) mth.invoke(null, jxs, name, flag, url);
} catch (Exception e) {

@ -298,9 +298,8 @@ public class Vod {
return activated;
}
public Episode deactivated() {
public void deactivated() {
this.activated = false;
return this;
}
private void setActivated(Episode item) {
@ -311,7 +310,8 @@ public class Vod {
if (name.equalsIgnoreCase(getName())) return true;
if (name.toLowerCase().contains(getName().toLowerCase())) return true;
if (getName().toLowerCase().contains(name.toLowerCase())) return true;
return number != -1 && number == getNumber();
if (number != -1 && number == getNumber()) return true;
return false;
}
@Override

@ -65,6 +65,7 @@ public class Utils {
public static int getDigit(String text) {
try {
if (text.contains(".")) text = text.substring(0, text.lastIndexOf("."));
return Integer.parseInt(text.replaceAll("\\D+", ""));
} catch (Exception e) {
return -1;

Loading…
Cancel
Save