Convert channel to result

pull/605/head
jhengazuji 5 months ago
parent 90ba61d0eb
commit d07ed0e3f7
  1. 7
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java
  2. 33
      app/src/main/java/com/fongmi/android/tv/bean/Channel.java
  3. 8
      app/src/main/java/com/fongmi/android/tv/bean/Result.java
  4. 22
      app/src/main/java/com/fongmi/android/tv/model/LiveViewModel.java
  5. 19
      app/src/main/java/com/fongmi/android/tv/player/Players.java
  6. 9
      app/src/main/java/com/fongmi/android/tv/player/Source.java
  7. 7
      app/src/mobile/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<Channel> mObserveUrl;
private Observer<Result> mObserveUrl;
private CustomKeyDownLive mKeyDown;
private Observer<Epg> 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() {

@ -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;
}

@ -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();
}

@ -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<TaskType, Future<?>> futures;
private final SimpleDateFormat formatDate;
private final ExecutorService executor;
public final MutableLiveData<Channel> url;
public final MutableLiveData<Boolean> xml;
public final MutableLiveData<Result> url;
public final MutableLiveData<Live> live;
public final MutableLiveData<Epg> 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();

@ -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);
}

@ -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);

@ -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<Channel> mObserveUrl;
private Observer<Result> mObserveUrl;
private GroupAdapter mGroupAdapter;
private Observer<Epg> 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() {

Loading…
Cancel
Save