diff --git a/app/src/main/java/com/github/catvod/crawler/JsLoader.java b/app/src/main/java/com/github/catvod/crawler/JsLoader.java index b29a680c..3580285a 100644 --- a/app/src/main/java/com/github/catvod/crawler/JsLoader.java +++ b/app/src/main/java/com/github/catvod/crawler/JsLoader.java @@ -24,8 +24,8 @@ import dalvik.system.DexClassLoader; import okhttp3.Response; public class JsLoader { - private static ConcurrentHashMap spiders = new ConcurrentHashMap<>(); - private static ConcurrentHashMap> classes = new ConcurrentHashMap<>(); + private static final ConcurrentHashMap spiders = new ConcurrentHashMap<>(); + private static final ConcurrentHashMap> classes = new ConcurrentHashMap<>(); //当前的Js爬虫key private volatile String recentKey = ""; @@ -81,8 +81,10 @@ public class JsLoader { } private Class loadJarInternal(String jar, String md5, String key) { - if (classes.containsKey(key)) + if (classes.containsKey(key)){ + Log.i("JSLoader", "echo-loadJarInternal cached"); return classes.get(key); + } File cache = new File(App.getInstance().getFilesDir().getAbsolutePath() + "/csp/" + key + ".jar"); if (!md5.isEmpty()) { if (cache.exists() && MD5.getFileMd5(cache).equalsIgnoreCase(md5)) { diff --git a/app/src/main/java/com/github/tvbox/osc/util/FileUtils.java b/app/src/main/java/com/github/tvbox/osc/util/FileUtils.java index c68eadb1..fe8ebbe7 100644 --- a/app/src/main/java/com/github/tvbox/osc/util/FileUtils.java +++ b/app/src/main/java/com/github/tvbox/osc/util/FileUtils.java @@ -23,8 +23,12 @@ import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; +import java.util.Arrays; +import java.util.Collections; import java.util.HashMap; +import java.util.HashSet; import java.util.Map; +import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -253,6 +257,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) { try { if (name.contains("gbk.js")) { @@ -300,17 +305,23 @@ public class FileUtils { return name; } - public static boolean isAsFile(String name, String path) { - try { - for (String f_name : App.getInstance().getAssets().list(path)) { - if (f_name.equals(name.trim())) { - return true; - } + + private static final Map> cachedDirFiles = new HashMap<>(); + public static boolean isAsFile(String name,String dir) { + // 1. 先从缓存里取目录列表 + Set files = cachedDirFiles.get(dir); + if (files == null) { + LOG.i("echo-读取AssetsList"); + try { + String[] list = App.getInstance().getAssets().list(dir); + files = new HashSet<>(Arrays.asList(list)); + } catch (IOException e) { + files = Collections.emptySet(); } - } catch (Exception e) { - e.printStackTrace(); + cachedDirFiles.put(dir, files); } - return false; + // 2. 内存查找 + return files.contains(name.trim()); } public static String getAsOpen(String name) { @@ -384,7 +395,6 @@ public class FileUtils { return OkHttpUtil.string(str,headerMap); } - private static final Pattern URL_JOIN = Pattern.compile("^http.*\\.(js|txt|json|m3u)", Pattern.MULTILINE | Pattern.CASE_INSENSITIVE); public static File open(String str) { return new File(getExternalCachePath() + "/qjscache_" + str + ".js"); } diff --git a/app/src/main/java/com/github/tvbox/osc/util/M3u8.java b/app/src/main/java/com/github/tvbox/osc/util/M3u8.java index 89c22524..1e77de48 100644 --- a/app/src/main/java/com/github/tvbox/osc/util/M3u8.java +++ b/app/src/main/java/com/github/tvbox/osc/util/M3u8.java @@ -32,12 +32,16 @@ public class M3u8 { } public static String purify(String tsUrlPre, String m3u8content) { + long start = System.currentTimeMillis(); currentAdCount = 0; if (null == m3u8content || m3u8content.length() == 0) return null; if (!m3u8content.startsWith("#EXTM3U")) return null; String result = removeMinorityUrl(tsUrlPre, m3u8content); if (result != null) return result; - return get(tsUrlPre, m3u8content); + result = get(tsUrlPre, m3u8content); + long cost = System.currentTimeMillis() - start; + LOG.i("echo-fixAdM3u8Ai 耗时:" + cost + "ms"); + return result; } private static double maxPercent(HashMap preUrlMap) { @@ -270,26 +274,28 @@ public class M3u8 { String group = m1.group(); String groupCleaned = group.replace(TAG_ENDLIST, ""); Matcher m2 = REGEX_MEDIA_DURATION.matcher(group); - BigDecimal ft = BigDecimal.ZERO; - BigDecimal lt = BigDecimal.ZERO; + BigDecimal ft = BigDecimal.ZERO,lt = BigDecimal.ZERO,t = BigDecimal.ZERO; int tCount = 0; while (m2.find()) { if (ft.equals(BigDecimal.ZERO))ft = new BigDecimal(m2.group(1)); lt = new BigDecimal(m2.group(1)); + t = t.add(lt); tCount+=1; } - String ftStr = ft.toString(); - String ltStr = lt.toString(); + + String ftStr = ft.toString(),ltStr = lt.toString(),tStr = t.toString(); for (String ad : ads) { if (ad.startsWith("-")) { String adClean = ad.substring(1); + //匹配最后一条切片 if (ltStr.startsWith(adClean)) { needRemoveAd.add(groupCleaned); currentAdCount+=tCount; break; } } else { - if (ftStr.startsWith(ad)) { + //匹配第一条切片或广告切片总时长 + if (ftStr.startsWith(ad) || tStr.startsWith(ad)) { needRemoveAd.add(groupCleaned); currentAdCount+=tCount; break; diff --git a/app/src/main/java/com/github/tvbox/osc/util/js/JsSpider.java b/app/src/main/java/com/github/tvbox/osc/util/js/JsSpider.java index cb82c8f8..ef052fcf 100644 --- a/app/src/main/java/com/github/tvbox/osc/util/js/JsSpider.java +++ b/app/src/main/java/com/github/tvbox/osc/util/js/JsSpider.java @@ -162,7 +162,6 @@ public class JsSpider extends Spider { @Override public boolean isVideoFormat(String url) { try { - return (Boolean) call("isVideo", url); }catch (Exception e){ return false; diff --git a/gradle.properties b/gradle.properties index 848e153d..306a3be4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -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 \ No newline at end of file +org.gradle.jvmargs=-Xmx2048m --add-opens java.base/java.io=ALL-UNNAMED \ No newline at end of file