diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java index ed558804a..22d0c8363 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java @@ -33,6 +33,7 @@ import com.fongmi.android.tv.bean.EpgData; import com.fongmi.android.tv.bean.Group; import com.fongmi.android.tv.bean.Keep; import com.fongmi.android.tv.bean.Live; +import com.fongmi.android.tv.bean.Result; import com.fongmi.android.tv.bean.Track; import com.fongmi.android.tv.databinding.ActivityLiveBinding; import com.fongmi.android.tv.event.ActionEvent; @@ -80,7 +81,7 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick private ArrayObjectAdapter mChannelAdapter; private ArrayObjectAdapter mEpgDataAdapter; private ArrayObjectAdapter mGroupAdapter; - private Observer mObserveUrl; + private Observer mObserveUrl; private CustomKeyDownLive mKeyDown; private Observer mObserveEpg; private LiveViewModel mViewModel; @@ -658,8 +659,8 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick showProgress(); } - private void start(Channel result) { - mPlayers.start(result, getTimeout()); + private void start(Result result) { + mPlayers.start(result, false, getTimeout()); } private void checkPlayImg() { diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Channel.java b/app/src/main/java/com/fongmi/android/tv/bean/Channel.java index e69f4a6f2..420871f79 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Channel.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Channel.java @@ -57,8 +57,6 @@ public class Channel { private boolean selected; private Group group; - private String url; - private String msg; private Epg data; private int line; @@ -78,12 +76,6 @@ public class Channel { return new Channel().copy(channel); } - public static Channel error(String msg) { - Channel result = new Channel(); - result.setMsg(msg); - return result; - } - public Channel() { } @@ -227,26 +219,6 @@ public class Channel { this.group = group; } - public String getUrl() { - return TextUtils.isEmpty(url) ? "" : url; - } - - public void setUrl(String url) { - this.url = url; - } - - public String getMsg() { - return TextUtils.isEmpty(msg) ? "" : msg; - } - - public void setMsg(String msg) { - this.msg = msg; - } - - public boolean hasMsg() { - return !getMsg().isEmpty(); - } - public Epg getData() { return data == null ? new Epg() : data; } @@ -378,9 +350,12 @@ public class Channel { public Result result() { Result result = new Result(); + result.setDrm(getDrm()); result.setClick(getClick()); - result.setUrl(Url.create().add(getUrl())); + result.setParse(getParse()); + result.setFormat(getFormat()); result.setHeader(Json.toObject(getHeaders())); + result.setUrl(Url.create().add(getCurrent())); return result; } 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 19e821e39..9ea1c4bc1 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 @@ -243,6 +243,10 @@ public class Result implements Parcelable { return format; } + public void setFormat(String format) { + this.format = format; + } + public String getClick() { return TextUtils.isEmpty(click) ? "" : click; } @@ -283,6 +287,10 @@ public class Result implements Parcelable { return drm; } + public void setDrm(Drm drm) { + this.drm = drm; + } + public boolean hasMsg() { return !getMsg().isEmpty(); } diff --git a/app/src/main/java/com/fongmi/android/tv/model/LiveViewModel.java b/app/src/main/java/com/fongmi/android/tv/model/LiveViewModel.java index 537e40ab7..2d7c6e69e 100644 --- a/app/src/main/java/com/fongmi/android/tv/model/LiveViewModel.java +++ b/app/src/main/java/com/fongmi/android/tv/model/LiveViewModel.java @@ -14,6 +14,7 @@ import com.fongmi.android.tv.bean.Epg; import com.fongmi.android.tv.bean.EpgData; import com.fongmi.android.tv.bean.Group; import com.fongmi.android.tv.bean.Live; +import com.fongmi.android.tv.bean.Result; import com.fongmi.android.tv.exception.ExtractException; import com.fongmi.android.tv.player.Source; import com.github.catvod.net.OkHttp; @@ -53,9 +54,8 @@ public class LiveViewModel extends ViewModel { private final Map> futures; private final SimpleDateFormat formatDate; private final ExecutorService executor; - - public final MutableLiveData url; public final MutableLiveData xml; + public final MutableLiveData url; public final MutableLiveData live; public final MutableLiveData epg; @@ -104,19 +104,19 @@ public class LiveViewModel extends ViewModel { public void getUrl(Channel item) { execute(TaskType.URL, () -> { - item.setMsg(null); Source.get().stop(); - item.setUrl(Source.get().fetch(item)); - return item; + Result result = item.result(); + result.setUrl(Source.get().fetch(result)); + return result; }); } public void getUrl(Channel item, EpgData data) { execute(TaskType.URL, () -> { - item.setMsg(null); Source.get().stop(); - item.setUrl(item.getCatchup().format(Source.get().fetch(item), data)); - return item; + Result result = item.result(); + result.setUrl(item.getCatchup().format(Source.get().fetch(result), data)); + return result; }); } @@ -147,13 +147,13 @@ public class LiveViewModel extends ViewModel { T result = newFuture.get(type.timeout, TimeUnit.MILLISECONDS); if (type == TaskType.EPG) epg.postValue((Epg) result); else if (type == TaskType.LIVE) live.postValue((Live) result); + else if (type == TaskType.URL) url.postValue((Result) result); else if (type == TaskType.XML) xml.postValue((Boolean) result); - else if (type == TaskType.URL) url.postValue((Channel) result); } catch (Throwable e) { if (e instanceof CancellationException) return; - if (e.getCause() instanceof ExtractException) url.postValue(Channel.error(e.getCause().getMessage())); - else if (type == TaskType.URL) url.postValue(new Channel()); + if (e.getCause() instanceof ExtractException) url.postValue(Result.error(e.getCause().getMessage())); else if (type == TaskType.LIVE) live.postValue(new Live()); + else if (type == TaskType.URL) url.postValue(new Result()); else if (type == TaskType.EPG) epg.postValue(new Epg()); else if (type == TaskType.XML) xml.postValue(false); e.printStackTrace(); diff --git a/app/src/main/java/com/fongmi/android/tv/player/Players.java b/app/src/main/java/com/fongmi/android/tv/player/Players.java index 41d56582b..78cfaf888 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/Players.java +++ b/app/src/main/java/com/fongmi/android/tv/player/Players.java @@ -37,7 +37,6 @@ import com.fongmi.android.tv.App; import com.fongmi.android.tv.Constant; import com.fongmi.android.tv.R; import com.fongmi.android.tv.Setting; -import com.fongmi.android.tv.bean.Channel; import com.fongmi.android.tv.bean.Danmaku; import com.fongmi.android.tv.bean.Drm; import com.fongmi.android.tv.bean.Result; @@ -417,20 +416,6 @@ public class Players implements Player.Listener, ParseCallback { App.removeCallbacks(runnable); } - public void start(Channel channel, long timeout) { - if (channel.getDrm() != null && !FrameworkMediaDrm.isCryptoSchemeSupported(channel.getDrm().getUUID())) { - ErrorEvent.drm(tag); - } else if (channel.hasMsg()) { - ErrorEvent.extract(tag, channel.getMsg()); - } else if (channel.getParse() == 1) { - startParse(channel.result(), false); - } else if (isIllegal(channel.getUrl())) { - ErrorEvent.url(tag); - } else { - setMediaItem(channel, timeout); - } - } - public void start(Result result, boolean useParse, long timeout) { if (result.getDrm() != null && !FrameworkMediaDrm.isCryptoSchemeSupported(result.getDrm().getUUID())) { ErrorEvent.drm(tag); @@ -484,10 +469,6 @@ public class Players implements Player.Listener, ParseCallback { setMediaItem(headers, url, format, drm, subs, danmakus, Constant.TIMEOUT_PLAY); } - private void setMediaItem(Channel channel, long timeout) { - setMediaItem(channel.getHeaders(), channel.getUrl(), channel.getFormat(), channel.getDrm(), new ArrayList<>(), new ArrayList<>(), timeout); - } - private void setMediaItem(Result result, long timeout) { setMediaItem(result.getHeaders(), result.getRealUrl(), result.getFormat(), result.getDrm(), result.getSubs(), result.getDanmaku(), timeout); } diff --git a/app/src/main/java/com/fongmi/android/tv/player/Source.java b/app/src/main/java/com/fongmi/android/tv/player/Source.java index 7db8833b4..99d4c4965 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/Source.java +++ b/app/src/main/java/com/fongmi/android/tv/player/Source.java @@ -1,7 +1,6 @@ package com.fongmi.android.tv.player; import com.fongmi.android.tv.App; -import com.fongmi.android.tv.bean.Channel; import com.fongmi.android.tv.bean.Episode; import com.fongmi.android.tv.bean.Flag; import com.fongmi.android.tv.bean.Result; @@ -83,14 +82,6 @@ public class Source { return extractor == null ? url : extractor.fetch(url); } - public String fetch(Channel channel) throws Exception { - String url = channel.getCurrent(); - Extractor extractor = getExtractor(url); - if (extractor != null) channel.setParse(0); - if (extractor instanceof Video) channel.setParse(1); - return extractor == null ? url : extractor.fetch(url); - } - public void stop() { if (extractors == null) return; extractors.forEach(Extractor::stop); diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java index 2729f6093..2cd1bb808 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java @@ -34,6 +34,7 @@ import com.fongmi.android.tv.bean.EpgData; import com.fongmi.android.tv.bean.Group; import com.fongmi.android.tv.bean.Keep; import com.fongmi.android.tv.bean.Live; +import com.fongmi.android.tv.bean.Result; import com.fongmi.android.tv.bean.Track; import com.fongmi.android.tv.databinding.ActivityLiveBinding; import com.fongmi.android.tv.event.ActionEvent; @@ -83,7 +84,7 @@ public class LiveActivity extends BaseActivity implements CustomKeyDown.Listener private ActivityLiveBinding mBinding; private ChannelAdapter mChannelAdapter; private EpgDataAdapter mEpgDataAdapter; - private Observer mObserveUrl; + private Observer mObserveUrl; private GroupAdapter mGroupAdapter; private Observer mObserveEpg; private LiveViewModel mViewModel; @@ -683,8 +684,8 @@ public class LiveActivity extends BaseActivity implements CustomKeyDown.Listener showProgress(); } - private void start(Channel result) { - mPlayers.start(result, getTimeout()); + private void start(Result result) { + mPlayers.start(result, false, getTimeout()); } private void checkControl() {