fix部分爬虫导致的播放器崩溃

pull/139/head
于俊 10 months ago
parent fb1ac92629
commit f1063f2354
  1. 2
      app/src/main/java/com/github/tvbox/osc/util/OkGoHelper.java
  2. 51
      app/src/main/java/com/github/tvbox/osc/viewmodel/SourceViewModel.java
  3. 4
      gradle.properties

@ -51,7 +51,7 @@ public class OkGoHelper {
public static final long DEFAULT_MILLISECONDS = 6500; //默认的超时时间
// 内置doh json
public static final String dnsConfigJson = "["
private static final String dnsConfigJson = "["
+ "{\"name\": \"腾讯\", \"url\": \"https://doh.pub/dns-query\"},"
+ "{\"name\": \"阿里\", \"url\": \"https://dns.alidns.com/dns-query\"},"
+ "{\"name\": \"360\", \"url\": \"https://doh.360.cn/dns-query\"}"

@ -715,20 +715,47 @@ public class SourceViewModel extends ViewModel {
spThreadPool.execute(new Runnable() {
@Override
public void run() {
Spider sp = ApiConfig.get().getCSP(sourceBean);
if(TextUtils.isEmpty(url))return;
String json = sp.playerContent(playFlag, url, ApiConfig.get().getVipParseFlags());
ExecutorService executor = Executors.newSingleThreadExecutor();
Future<String> future = executor.submit(new Callable<String>() {
@Override
public String call() throws Exception {
Spider sp = ApiConfig.get().getCSP(sourceBean);
if (TextUtils.isEmpty(url)) return "";
try {
return sp.playerContent(playFlag, url, ApiConfig.get().getVipParseFlags());
} catch (Exception e) {
LOG.i("echo--getPlay--error: " + e.getMessage());
return "";
}
}
});
try {
JSONObject result = new JSONObject(json);
result.put("key", url);
result.put("proKey", progressKey);
result.put("subtKey", subtitleKey);
if (!result.has("flag"))
result.put("flag", playFlag);
playResult.postValue(result);
} catch (Throwable th) {
th.printStackTrace();
String json = future.get(10, TimeUnit.SECONDS);
LOG.i("echo--getPlay--" + json);
// 处理返回的 JSON
if (!TextUtils.isEmpty(json)) {
JSONObject result = new JSONObject(json);
result.put("key", url);
result.put("proKey", progressKey);
result.put("subtKey", subtitleKey);
if (!result.has("flag"))
result.put("flag", playFlag);
playResult.postValue(result);
} else {
playResult.postValue(null);
}
} catch (TimeoutException e) {
// 如果超时了,处理超时逻辑
LOG.i("echo--getPlay--timeout");
future.cancel(true);
playResult.postValue(null);
} catch (Exception e) {
// 捕获其他异常
LOG.i("echo--getPlay--error: " + e.getMessage());
playResult.postValue(null);
} finally {
executor.shutdown();
}
}
});

@ -6,7 +6,7 @@
# http://www.gradle.org/docs/current/userguide/build_environment.html
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
org.gradle.jvmargs=-Xmx2048m
#org.gradle.jvmargs=-Xmx2048m
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
@ -18,4 +18,4 @@ android.useAndroidX=true
# Automatically convert third-party libraries to use AndroidX
android.enableJetifier=true
IsDebug=true
#org.gradle.jvmargs=--add-opens java.base/java.io=ALL-UNNAMED
org.gradle.jvmargs=--add-opens java.base/java.io=ALL-UNNAMED

Loading…
Cancel
Save