fongmi
jhengazuki 1 month ago
parent 8c9a9f03a6
commit ba90484dbb
  1. 28
      app/src/main/java/com/fongmi/android/tv/model/SiteViewModel.java

@ -34,6 +34,7 @@ import java.util.HashMap;
import java.util.concurrent.Callable; import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import okhttp3.Call; import okhttp3.Call;
@ -41,14 +42,16 @@ import okhttp3.Response;
public class SiteViewModel extends ViewModel { public class SiteViewModel extends ViewModel {
private final ExecutorService executor;
public MutableLiveData<Episode> episode; public MutableLiveData<Episode> episode;
public MutableLiveData<Result> result; public MutableLiveData<Result> result;
public MutableLiveData<Result> player; public MutableLiveData<Result> player;
public MutableLiveData<Result> search; public MutableLiveData<Result> search;
public MutableLiveData<Result> action; public MutableLiveData<Result> action;
private ExecutorService executor; private Future<Result> future;
public SiteViewModel() { public SiteViewModel() {
executor = Executors.newFixedThreadPool(2);
episode = new MutableLiveData<>(); episode = new MutableLiveData<>();
result = new MutableLiveData<>(); result = new MutableLiveData<>();
player = new MutableLiveData<>(); player = new MutableLiveData<>();
@ -91,12 +94,12 @@ public class SiteViewModel extends ViewModel {
SpiderDebug.log(homeContent); SpiderDebug.log(homeContent);
return Result.fromJson(homeContent); return Result.fromJson(homeContent);
} else { } else {
Response response = OkHttp.newCall(site.getApi(), site.getHeaders()).execute(); try (Response response = OkHttp.newCall(site.getApi(), site.getHeaders()).execute()) {
String homeContent = response.body().string(); String homeContent = response.body().string();
SpiderDebug.log(homeContent); SpiderDebug.log(homeContent);
response.close();
return fetchPic(site, Result.fromType(site.getType(), homeContent)); return fetchPic(site, Result.fromType(site.getType(), homeContent));
} }
}
}); });
} }
@ -256,10 +259,9 @@ public class SiteViewModel extends ViewModel {
if (!site.getExt().isEmpty()) params.put("extend", site.getExt()); if (!site.getExt().isEmpty()) params.put("extend", site.getExt());
Call get = OkHttp.newCall(site.getApi(), site.getHeaders(), params); Call get = OkHttp.newCall(site.getApi(), site.getHeaders(), params);
Call post = OkHttp.newCall(site.getApi(), site.getHeaders(), OkHttp.toBody(params)); Call post = OkHttp.newCall(site.getApi(), site.getHeaders(), OkHttp.toBody(params));
Response response = (site.getExt().length() <= 1000 ? get : post).execute(); try (Response response = (site.getExt().length() <= 1000 ? get : post).execute()) {
String result = response.body().string(); return response.body().string();
response.close(); }
return result;
} }
private Result fetchPic(Site site, Result result) throws Exception { private Result fetchPic(Site site, Result result) throws Exception {
@ -284,14 +286,15 @@ public class SiteViewModel extends ViewModel {
} }
private void execute(MutableLiveData<Result> result, Callable<Result> callable) { private void execute(MutableLiveData<Result> result, Callable<Result> callable) {
if (executor != null) executor.shutdownNow(); if (future != null && !future.isDone()) future.cancel(true);
executor = Executors.newFixedThreadPool(2); future = executor.submit(callable);
executor.execute(() -> { executor.execute(() -> {
try { try {
if (Thread.interrupted()) return; Result taskResult = future.get(Constant.TIMEOUT_VOD, TimeUnit.MILLISECONDS);
result.postValue(executor.submit(callable).get(Constant.TIMEOUT_VOD, TimeUnit.MILLISECONDS)); if (!future.isCancelled()) result.postValue(taskResult);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
} catch (Throwable e) { } catch (Throwable e) {
if (e instanceof InterruptedException || Thread.interrupted()) return;
if (e.getCause() instanceof ExtractException) result.postValue(Result.error(e.getCause().getMessage())); if (e.getCause() instanceof ExtractException) result.postValue(Result.error(e.getCause().getMessage()));
else result.postValue(Result.empty()); else result.postValue(Result.empty());
e.printStackTrace(); e.printStackTrace();
@ -302,5 +305,6 @@ public class SiteViewModel extends ViewModel {
@Override @Override
protected void onCleared() { protected void onCleared() {
if (executor != null) executor.shutdownNow(); if (executor != null) executor.shutdownNow();
super.onCleared();
} }
} }

Loading…
Cancel
Save