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) { private void parseConfig(JsonObject object, Callback callback) {
try { try {
parseJson(object); parseJson(object);
loader.parseJar("", Json.safeString(object, "spider", "")); loader.parseJar(Json.safeString(object, "spider", ""));
handler.post(() -> callback.success(object.toString())); handler.post(() -> callback.success(object.toString()));
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();

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

@ -298,9 +298,8 @@ public class Vod {
return activated; return activated;
} }
public Episode deactivated() { public void deactivated() {
this.activated = false; this.activated = false;
return this;
} }
private void setActivated(Episode item) { private void setActivated(Episode item) {
@ -311,7 +310,8 @@ public class Vod {
if (name.equalsIgnoreCase(getName())) return true; if (name.equalsIgnoreCase(getName())) return true;
if (name.toLowerCase().contains(getName().toLowerCase())) return true; if (name.toLowerCase().contains(getName().toLowerCase())) return true;
if (getName().toLowerCase().contains(name.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 @Override

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

Loading…
Cancel
Save