diff --git a/app/src/main/java/com/fongmi/android/tv/api/ApiConfig.java b/app/src/main/java/com/fongmi/android/tv/api/ApiConfig.java index b04fe6cf4..65e84ed16 100644 --- a/app/src/main/java/com/fongmi/android/tv/api/ApiConfig.java +++ b/app/src/main/java/com/fongmi/android/tv/api/ApiConfig.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(); diff --git a/app/src/main/java/com/fongmi/android/tv/api/JarLoader.java b/app/src/main/java/com/fongmi/android/tv/api/JarLoader.java index dd5c5cd17..8ba131443 100644 --- a/app/src/main/java/com/fongmi/android/tv/api/JarLoader.java +++ b/app/src/main/java/com/fongmi/android/tv/api/JarLoader.java @@ -22,60 +22,62 @@ import dalvik.system.DexClassLoader; public class JarLoader { private final ConcurrentHashMap loaders; - private final ConcurrentHashMap spiders; private final ConcurrentHashMap methods; + private final ConcurrentHashMap 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) { diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Vod.java b/app/src/main/java/com/fongmi/android/tv/bean/Vod.java index 63f0a5a19..567e17cb3 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Vod.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Vod.java @@ -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 diff --git a/app/src/main/java/com/fongmi/android/tv/utils/Utils.java b/app/src/main/java/com/fongmi/android/tv/utils/Utils.java index cad671685..2353731b9 100644 --- a/app/src/main/java/com/fongmi/android/tv/utils/Utils.java +++ b/app/src/main/java/com/fongmi/android/tv/utils/Utils.java @@ -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;