From 72e5c2294d3760282ee2cd10e1a90f516dfddf72 Mon Sep 17 00:00:00 2001 From: FongMi Date: Tue, 26 Dec 2023 15:00:21 +0800 Subject: [PATCH] Support click param --- .../com/fongmi/android/tv/api/LiveParser.java | 12 +++++++ .../com/fongmi/android/tv/bean/Channel.java | 13 ++++++++ .../java/com/fongmi/android/tv/bean/Live.java | 8 ++++- .../com/fongmi/android/tv/bean/Parse.java | 9 +++++ .../com/fongmi/android/tv/bean/Result.java | 33 +++++++++++++------ .../fongmi/android/tv/player/ParseJob.java | 14 +++++--- .../android/tv/ui/custom/CustomWebView.java | 9 ++--- 7 files changed, 79 insertions(+), 19 deletions(-) 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 7e8023126..8f609466f 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 @@ -115,6 +115,7 @@ public class LiveParser { private String ua; private String key; private String type; + private String click; private String referer; private Integer parse; private Integer player; @@ -126,6 +127,7 @@ public class LiveParser { public void check(String line) { if (line.startsWith("ua")) ua(line); if (line.startsWith("parse")) parse(line); + if (line.startsWith("click")) click(line); if (line.startsWith("player")) player(line); if (line.startsWith("referer")) referer(line); if (line.startsWith("#EXTVLCOPT:http-user-agent")) ua(line); @@ -138,6 +140,7 @@ public class LiveParser { public Setting copy(Channel channel) { if (ua != null) channel.setUa(ua); if (parse != null) channel.setParse(parse); + if (click != null) channel.setClick(click); if (referer != null) channel.setReferer(referer); if (player != null) channel.setPlayerType(player); if (key != null && type != null) channel.setDrm(Drm.create(key, type)); @@ -168,6 +171,14 @@ public class LiveParser { } } + private void click(String line) { + try { + click = line.split("=")[1].trim(); + } catch (Exception e) { + click = null; + } + } + private void player(String line) { try { player = Integer.parseInt(line.split("=")[1].trim()); @@ -197,6 +208,7 @@ public class LiveParser { key = null; type = null; parse = null; + click = null; player = null; referer = 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 fc999f6fe..d885be08c 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 @@ -33,6 +33,8 @@ public class Channel { private String name; @SerializedName("ua") private String ua; + @SerializedName("click") + private String click; @SerializedName("referer") private String referer; @SerializedName("header") @@ -128,6 +130,14 @@ public class Channel { this.ua = ua; } + public String getClick() { + return TextUtils.isEmpty(click) ? "" : click; + } + + public void setClick(String click) { + this.click = click; + } + public String getReferer() { return TextUtils.isEmpty(referer) ? "" : referer; } @@ -275,6 +285,7 @@ public class Channel { public void live(Live live) { if (live.getUa().length() > 0 && getUa().isEmpty()) setUa(live.getUa()); if (live.getHeader() != null && getHeader() == null) setHeader(live.getHeader()); + if (live.getClick().length() > 0 && getClick().isEmpty()) setClick(live.getClick()); 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())); @@ -298,6 +309,7 @@ public class Channel { setHeader(item.getHeader()); setNumber(item.getNumber()); setParse(item.getParse()); + setClick(item.getClick()); setLogo(item.getLogo()); setName(item.getName()); setUrls(item.getUrls()); @@ -309,6 +321,7 @@ public class Channel { public Result result() { Result result = new Result(); + result.setClick(getClick()); result.setUrl(Url.create().add(getUrl())); result.setHeader(Json.toObject(getHeaders())); return result; diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Live.java b/app/src/main/java/com/fongmi/android/tv/bean/Live.java index 1a6e82ef9..c5844aae8 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Live.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Live.java @@ -21,7 +21,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; -@Entity(ignoredColumns = {"type", "group", "url", "logo", "epg", "ua", "referer", "timeout", "header", "playerType", "channels", "groups", "core", "activated", "width"}) +@Entity(ignoredColumns = {"type", "group", "url", "logo", "epg", "ua", "click", "referer", "timeout", "header", "playerType", "channels", "groups", "core", "activated", "width"}) public class Live { @NonNull @@ -44,6 +44,8 @@ public class Live { private String epg; @SerializedName("ua") private String ua; + @SerializedName("click") + private String click; @SerializedName("referer") private String referer; @SerializedName("timeout") @@ -137,6 +139,10 @@ public class Live { return TextUtils.isEmpty(referer) ? "" : referer; } + public String getClick() { + return TextUtils.isEmpty(click) ? "" : click; + } + public Integer getTimeout() { return timeout == null ? Constant.TIMEOUT_PLAY : Math.max(timeout, 1) * 1000; } diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Parse.java b/app/src/main/java/com/fongmi/android/tv/bean/Parse.java index 86c380a7d..3aaaa4e01 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Parse.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Parse.java @@ -30,6 +30,7 @@ public class Parse { private Ext ext; private boolean activated; + private String click; public static Parse objectFrom(JsonElement element) { return App.gson().fromJson(element, Parse.class); @@ -95,6 +96,14 @@ public class Parse { this.activated = item.equals(this); } + public String getClick() { + return TextUtils.isEmpty(click) ? "" : click; + } + + public void setClick(String click) { + this.click = click; + } + public Map getHeaders() { return Json.toMap(getExt().getHeader()); } 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 9f5472445..f05a1bf21 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 @@ -45,36 +45,41 @@ public class Result implements Parcelable { @SerializedName("filters") @JsonAdapter(FilterAdapter.class) private LinkedHashMap> filters; + + @SerializedName("url") + @JsonAdapter(UrlAdapter.class) + private Url url; + + @JsonAdapter(MsgAdapter.class) + @SerializedName("msg") + private String msg; + @SerializedName("header") private JsonElement header; @SerializedName("playUrl") private String playUrl; @SerializedName("jxFrom") private String jxFrom; - @SerializedName("parse") - private Integer parse; - @SerializedName("jx") - private Integer jx; @SerializedName("flag") private String flag; @SerializedName("danmaku") private String danmaku; @SerializedName("format") private String format; - @SerializedName("url") - @JsonAdapter(UrlAdapter.class) - private Url url; + @SerializedName("click") + private String click; @SerializedName("key") private String key; @SerializedName("subs") private List subs; @SerializedName("pagecount") private Integer pagecount; + @SerializedName("parse") + private Integer parse; @SerializedName("code") private Integer code; - @JsonAdapter(MsgAdapter.class) - @SerializedName("msg") - private String msg; + @SerializedName("jx") + private Integer jx; public static Result objectFrom(String str) { try { @@ -212,6 +217,14 @@ public class Result implements Parcelable { return format; } + public String getClick() { + return TextUtils.isEmpty(click) ? "" : click; + } + + public void setClick(String click) { + this.click = click; + } + public String getFlag() { return TextUtils.isEmpty(flag) ? "" : flag; } diff --git a/app/src/main/java/com/fongmi/android/tv/player/ParseJob.java b/app/src/main/java/com/fongmi/android/tv/player/ParseJob.java index d369181d8..532d962b1 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/ParseJob.java +++ b/app/src/main/java/com/fongmi/android/tv/player/ParseJob.java @@ -57,6 +57,12 @@ public class ParseJob implements ParseCallback { if (result.getPlayUrl().startsWith("parse:")) parse = ApiConfig.get().getParse(result.getPlayUrl().substring(6)); if (parse == null) parse = Parse.get(0, result.getPlayUrl()); parse.setHeader(result.getHeader()); + parse.setClick(getClick(result)); + } + + private String getClick(Result result) { + if (result.getClick().length() > 0) return result.getClick(); + return ApiConfig.get().getSite(result.getKey()).getClick(); } private void execute(Result result) { @@ -169,15 +175,15 @@ public class ParseJob implements ParseCallback { } private void startWeb(String key, Parse item, String webUrl) { - startWeb(key, item.getName(), item.getHeaders(), item.getUrl() + webUrl); + startWeb(key, item.getName(), item.getHeaders(), item.getUrl() + webUrl, item.getClick()); } private void startWeb(Map headers, String url) { - startWeb("", "", headers, url); + startWeb("", "", headers, url, ""); } - private void startWeb(String key, String from, Map headers, String url) { - App.post(() -> webViews.add(CustomWebView.create(App.get()).start(key, from, headers, url, this, !url.contains("player/?url=")))); + private void startWeb(String key, String from, Map headers, String url, String click) { + App.post(() -> webViews.add(CustomWebView.create(App.get()).start(key, from, headers, url, click, this, !url.contains("player/?url=")))); } private Map getHeader(JsonObject object) { diff --git a/app/src/main/java/com/fongmi/android/tv/ui/custom/CustomWebView.java b/app/src/main/java/com/fongmi/android/tv/ui/custom/CustomWebView.java index 747c9a2ec..ab72a201a 100644 --- a/app/src/main/java/com/fongmi/android/tv/ui/custom/CustomWebView.java +++ b/app/src/main/java/com/fongmi/android/tv/ui/custom/CustomWebView.java @@ -44,6 +44,7 @@ public class CustomWebView extends WebView { private AlertDialog dialog; private Runnable timer; private boolean detect; + private String click; private String from; private String key; @@ -82,12 +83,13 @@ public class CustomWebView extends WebView { } } - public CustomWebView start(String key, String from, Map headers, String url, ParseCallback callback, boolean detect) { + public CustomWebView start(String key, String from, Map headers, String url, String click, ParseCallback callback, boolean detect) { App.post(timer, Constant.TIMEOUT_PARSE_WEB); this.callback = callback; setUserAgent(headers); loadUrl(url, headers); this.detect = detect; + this.click = click; this.from = from; this.key = key; return this; @@ -146,8 +148,7 @@ public class CustomWebView extends WebView { private List getScript(String url) { List script = new ArrayList<>(Sniffer.getScript(Uri.parse(url))); - String click = ApiConfig.get().getSite(key).getClick(); - if (click.length() > 0) script.add(0, click); + if (!TextUtils.isEmpty(click)) script.add(0, click); return script; } @@ -179,7 +180,7 @@ public class CustomWebView extends WebView { } private void onParseAdd(Map headers, String url) { - App.post(() -> CustomWebView.create(App.get()).start(key, from, headers, url, callback, false)); + App.post(() -> CustomWebView.create(App.get()).start(key, from, headers, url, click, callback, false)); } private void onParseSuccess(Map headers, String url) {