From e2e457df8efa1a6c6dc6cbc8b995d97ce2d06500 Mon Sep 17 00:00:00 2001 From: FongMi Date: Thu, 18 May 2023 15:10:08 +0800 Subject: [PATCH] Fix bug --- .../android/tv/ui/activity/DetailActivity.java | 7 ++++--- .../main/java/com/fongmi/android/tv/bean/Result.java | 10 ++++++++++ .../main/java/com/fongmi/android/tv/bean/Site.java | 8 +++++++- .../com/fongmi/android/tv/model/SiteViewModel.java | 3 +++ .../java/com/fongmi/android/tv/player/ExoUtil.java | 12 ++++++------ .../tv/danmaku/ijk/media/player/ui/IjkVideoView.java | 1 - 6 files changed, 30 insertions(+), 11 deletions(-) diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java index 55a7235c0..5d2cde035 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java @@ -92,9 +92,9 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis private CustomKeyDownVod mKeyDown; private ExecutorService mExecutor; private SiteViewModel mViewModel; + private List mBroken; private History mHistory; private Players mPlayers; - private String mSiteKey; private boolean fullscreen; private boolean initTrack; private boolean initAuto; @@ -210,9 +210,9 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis mKeyDown = CustomKeyDownVod.create(this, mBinding.video); mFrameParams = mBinding.video.getLayoutParams(); mPlayers = new Players().init(); + mBroken = new ArrayList<>(); mR1 = this::hideControl; mR2 = this::setTraffic; - mSiteKey = getKey(); setRecyclerView(); setVideoView(); setViewModel(); @@ -849,6 +849,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis private void onError(ErrorEvent event) { Clock.get().setCallback(null); showError(event.getMsg()); + mBroken.add(getId()); mPlayers.stop(); startFlow(); } @@ -929,6 +930,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis private boolean mismatch(Vod item) { String keyword = mBinding.part.getTag().toString(); + if (mBroken.contains(item.getVodId())) return true; if (isAutoMode()) return !item.getVodName().equals(keyword); else return !item.getVodName().contains(keyword); } @@ -948,7 +950,6 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis private void nextSite() { if (mSearchAdapter.size() == 0) return; Vod vod = (Vod) mSearchAdapter.get(0); - if (vod.getSiteKey().equals(mSiteKey)) return; Notify.show(getString(R.string.play_switch_site, vod.getSiteName())); mSearchAdapter.removeItems(0, 1); setInitAuto(false); diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Result.java b/app/src/main/java/com/fongmi/android/tv/bean/Result.java index 2b41e61d2..c6715ec3a 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Result.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Result.java @@ -56,6 +56,8 @@ public class Result { private String key; @SerializedName("subs") private List subs; + @SerializedName("ads") + private List ads; public static Result fromJson(String str) { try { @@ -190,6 +192,14 @@ public class Result { return subs == null ? Collections.emptyList() : subs; } + public List getAds() { + return ads == null ? Collections.emptyList() : ads; + } + + public void setAds(List ads) { + this.ads = ads; + } + public String getRealUrl() { return getPlayUrl() + getUrl(); } diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Site.java b/app/src/main/java/com/fongmi/android/tv/bean/Site.java index d8b840600..97bff80c9 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Site.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Site.java @@ -15,7 +15,7 @@ import com.google.gson.annotations.SerializedName; import java.util.Collections; import java.util.List; -@Entity(ignoredColumns = {"type", "api", "playUrl", "playerType", "ext", "jar", "categories"}) +@Entity(ignoredColumns = {"type", "api", "playUrl", "playerType", "ext", "jar", "categories", "ads"}) public class Site { @NonNull @@ -44,6 +44,8 @@ public class Site { private String jar; @SerializedName("categories") private List categories; + @SerializedName("ads") + private List ads; private boolean activated; @@ -148,6 +150,10 @@ public class Site { return categories == null ? Collections.emptyList() : categories; } + public List getAds() { + return ads == null ? Collections.emptyList() : ads; + } + public boolean isActivated() { return activated; } diff --git a/app/src/main/java/com/fongmi/android/tv/model/SiteViewModel.java b/app/src/main/java/com/fongmi/android/tv/model/SiteViewModel.java index 232cdc003..08015aa82 100644 --- a/app/src/main/java/com/fongmi/android/tv/model/SiteViewModel.java +++ b/app/src/main/java/com/fongmi/android/tv/model/SiteViewModel.java @@ -142,6 +142,7 @@ public class SiteViewModel extends ViewModel { ApiConfig.get().setJar(site.getJar()); Result result = Result.objectFrom(playerContent); if (result.getFlag().isEmpty()) result.setFlag(flag); + if (result.getAds().isEmpty()) result.setAds(site.getAds()); result.setKey(key); return result; } else if (site.getType() == 4) { @@ -152,6 +153,7 @@ public class SiteViewModel extends ViewModel { SpiderDebug.log(body); Result result = Result.fromJson(body); if (result.getFlag().isEmpty()) result.setFlag(flag); + if (result.getAds().isEmpty()) result.setAds(site.getAds()); return result; } else { String url = id; @@ -160,6 +162,7 @@ public class SiteViewModel extends ViewModel { Result result = new Result(); result.setUrl(url); result.setFlag(flag); + result.setAds(site.getAds()); result.setPlayUrl(site.getPlayUrl()); result.setParse(Utils.isVideoFormat(url) && result.getPlayUrl().isEmpty() ? 0 : 1); return result; diff --git a/app/src/main/java/com/fongmi/android/tv/player/ExoUtil.java b/app/src/main/java/com/fongmi/android/tv/player/ExoUtil.java index 67811b86b..5a2347f20 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/ExoUtil.java +++ b/app/src/main/java/com/fongmi/android/tv/player/ExoUtil.java @@ -78,26 +78,26 @@ public class ExoUtil { } public static MediaSource getSource(Result result, int errorCode) { - return getSource(result.getHeaders(), result.getRealUrl(), result.getSubs(), errorCode); + return getSource(result.getHeaders(), result.getRealUrl(), result.getSubs(), result.getAds(), errorCode); } public static MediaSource getSource(Map headers, String url, int errorCode) { - return getSource(headers, url, Collections.emptyList(), errorCode); + return getSource(headers, url, Collections.emptyList(), Collections.emptyList(), errorCode); } - private static MediaSource getSource(Map headers, String url, List subs, int errorCode) { + private static MediaSource getSource(Map headers, String url, List subs, List ads, int errorCode) { Uri uri = Uri.parse(url.trim().replace("\\", "")); if (uri.getUserInfo() != null) headers.put(HttpHeaders.AUTHORIZATION, "Basic " + Base64.encodeToString(uri.getUserInfo().getBytes(), Base64.NO_WRAP)); - return new DefaultMediaSourceFactory(getDataSourceFactory(headers), getExtractorsFactory()).createMediaSource(getMediaItem(uri, subs, errorCode)); + return new DefaultMediaSourceFactory(getDataSourceFactory(headers), getExtractorsFactory()).createMediaSource(getMediaItem(uri, subs, ads, errorCode)); } - private static MediaItem getMediaItem(Uri uri, List subs, int errorCode) { + private static MediaItem getMediaItem(Uri uri, List subs, List ads, int errorCode) { MediaItem.Builder builder = new MediaItem.Builder().setUri(uri); if (errorCode == PlaybackException.ERROR_CODE_PARSING_MANIFEST_MALFORMED) builder.setMimeType(MimeTypes.APPLICATION_OCTET); else if (errorCode == PlaybackException.ERROR_CODE_PARSING_CONTAINER_UNSUPPORTED) builder.setMimeType(MimeTypes.APPLICATION_M3U8); if (subs.size() > 0) builder.setSubtitleConfigurations(getSubtitles(subs)); builder.setAllowChunklessPreparation(Prefers.getDecode() == 1); - return builder.build(); + return builder.setAds(ads).build(); } private static List getSubtitles(List subs) { diff --git a/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/ui/IjkVideoView.java b/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/ui/IjkVideoView.java index 9a17404af..773302c81 100644 --- a/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/ui/IjkVideoView.java +++ b/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/ui/IjkVideoView.java @@ -254,7 +254,6 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl public void seekTo(int positionMs) { if (!isInPlaybackState()) return; onInfo(mPlayer, IMediaPlayer.MEDIA_INFO_BUFFERING_START, 0); - Log.e("DDD", "SEEKTO"); mPlayer.seekTo(positionMs); mStartPosition = 0; }