优化多jar及jar缓存命中的逻辑;

兼容无jar的纯采集json配置;
pull/144/head
jun 1 year ago
parent c6e37a6f04
commit c831eb185f
  1. 31
      app/src/main/java/com/github/catvod/crawler/JarLoader.java
  2. 16
      app/src/main/java/com/github/tvbox/osc/api/ApiConfig.java
  3. 4
      app/src/main/java/com/github/tvbox/osc/ui/fragment/UserFragment.java
  4. 2
      app/src/main/java/com/github/tvbox/osc/viewmodel/SourceViewModel.java

@ -48,16 +48,22 @@ public class JarLoader {
* @param cache
*/
public boolean load(String cache) {
spiders.clear();
recentJarKey = "main";
return loadClassLoader(cache, recentJarKey);
}
public void clear() {
spiders.clear();
proxyMethods.clear();
classLoaders.clear();
return loadClassLoader(cache, "main");
}
private boolean loadClassLoader(String jar, String key) {
if (classLoaders.containsKey(key)) return true;
final String TAG = "JarLoader";
if (classLoaders.containsKey(key)){
Log.i(TAG, "loadClassLoader jar缓存: " + key);
return true;
}
final File jarFile = new File(jar);
final AtomicBoolean success = new AtomicBoolean(false);
DexClassLoader classLoader;
@ -223,6 +229,7 @@ public class JarLoader {
private DexClassLoader loadJarInternal(String jar, String md5, String key) {
if (classLoaders.containsKey(key)){
Log.i("JarLoader", "loadJarInternal jar缓存: " + key);
return classLoaders.get(key);
}
File cache = new File(App.getInstance().getFilesDir().getAbsolutePath() + "/" + key + ".jar");
@ -260,10 +267,14 @@ public class JarLoader {
}
public Spider getSpider(String key, String cls, String ext, String jar) {
if (spiders.containsKey(key)) {
Log.i("JarLoader", "getSpider spider缓存: " + key);
return spiders.get(key);
}
String clsKey = cls.replace("csp_", "");
String jarUrl = "";
String jarMd5 = "";
String jarKey = "";
String jarKey;
if (jar.isEmpty()) {
jarKey = "main";
} else {
@ -273,17 +284,9 @@ public class JarLoader {
jarMd5 = urls.length > 1 ? urls[1].trim() : "";
}
recentJarKey = jarKey;
if (spiders.containsKey(key))
return spiders.get(key);
DexClassLoader classLoader = null;
assert jarKey != null;
if (jarKey.equals("main"))
classLoader = classLoaders.get("main");
else {
classLoader = loadJarInternal(jarUrl, jarMd5, jarKey);
}
if (classLoader == null)
return new SpiderNull();
DexClassLoader classLoader = jarKey.equals("main")? classLoaders.get("main"):loadJarInternal(jarUrl, jarMd5, jarKey);
if (classLoader == null) return new SpiderNull();
try {
Spider sp = (Spider) classLoader.loadClass("com.github.catvod.spider." + clsKey).newInstance();
sp.init(App.getInstance(), ext);

@ -72,23 +72,25 @@ public class ApiConfig {
private String spider = null;
public String wallpaper = "";
private SourceBean emptyHome = new SourceBean();
private final SourceBean emptyHome = new SourceBean();
private JarLoader jarLoader = new JarLoader();
private JsLoader jsLoader = new JsLoader();
private Gson gson;
private final JarLoader jarLoader = new JarLoader();
private final JsLoader jsLoader = new JsLoader();
private final Gson gson;
private String userAgent = "okhttp/3.15";
private final String userAgent = "okhttp/3.15";
private String requestAccept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9";
private final String requestAccept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9";
private String defaultLiveObjString="{\"lives\":[{\"name\":\"txt_m3u\",\"type\":0,\"url\":\"txt_m3u_url\"}]}";
private ApiConfig() {
jarLoader.clear();
sourceBeanList = new LinkedHashMap<>();
liveChannelGroupList = new ArrayList<>();
parseBeanList = new ArrayList<>();
searchSourceBeanList = new ArrayList<>();
gson = new Gson();
Hawk.put(HawkConfig.LIVE_GROUP_LIST,new JsonArray());
loadDefaultConfig();
}
@ -795,7 +797,7 @@ public class ApiConfig {
}
url ="http://127.0.0.1:9978/proxy?do=live&type=txt&ext="+url;
}
LOG.i("echo-url:"+url);
LOG.i("echo-live-proxy-url:"+url);
}else {
return;
}

@ -333,8 +333,8 @@ public class UserFragment extends BaseLazyFragment implements View.OnClickListen
FastClickCheckUtil.check(v);
if (v.getId() == R.id.tvLive) {
if(Hawk.get(HawkConfig.LIVE_API_URL,Hawk.get(HawkConfig.API_URL,"")).isEmpty()){
Toast.makeText(mContext, "直播配置未设置", Toast.LENGTH_SHORT).show();
if(Hawk.get(HawkConfig.LIVE_GROUP_LIST,new JsonArray()).isEmpty()){
Toast.makeText(mContext, "直播源为空", Toast.LENGTH_SHORT).show();
}else {
jumpActivity(LivePlayActivity.class);
}

@ -89,7 +89,7 @@ public class SourceViewModel extends ViewModel {
public static final ExecutorService spThreadPool = Executors.newSingleThreadExecutor();
//homeContent缓存,最多存储5个sourceKey的AbsSortXml对象
private static Map<String, AbsSortXml> sortCache = new LinkedHashMap<String, AbsSortXml>(5, 0.75f, true) {
private static final Map<String, AbsSortXml> sortCache = new LinkedHashMap<String, AbsSortXml>(5, 0.75f, true) {
@Override
protected boolean removeEldestEntry(Map.Entry<String, AbsSortXml> eldest) {
return size() > 5;

Loading…
Cancel
Save