diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java index 63b3a52aa..d2a810a66 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java @@ -6,7 +6,6 @@ import android.app.Activity; import android.content.Intent; import android.graphics.drawable.Drawable; import android.net.Uri; -import android.text.Html; import android.text.SpannableStringBuilder; import android.text.Spanned; import android.text.TextUtils; @@ -996,6 +995,19 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List keep.save(); } + private void updateVod(Vod item) { + mHistory.setVodPic(item.getVodPic()); + mHistory.setVodName(item.getVodName()); + mBinding.video.setTag(item.getVodPic()); + mBinding.name.setText(item.getVodName()); + mBinding.widget.title.setText(item.getVodName()); + setText(mBinding.content, R.string.detail_content, item.getVodContent()); + setText(mBinding.director, R.string.detail_director, item.getVodDirector()); + mBinding.content.setMaxLines(getMaxLines()); + setArtwork(item.getVodPic()); + setMetadata(); + } + @Override public void onSubtitleClick() { App.post(this::hideControl, 200); @@ -1032,6 +1044,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List if (isRedirect()) return; if (event.getType() == RefreshEvent.Type.DETAIL) getDetail(); else if (event.getType() == RefreshEvent.Type.PLAYER) onRefresh(); + else if (event.getType() == RefreshEvent.Type.VOD) updateVod(event.getVod()); else if (event.getType() == RefreshEvent.Type.SUBTITLE) mPlayers.setSub(Sub.from(event.getPath())); else if (event.getType() == RefreshEvent.Type.DANMAKU) mPlayers.setDanmaku(Danmaku.from(event.getPath())); } diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Vod.java b/app/src/main/java/com/fongmi/android/tv/bean/Vod.java index a9cc249ba..713a0f890 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Vod.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Vod.java @@ -154,6 +154,10 @@ public class Vod implements Parcelable { return TextUtils.isEmpty(vodDirector) ? "" : Util.clean(vodDirector); } + public void setVodDirector(String vodDirector) { + this.vodDirector = vodDirector; + } + public String getVodActor() { return TextUtils.isEmpty(vodActor) ? "" : Util.clean(vodActor); } @@ -162,6 +166,10 @@ public class Vod implements Parcelable { return TextUtils.isEmpty(vodContent) ? "" : Util.clean(vodContent); } + public void setVodContent(String vodContent) { + this.vodContent = vodContent; + } + public String getVodPlayFrom() { return TextUtils.isEmpty(vodPlayFrom) ? "" : vodPlayFrom; } diff --git a/app/src/main/java/com/fongmi/android/tv/event/RefreshEvent.java b/app/src/main/java/com/fongmi/android/tv/event/RefreshEvent.java index 30224a6f7..929c5a461 100644 --- a/app/src/main/java/com/fongmi/android/tv/event/RefreshEvent.java +++ b/app/src/main/java/com/fongmi/android/tv/event/RefreshEvent.java @@ -1,11 +1,14 @@ package com.fongmi.android.tv.event; +import com.fongmi.android.tv.bean.Vod; + import org.greenrobot.eventbus.EventBus; public class RefreshEvent { private final Type type; private String path; + private Vod vod; public static void config() { EventBus.getDefault().post(new RefreshEvent(Type.CONFIG)); @@ -55,6 +58,10 @@ public class RefreshEvent { EventBus.getDefault().post(new RefreshEvent(Type.DANMAKU, path)); } + public static void vod(Vod vod) { + EventBus.getDefault().post(new RefreshEvent(Type.VOD, vod)); + } + private RefreshEvent(Type type) { this.type = type; } @@ -64,6 +71,11 @@ public class RefreshEvent { this.path = path; } + private RefreshEvent(Type type, Vod vod) { + this.type = type; + this.vod = vod; + } + public Type getType() { return type; } @@ -72,7 +84,11 @@ public class RefreshEvent { return path; } + public Vod getVod() { + return vod; + } + public enum Type { - CONFIG, IMAGE, VIDEO, HISTORY, KEEP, SIZE, WALL, LIVE, DETAIL, PLAYER, SUBTITLE, DANMAKU + CONFIG, IMAGE, VIDEO, HISTORY, KEEP, SIZE, WALL, LIVE, DETAIL, PLAYER, SUBTITLE, DANMAKU, VOD } } diff --git a/app/src/main/java/com/fongmi/android/tv/player/extractor/Youtube.java b/app/src/main/java/com/fongmi/android/tv/player/extractor/Youtube.java index 40d9b077e..5e2d817ce 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/extractor/Youtube.java +++ b/app/src/main/java/com/fongmi/android/tv/player/extractor/Youtube.java @@ -3,6 +3,8 @@ package com.fongmi.android.tv.player.extractor; import android.util.Base64; import com.fongmi.android.tv.bean.Episode; +import com.fongmi.android.tv.bean.Vod; +import com.fongmi.android.tv.event.RefreshEvent; import com.fongmi.android.tv.impl.NewPipeImpl; import com.fongmi.android.tv.player.Source; @@ -44,9 +46,26 @@ public class Youtube implements Source.Extractor { @Override public String fetch(String url) throws Exception { StreamInfo info = StreamInfo.getInfo(url); + RefreshEvent.vod(convert(info)); return isLive(info) ? getLive(info) : getMpd(info); } + private Vod convert(StreamInfo info) { + try { + Vod vod = new Vod(); + vod.setVodName(info.getName()); + vod.setVodDirector(info.getUploaderName()); + vod.setVodContent(info.getDescription().getContent()); + vod.setVodPic(info.getThumbnails().get(info.getThumbnails().size() - 1).getUrl()); + return vod; + } catch (Exception e) { + Vod vod = new Vod(); + vod.setVodName(info.getName()); + vod.setVodContent(info.getDescription().getContent()); + return vod; + } + } + private boolean isLive(StreamInfo info) { return StreamType.LIVE_STREAM.equals(info.getStreamType()); } diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java index 72fbd02d8..eb8edcb24 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java @@ -1071,6 +1071,19 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo keep.save(); } + private void updateVod(Vod item) { + mHistory.setVodPic(item.getVodPic()); + mHistory.setVodName(item.getVodName()); + mBinding.video.setTag(item.getVodPic()); + mBinding.name.setText(item.getVodName()); + mBinding.control.title.setText(item.getVodName()); + setText(mBinding.content, 0, item.getVodContent()); + setText(mBinding.director, R.string.detail_director, item.getVodDirector()); + mBinding.contentLayout.setVisibility(mBinding.content.getVisibility()); + setArtwork(item.getVodPic()); + setMetadata(); + } + @Override public void onSubtitleClick() { App.post(this::hideControl, 200); @@ -1113,6 +1126,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo if (isRedirect()) return; if (event.getType() == RefreshEvent.Type.DETAIL) getDetail(); else if (event.getType() == RefreshEvent.Type.PLAYER) onRefresh(); + else if (event.getType() == RefreshEvent.Type.VOD) updateVod(event.getVod()); else if (event.getType() == RefreshEvent.Type.SUBTITLE) mPlayers.setSub(Sub.from(event.getPath())); else if (event.getType() == RefreshEvent.Type.DANMAKU) mPlayers.setDanmaku(Danmaku.from(event.getPath())); }