From 0ab95120493aeaf64636fee202283a17612892a6 Mon Sep 17 00:00:00 2001 From: FongMi Date: Fri, 18 Aug 2023 17:55:16 +0800 Subject: [PATCH] Support live custom rule --- .../android/tv/ui/activity/LiveActivity.java | 12 ++-- .../com/fongmi/android/tv/api/LiveParser.java | 60 ++++++++++++++++++- .../com/fongmi/android/tv/bean/Channel.java | 11 ++++ .../android/tv/ui/activity/LiveActivity.java | 12 ++-- .../java/com/github/catvod/net/OkHttp.java | 2 +- 5 files changed, 85 insertions(+), 12 deletions(-) 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 2c0151e55..18f204301 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 @@ -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(); } diff --git a/app/src/main/java/com/fongmi/android/tv/api/LiveParser.java b/app/src/main/java/com/fongmi/android/tv/api/LiveParser.java index 921a23147..66a2855bf 100644 --- a/app/src/main/java/com/fongmi/android/tv/api/LiveParser.java +++ b/app/src/main/java/com/fongmi/android/tv/api/LiveParser.java @@ -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; + } + } } 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 500e4fe8e..7d742a26b 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 @@ -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())); } 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 da566506a..cf4e375ae 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 @@ -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(); } diff --git a/catvod/src/main/java/com/github/catvod/net/OkHttp.java b/catvod/src/main/java/com/github/catvod/net/OkHttp.java index a2caa58fc..0b45f1314 100644 --- a/catvod/src/main/java/com/github/catvod/net/OkHttp.java +++ b/catvod/src/main/java/com/github/catvod/net/OkHttp.java @@ -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;