Add cancel check

release
jhengazuji 6 months ago
parent 0b3b93cc37
commit 7ca8798a8c
  1. 2
      app/src/main/java/com/fongmi/android/tv/api/Decoder.java
  2. 7
      app/src/main/java/com/fongmi/android/tv/api/config/LiveConfig.java
  3. 10
      app/src/main/java/com/fongmi/android/tv/api/config/VodConfig.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();

@ -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();

@ -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();

Loading…
Cancel
Save