diff --git a/app/src/main/java/com/fongmi/android/tv/api/Decoder.java b/app/src/main/java/com/fongmi/android/tv/api/Decoder.java index e1dd5120d..1498e8c52 100644 --- a/app/src/main/java/com/fongmi/android/tv/api/Decoder.java +++ b/app/src/main/java/com/fongmi/android/tv/api/Decoder.java @@ -23,7 +23,7 @@ public class Decoder { private static final Pattern JS_URI = Pattern.compile("\"(\\.|\\.\\.)/(.?|.+?)\\.js\\?(.?|.+?)\""); public static String getJson(String url) throws Exception { - try (Response res = OkHttp.newCall(url).execute()) { + try (Response res = OkHttp.newCall(url, "config").execute()) { HttpUrl httpUrl = res.request().url(); int size = HttpUrl.parse(url).querySize(); if (httpUrl.querySize() == size) url = httpUrl.toString(); diff --git a/app/src/main/java/com/fongmi/android/tv/api/config/LiveConfig.java b/app/src/main/java/com/fongmi/android/tv/api/config/LiveConfig.java index 52726b880..ed2afa3e0 100644 --- a/app/src/main/java/com/fongmi/android/tv/api/config/LiveConfig.java +++ b/app/src/main/java/com/fongmi/android/tv/api/config/LiveConfig.java @@ -29,6 +29,7 @@ import com.github.catvod.utils.Json; import com.google.gson.JsonObject; import java.io.File; +import java.io.InterruptedIOException; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -111,6 +112,10 @@ public class LiveConfig { return this; } + private boolean isCanceled(Throwable e) { + return "Canceled".equals(e.getMessage()) || e instanceof InterruptedException || e instanceof InterruptedIOException; + } + public void load() { load(new Callback()); } @@ -124,11 +129,13 @@ public class LiveConfig { private void loadConfig(Callback callback) { try { Server.get().start(); + OkHttp.cancel("config"); String text = Decoder.getJson(UrlUtil.convert(config.getUrl())); if (!Json.isObj(text)) clear().parseText(text, callback); else checkJson(Json.parse(text).getAsJsonObject(), callback); config.update(); } catch (Throwable e) { + if (isCanceled(e)) return; if (TextUtils.isEmpty(config.getUrl())) App.post(() -> callback.error("")); else App.post(() -> callback.error(Notify.getError(R.string.error_config_get, e))); e.printStackTrace(); diff --git a/app/src/main/java/com/fongmi/android/tv/api/config/VodConfig.java b/app/src/main/java/com/fongmi/android/tv/api/config/VodConfig.java index e924cc44c..7bf672302 100644 --- a/app/src/main/java/com/fongmi/android/tv/api/config/VodConfig.java +++ b/app/src/main/java/com/fongmi/android/tv/api/config/VodConfig.java @@ -22,6 +22,7 @@ import com.github.catvod.net.OkHttp; import com.github.catvod.utils.Json; import com.google.gson.JsonObject; +import java.io.InterruptedIOException; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -116,6 +117,10 @@ public class VodConfig { return this; } + private boolean isCanceled(Throwable e) { + return "Canceled".equals(e.getMessage()) || e instanceof InterruptedException || e instanceof InterruptedIOException; + } + public void load(Callback callback) { if (future != null && !future.isDone()) future.cancel(true); future = App.submit(() -> loadConfig(callback)); @@ -125,11 +130,12 @@ public class VodConfig { private void loadConfig(Callback callback) { try { Server.get().start(); + OkHttp.cancel("config"); String json = Decoder.getJson(UrlUtil.convert(config.getUrl())); - JsonObject object = Json.parse(json).getAsJsonObject(); - checkJson(object, callback); + checkJson(Json.parse(json).getAsJsonObject(), callback); config.update(); } catch (Throwable e) { + if (isCanceled(e)) return; if (TextUtils.isEmpty(config.getUrl())) App.post(() -> callback.error("")); else App.post(() -> callback.error(Notify.getError(R.string.error_config_get, e))); e.printStackTrace();