support live - part 3

pull/123/head
FongMi 4 years ago
parent 4212d75a24
commit b073d6f8e9
  1. 6
      app/src/main/java/com/fongmi/android/tv/api/ApiConfig.java
  2. 65
      app/src/main/java/com/fongmi/android/tv/api/LiveConfig.java
  3. 27
      app/src/main/java/com/fongmi/android/tv/bean/Channel.java
  4. 9
      app/src/main/java/com/fongmi/android/tv/bean/Group.java
  5. 35
      app/src/main/java/com/fongmi/android/tv/bean/Live.java
  6. 6
      app/src/main/java/com/fongmi/android/tv/bean/Site.java

@ -5,6 +5,7 @@ import android.os.Looper;
import android.text.TextUtils;
import com.fongmi.android.tv.R;
import com.fongmi.android.tv.bean.Channel;
import com.fongmi.android.tv.bean.Config;
import com.fongmi.android.tv.bean.Parse;
import com.fongmi.android.tv.bean.Site;
@ -127,6 +128,11 @@ public class ApiConfig {
if (parse.getName().equals(Prefers.getParse())) setParse(parse);
if (!parses.contains(parse)) parses.add(parse);
}
for (JsonElement element : Json.safeListElement(object, "lives")) {
for (JsonElement channel : element.getAsJsonObject().get("channels").getAsJsonArray()) {
LiveConfig.get().parse(Channel.objectFrom(channel));
}
}
if (home == null) setHome(sites.isEmpty() ? new Site() : sites.get(0));
if (parse == null) setParse(parses.isEmpty() ? new Parse() : parses.get(0));
flags.addAll(Json.safeListString(object, "flags"));

@ -0,0 +1,65 @@
package com.fongmi.android.tv.api;
import android.util.Base64;
import com.fongmi.android.tv.bean.Channel;
import com.fongmi.android.tv.bean.Group;
import com.fongmi.android.tv.bean.Live;
import com.fongmi.android.tv.net.OKHttp;
import java.util.ArrayList;
import java.util.List;
public class LiveConfig {
private List<Live> lives;
private static class Loader {
static volatile LiveConfig INSTANCE = new LiveConfig();
}
public static LiveConfig get() {
return Loader.INSTANCE;
}
public LiveConfig init() {
this.lives = new ArrayList<>();
return this;
}
public List<Live> getLives() {
return lives;
}
public void parse(Channel item) {
if (lives == null) init();
if (item.getUrls().isEmpty()) return;
if (!item.getUrls().get(0).startsWith("proxy://")) return;
try {
String base64 = item.getUrls().get(0).split("ext=")[1];
String url = new String(Base64.decode(base64, Base64.DEFAULT));
Live live = new Live(item.getName(), new ArrayList<>());
parse(OKHttp.newCall(url).execute().body().string(), live);
if (live.getGroups().size() > 0) getLives().add(live);
} catch (Exception ignored) {
ignored.printStackTrace();
}
}
private void parse(String result, Live live) {
for (String line : result.split("\n")) {
String[] split = line.split(",");
if (split.length < 2) continue;
if (line.contains("#genre#")) {
live.getGroups().add(new Group(split[0]));
}
if (split[1].contains("://")) {
Group group = live.getGroups().get(live.getGroups().size() - 1);
Channel channel = new Channel(group.getChannel().size() + 1, split[0], split[1].split("#"));
int index = group.getChannel().indexOf(channel);
if (index != -1) group.getChannel().get(index).getUrls().addAll(channel.getUrls());
else group.getChannel().add(channel);
}
}
}
}

@ -5,20 +5,36 @@ import android.view.View;
import android.widget.ImageView;
import com.fongmi.android.tv.utils.ImgUtil;
import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.google.gson.annotations.SerializedName;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;
public class Channel {
@SerializedName("urls")
private List<String> urls;
@SerializedName("number")
private String number;
@SerializedName("icon")
private String icon;
@SerializedName("name")
private String name;
@SerializedName("type")
private Group type;
@SerializedName("ua")
private String ua;
private boolean select;
public static Channel objectFrom(JsonElement element) {
return new Gson().fromJson(element, Channel.class);
}
public static Channel create(String number) {
return new Channel(String.format(Locale.getDefault(), "%03d", Integer.valueOf(number)));
}
@ -27,9 +43,14 @@ public class Channel {
this.number = number;
}
public Channel(String number, String name) {
this.number = number;
public Channel(int number, String name, String... urls) {
this(number, name, new ArrayList<>(Arrays.asList(urls)));
}
public Channel(int number, String name, List<String> urls) {
this.number = String.format(Locale.getDefault(), "%03d", number);
this.name = name;
this.urls = urls;
}
public List<String> getUrls() {
@ -101,6 +122,6 @@ public class Channel {
if (this == obj) return true;
if (!(obj instanceof Channel)) return false;
Channel it = (Channel) obj;
return getNumber().equals(it.getNumber());
return getNumber().equals(it.getNumber()) || getName().equals(it.getName());
}
}

@ -5,24 +5,31 @@ import android.view.View;
import android.widget.ImageView;
import com.fongmi.android.tv.utils.ImgUtil;
import com.google.gson.annotations.SerializedName;
import java.util.ArrayList;
import java.util.List;
public class Group {
@SerializedName("channel")
private List<Channel> channel;
@SerializedName("icon")
private String icon;
@SerializedName("name")
private String name;
@SerializedName("pass")
private String pass;
private boolean select;
private int position;
public Group(String name) {
this.name = name;
if (name.contains("_")) setPass(name.split("_")[1]);
}
public List<Channel> getChannel() {
return channel;
return channel = channel == null ? new ArrayList<>() : channel;
}
public void setChannel(List<Channel> channel) {

@ -6,32 +6,21 @@ import java.util.List;
public class Live {
@SerializedName("group")
private String group;
@SerializedName("channels")
private List<Channels> channels;
public String getGroup() {
return group;
@SerializedName("name")
private String name;
@SerializedName("groups")
private List<Group> groups;
public Live(String name, List<Group> groups) {
this.name = name;
this.groups = groups;
}
public List<Channels> getChannels() {
return channels;
public String getName() {
return name;
}
public static class Channels {
@SerializedName("name")
private String name;
@SerializedName("urls")
private List<String> urls;
public String getName() {
return name;
}
public List<String> getUrls() {
return urls;
}
public List<Group> getGroups() {
return groups;
}
}

@ -25,7 +25,7 @@ public class Site {
@SerializedName("name")
private String name;
@SerializedName("type")
private int type;
private Integer type;
@SerializedName("api")
private String api;
@SerializedName("playUrl")
@ -80,8 +80,8 @@ public class Site {
this.name = name;
}
public int getType() {
return type;
public Integer getType() {
return type == null ? 0 : type;
}
public void setType(int type) {

Loading…
Cancel
Save