Support live custom rule

pull/137/head
FongMi 2 years ago
parent 99281078e3
commit 0ab9512049
  1. 12
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java
  2. 60
      app/src/main/java/com/fongmi/android/tv/api/LiveParser.java
  3. 11
      app/src/main/java/com/fongmi/android/tv/bean/Channel.java
  4. 12
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java
  5. 2
      catvod/src/main/java/com/github/catvod/net/OkHttp.java

@ -113,8 +113,8 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick
return LiveConfig.get().getHome();
}
private int getPlayerType() {
return getHome().getPlayerType() != -1 ? getHome().getPlayerType() : Setting.getLivePlayer();
private int getPlayerType(int playerType) {
return playerType != -1 ? playerType : getHome().getPlayerType() != -1 ? getHome().getPlayerType() : Setting.getLivePlayer();
}
@Override
@ -213,7 +213,11 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick
private void setViewModel() {
mViewModel = new ViewModelProvider(this).get(LiveViewModel.class);
mViewModel.channel.observe(this, result -> mPlayers.start(result, getHome().getTimeout()));
mViewModel.channel.observe(this, result -> {
mPlayers.setPlayer(getPlayerType(result.getPlayerType()));
mPlayers.start(result, getHome().getTimeout());
setPlayerView();
});
mViewModel.live.observe(this, live -> {
hideProgress();
setGroup(live);
@ -221,9 +225,7 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick
}
private void getLive() {
mPlayers.setPlayer(getPlayerType());
mViewModel.getLive(getHome());
setPlayerView();
setDecodeView();
showProgress();
}

@ -69,7 +69,9 @@ public class LiveParser {
}
private static void txt(Live live, String text) {
Setting setting = Setting.create();
for (String line : text.split("\n")) {
setting.check(line);
String[] split = line.split(",");
if (split.length < 2) continue;
if (Thread.interrupted()) break;
@ -77,7 +79,9 @@ public class LiveParser {
if (live.getGroups().isEmpty()) live.getGroups().add(Group.create(R.string.live_group));
if (split[1].contains("://")) {
Group group = live.getGroups().get(live.getGroups().size() - 1);
group.find(Channel.create(split[0])).addUrls(split[1].split("#"));
Channel channel = group.find(Channel.create(split[0]));
channel.addUrls(split[1].split("#"));
setting.copy(channel);
}
}
}
@ -106,4 +110,58 @@ public class LiveParser {
return "";
}
}
private static class Setting {
public String ua;
public String referer;
public Integer player;
public static Setting create() {
return new Setting();
}
public void check(String line) {
if (line.startsWith("ua")) ua(line);
if (line.startsWith("player")) player(line);
if (line.startsWith("referer")) referer(line);
if (line.contains("#genre#")) clear();
}
public void copy(Channel channel) {
if (ua != null) channel.setUa(ua);
if (referer != null) channel.setReferer(referer);
if (player != null) channel.setPlayerType(player);
}
private void ua(String line) {
try {
ua = line.split("=")[1].trim();
} catch (Exception e) {
ua = null;
}
}
private void referer(String line) {
try {
referer = line.split("=")[1].trim();
} catch (Exception e) {
referer = null;
}
}
private void player(String line) {
try {
player = Integer.parseInt(line.split("=")[1].trim());
} catch (Exception e) {
player = null;
}
}
private void clear() {
player = null;
referer = null;
ua = null;
}
}
}

@ -37,6 +37,8 @@ public class Channel {
private String referer;
@SerializedName("header")
private JsonElement header;
@SerializedName("playerType")
private Integer playerType;
private boolean selected;
private Group group;
@ -131,6 +133,14 @@ public class Channel {
this.header = header;
}
public Integer getPlayerType() {
return playerType == null ? -1 : Math.min(playerType, 2);
}
public void setPlayerType(Integer playerType) {
this.playerType = playerType;
}
public Group getGroup() {
return group;
}
@ -227,6 +237,7 @@ public class Channel {
if (live.getUa().length() > 0 && getUa().isEmpty()) setUa(live.getUa());
if (live.getHeader() != null && getHeader() == null) setHeader(live.getHeader());
if (live.getReferer().length() > 0 && getReferer().isEmpty()) setReferer(live.getReferer());
if (live.getPlayerType() != -1 && getPlayerType() == -1) setPlayerType(live.getPlayerType());
if (!getEpg().startsWith("http")) setEpg(live.getEpg().replace("{name}", getName()).replace("{epg}", getEpg()));
if (!getLogo().startsWith("http")) setLogo(live.getLogo().replace("{name}", getName()).replace("{logo}", getLogo()));
}

@ -117,8 +117,8 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List
return LiveConfig.get().getHome();
}
private int getPlayerType() {
return getHome().getPlayerType() != -1 ? getHome().getPlayerType() : Setting.getLivePlayer();
private int getPlayerType(int playerType) {
return playerType != -1 ? playerType : getHome().getPlayerType() != -1 ? getHome().getPlayerType() : Setting.getLivePlayer();
}
@Override
@ -215,7 +215,11 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List
private void setViewModel() {
mViewModel = new ViewModelProvider(this).get(LiveViewModel.class);
mViewModel.channel.observe(this, result -> mPlayers.start(result, getHome().getTimeout()));
mViewModel.channel.observe(this, result -> {
mPlayers.setPlayer(getPlayerType(result.getPlayerType()));
mPlayers.start(result, getHome().getTimeout());
setPlayerView();
});
mViewModel.live.observe(this, live -> {
hideProgress();
setGroup(live);
@ -223,9 +227,7 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List
}
private void getLive() {
mPlayers.setPlayer(getPlayerType());
mViewModel.getLive(getHome());
setPlayerView();
setDecodeView();
showProgress();
}

@ -22,7 +22,7 @@ import okhttp3.dnsoverhttps.DnsOverHttps;
public class OkHttp {
private static final int TIMEOUT = 30 * 1000;
private static final int CACHE = 50 * 1024 * 1024;
private static final int CACHE = 100 * 1024 * 1024;
private DnsOverHttps dns;
private OkHttpClient client;

Loading…
Cancel
Save