diff --git a/app/src/main/java/com/github/tvbox/osc/api/ApiConfig.java b/app/src/main/java/com/github/tvbox/osc/api/ApiConfig.java index 4bb927d8..dd063a8b 100644 --- a/app/src/main/java/com/github/tvbox/osc/api/ApiConfig.java +++ b/app/src/main/java/com/github/tvbox/osc/api/ApiConfig.java @@ -256,7 +256,11 @@ public class ApiConfig { sb.setQuickSearch(DefaultConfig.safeJsonInt(obj, "quickSearch", 1)); sb.setFilterable(DefaultConfig.safeJsonInt(obj, "filterable", 1)); sb.setPlayerUrl(DefaultConfig.safeJsonString(obj, "playUrl", "")); - sb.setExt(DefaultConfig.safeJsonString(obj, "ext", "")); + if(obj.has("ext") && (obj.get("ext").isJsonArray() || obj.get("ext").isJsonObject())){ + sb.setExt(obj.get("ext").toString()); + }else { + sb.setExt(DefaultConfig.safeJsonString(obj, "ext", "")); + } sb.setJar(DefaultConfig.safeJsonString(obj, "jar", "")); sb.setPlayerType(DefaultConfig.safeJsonInt(obj, "playerType", -1)); sb.setCategories(DefaultConfig.safeJsonStringList(obj, "categories")); diff --git a/app/src/main/java/com/github/tvbox/osc/ui/activity/PlayActivity.java b/app/src/main/java/com/github/tvbox/osc/ui/activity/PlayActivity.java index 1f301955..a37bf55d 100644 --- a/app/src/main/java/com/github/tvbox/osc/ui/activity/PlayActivity.java +++ b/app/src/main/java/com/github/tvbox/osc/ui/activity/PlayActivity.java @@ -1,9 +1,11 @@ package com.github.tvbox.osc.ui.activity; +import android.annotation.SuppressLint; import android.annotation.TargetApi; import android.app.Activity; import android.content.Context; import android.content.Intent; +import android.graphics.Bitmap; import android.graphics.Color; import android.net.http.SslError; import android.os.Build; @@ -827,7 +829,7 @@ public class PlayActivity extends BaseActivity { //重新播放清除现有进度 if (reset) { CacheManager.delete(MD5.string2MD5(progressKey), 0); - CacheManager.delete(MD5.string2MD5(subtitleCacheKey), ""); + CacheManager.delete(MD5.string2MD5(subtitleCacheKey), 0); } if (Thunder.play(vs.url, new Thunder.ThunderCallback() { @Override @@ -1171,7 +1173,7 @@ public class PlayActivity extends BaseActivity { XWalkUtils.tryUseXWalk(mContext, new XWalkUtils.XWalkState() { @Override public void success() { - initWebView(false); + initWebView(!sourceBean.getClickSelector().isEmpty()); loadUrl(url); } @@ -1317,6 +1319,7 @@ public class PlayActivity extends BaseActivity { } } + @SuppressLint("SetJavaScriptEnabled") private void configWebViewSys(WebView webView) { if (webView == null) { return; @@ -1404,6 +1407,29 @@ public class PlayActivity extends BaseActivity { return false; } + @Override + public void onPageStarted(WebView view, String url, Bitmap favicon) { + super.onPageStarted( view, url, favicon); + } + + @Override + public void onPageFinished(WebView view, String url) { + super.onPageFinished(view,url); + String click=sourceBean.getClickSelector(); + LOG.i("onPageFinished url:" + url); + if(!click.isEmpty()){ + String selector; + if(click.contains(";")){ + if(!url.contains(click.split(";")[0]))return; + selector=click.split(";")[1]; + }else { + selector=click.trim(); + } + String js="$(\""+ selector+"\").click();"; + mSysWebView.loadUrl("javascript:"+js); + } + } + WebResourceResponse checkIsVideo(String url, HashMap headers) { if (url.endsWith("/favicon.ico")) { if (url.startsWith("http://127.0.0.1")) { @@ -1476,6 +1502,7 @@ public class PlayActivity extends BaseActivity { } } + @SuppressLint("SetJavaScriptEnabled") private void configWebViewX5(XWalkView webView) { if (webView == null) { return; @@ -1606,7 +1633,7 @@ public class PlayActivity extends BaseActivity { if (loadFoundCount.incrementAndGet() == 1) { mHandler.removeMessages(100); url = loadFoundVideoUrls.poll(); - if (webHeaders != null && !webHeaders.isEmpty()) { + if (!webHeaders.isEmpty()) { playUrl(url, webHeaders); } else { playUrl(url, null); diff --git a/app/src/main/java/com/github/tvbox/osc/ui/fragment/PlayFragment.java b/app/src/main/java/com/github/tvbox/osc/ui/fragment/PlayFragment.java index b3637f20..d38bb68c 100644 --- a/app/src/main/java/com/github/tvbox/osc/ui/fragment/PlayFragment.java +++ b/app/src/main/java/com/github/tvbox/osc/ui/fragment/PlayFragment.java @@ -1,5 +1,6 @@ package com.github.tvbox.osc.ui.fragment; +import android.annotation.SuppressLint; import android.annotation.TargetApi; import android.app.Activity; import android.content.Context; @@ -766,20 +767,15 @@ public class PlayFragment extends BaseLazyFragment { private SourceBean sourceBean; private void playNext(boolean isProgress) { - boolean hasNext = true; + boolean hasNext; if (mVodInfo == null || mVodInfo.seriesMap.get(mVodInfo.playFlag) == null) { hasNext = false; } else { hasNext = mVodInfo.playIndex + 1 < mVodInfo.seriesMap.get(mVodInfo.playFlag).size(); } if (!hasNext) { - if(isProgress && mVodInfo!=null){ - mVodInfo.playIndex=0; - Toast.makeText(requireContext(), "已经是最后一集了!,即将跳到第一集继续播放", Toast.LENGTH_SHORT).show(); - }else { - Toast.makeText(requireContext(), "已经是最后一集了!", Toast.LENGTH_SHORT).show(); - return; - } + Toast.makeText(requireContext(), "已经是最后一集了!", Toast.LENGTH_SHORT).show(); + return; }else { mVodInfo.playIndex++; } @@ -846,7 +842,7 @@ public class PlayFragment extends BaseLazyFragment { //重新播放清除现有进度 if (reset) { CacheManager.delete(MD5.string2MD5(progressKey), 0); - CacheManager.delete(MD5.string2MD5(subtitleCacheKey), ""); + CacheManager.delete(MD5.string2MD5(subtitleCacheKey), 0); } if (Thunder.play(vs.url, new Thunder.ThunderCallback() { @Override @@ -1189,7 +1185,7 @@ public class PlayFragment extends BaseLazyFragment { XWalkUtils.tryUseXWalk(mContext, new XWalkUtils.XWalkState() { @Override public void success() { - initWebView(false); + initWebView(!sourceBean.getClickSelector().isEmpty()); loadUrl(url); } @@ -1340,6 +1336,7 @@ public class PlayFragment extends BaseLazyFragment { } } + @SuppressLint("SetJavaScriptEnabled") private void configWebViewSys(WebView webView) { if (webView == null) { return; @@ -1435,8 +1432,18 @@ public class PlayFragment extends BaseLazyFragment { public void onPageFinished(WebView view, String url) { super.onPageFinished(view,url); String click=sourceBean.getClickSelector(); - if(!click.isEmpty() && url.contains(click.split(";")[0])){ - mSysWebView.loadUrl("javascript:$(\""+ click.split(";")[1]+"\").click();"); + LOG.i("onPageFinished url:" + url); + + if(!click.isEmpty()){ + String selector; + if(click.contains(";")){ + if(!url.contains(click.split(";")[0]))return; + selector=click.split(";")[1]; + }else { + selector=click.trim(); + } + String js="$(\""+ selector+"\").click();"; + mSysWebView.loadUrl("javascript:"+js); } } @@ -1512,6 +1519,7 @@ public class PlayFragment extends BaseLazyFragment { } } + @SuppressLint("SetJavaScriptEnabled") private void configWebViewX5(XWalkView webView) { if (webView == null) { return; @@ -1599,8 +1607,11 @@ public class PlayFragment extends BaseLazyFragment { public void onLoadFinished(XWalkView view, String url) { super.onLoadFinished(view, url); String click=sourceBean.getClickSelector(); + LOG.i("onLoadFinished url:" + url); if(!click.isEmpty() && url.contains(click.split(";")[0])){ - mXwalkWebView.loadUrl("javascript:$(\""+ click.split(";")[1]+"\").click();"); + String js="$(\""+ click.split(";")[1]+"\").click();"; + LOG.i(js); + mXwalkWebView.loadUrl("javascript:"+js); } } @@ -1628,6 +1639,7 @@ public class PlayFragment extends BaseLazyFragment { ad = loadedUrls.get(url); } if (!ad ) { + if (checkVideoFormat(url)) { HashMap webHeaders = new HashMap<>(); Map hds = request.getRequestHeaders();