Add timeout for vod

pull/123/head
FongMi 3 years ago
parent 49ef77b565
commit ae09e85d72
  1. 16
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java
  2. 14
      app/src/main/java/com/fongmi/android/tv/ui/custom/CustomWebView.java

@ -100,6 +100,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
private Runnable mR1;
private Runnable mR2;
private Runnable mR3;
private Runnable mR4;
public static void start(Activity activity, String id, String name) {
start(activity, ApiConfig.get().getHome().getKey(), id, name);
@ -185,6 +186,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
mR1 = this::hideControl;
mR2 = this::hideCenter;
mR3 = this::setTraffic;
mR4 = this::onError;
setRecyclerView();
setVideoView();
setViewModel();
@ -317,6 +319,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
mViewModel.playerContent(getKey(), getVodFlag().getFlag(), item.getUrl());
Clock.get().setCallback(null);
updateHistory(item, replay);
setR4Callback();
showProgress();
hideError();
}
@ -642,6 +645,11 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
App.post(mR1, 5000);
}
private void setR4Callback() {
App.removeCallbacks(mR4);
App.post(mR4, 15000);
}
private void getPart(String source) {
OkHttp.newCall("http://api.pullword.com/get.php?source=" + URLEncoder.encode(source.trim()) + "&param1=0&param2=0&json=1").enqueue(new Callback() {
@Override
@ -751,12 +759,14 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
mPlayers.reset();
setDefaultTrack();
setTrackVisible(true);
App.removeCallbacks(mR4);
mBinding.widget.size.setText(mPlayers.getSizeText());
break;
case Player.STATE_ENDED:
checkNext();
break;
default:
App.removeCallbacks(mR4);
if (!event.isRetry() || mPlayers.addRetry() > 3) onError(event.getMsg());
else getPlayer(false);
break;
@ -781,6 +791,10 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
}
}
private void onError() {
onError("");
}
private void onError(String msg) {
int position = mBinding.flag.getSelectedPosition();
if (position == mFlagAdapter.size() - 1) {
@ -994,6 +1008,6 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
protected void onDestroy() {
super.onDestroy();
mPlayers.release();
App.removeCallbacks(mR1, mR2, mR3);
App.removeCallbacks(mR1, mR2, mR3, mR4);
}
}

@ -35,7 +35,6 @@ public class CustomWebView extends WebView {
private List<String> keys;
private String key;
private String ads;
private int retry;
public static CustomWebView create(@NonNull Context context) {
return new CustomWebView(context);
@ -86,13 +85,13 @@ public class CustomWebView extends WebView {
String url = request.getUrl().toString();
String host = request.getUrl().getHost();
if (ads.contains(host)) return empty;
App.post(mTimer, 15 * 1000);
Map<String, String> headers = request.getRequestHeaders();
if (isVideoFormat(url, headers)) post(headers, url);
return super.shouldInterceptRequest(view, request);
}
@Override
@SuppressLint("WebViewClientOnReceivedSslError")
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
handler.proceed();
}
@ -111,21 +110,11 @@ public class CustomWebView extends WebView {
return Utils.isVideoFormat(url, headers);
}
private final Runnable mTimer = new Runnable() {
@Override
public void run() {
if (retry > 3) return;
if (retry++ == 3) stop(true);
else reload();
}
};
private void post(Map<String, String> headers, String url) {
Map<String, String> news = new HashMap<>();
String cookie = CookieManager.getInstance().getCookie(url);
if (!TextUtils.isEmpty(cookie)) news.put("cookie", cookie);
for (String key : headers.keySet()) if (keys.contains(key.toLowerCase())) news.put(key, headers.get(key));
App.removeCallbacks(mTimer);
App.post(() -> {
onSuccess(news, url);
stop(false);
@ -135,7 +124,6 @@ public class CustomWebView extends WebView {
public void stop(boolean error) {
stopLoading();
loadUrl("about:blank");
App.removeCallbacks(mTimer);
if (error) App.post(this::onError);
else callback = null;
}

Loading…
Cancel
Save