Support multiple display-name and icon

pull/590/head
FongMi 1 year ago
parent 3708d09c61
commit 73203f7db1
  1. 21
      app/src/main/java/com/fongmi/android/tv/api/EpgParser.java
  2. 47
      app/src/main/java/com/fongmi/android/tv/bean/Tv.java
  3. 2
      app/src/main/java/com/fongmi/android/tv/model/LiveViewModel.java

@ -62,30 +62,37 @@ public class EpgParser {
private static void readXml(Live live, File file) throws Exception {
Set<String> exist = new HashSet<>();
Map<String, Epg> epgMap = new HashMap<>();
Map<String, String> mapping = new HashMap<>();
Map<String, String> srcMap = new HashMap<>();
Map<String, Tv.Channel> mapping = new HashMap<>();
String today = formatDate.format(new Date());
Tv tv = new Persister().read(Tv.class, Path.read(file), false);
for (Group group : live.getGroups()) for (Channel channel : group.getChannel()) exist.add(channel.getTvgName());
for (Tv.Channel channel : tv.getChannel()) mapping.put(channel.getId(), channel.getDisplayName());
for (Tv.Channel channel : tv.getChannel()) mapping.put(channel.getId(), channel);
for (Tv.Programme programme : tv.getProgramme()) {
String key = programme.getChannel();
String name = mapping.get(programme.getChannel());
if (!exist.contains(key) && exist.contains(name)) key = name;
Tv.Channel channel = mapping.get(key);
if (!exist.contains(key)) key = find(exist, channel);
Date startDate = formatFull.parse(programme.getStart());
Date endDate = formatFull.parse(programme.getStop());
if (!exist.contains(key) || !isToday(startDate)) continue;
if (!epgMap.containsKey(key)) epgMap.put(key, Epg.create(key, today));
epgMap.get(key).getList().add(getEpgData(startDate, endDate, programme));
if (channel != null && channel.hasSrc()) srcMap.put(key, channel.getSrc());
}
for (Group group : live.getGroups()) {
for (Channel channel : group.getChannel()) {
if (epgMap.containsKey(channel.getTvgName())) {
channel.setData(epgMap.get(channel.getTvgName()));
}
if (epgMap.containsKey(channel.getTvgName())) channel.setData(epgMap.get(channel.getTvgName()));
if (srcMap.containsKey(channel.getTvgName())) channel.setLogo(srcMap.get(channel.getTvgName()));
}
}
}
private static String find(Set<String> exist, Tv.Channel channel) {
if (channel == null) return "";
for (Tv.DisplayName name : channel.getDisplayName()) if (exist.contains(name.getText())) return name.getText();
return "";
}
public static Epg getEpg(String xml, String key) throws Exception {
Tv tv = new Persister().read(Tv.class, xml, false);
Epg epg = Epg.create(key, formatDate.format(formatFull.parse(tv.getDate())));

@ -6,7 +6,9 @@ import org.simpleframework.xml.Attribute;
import org.simpleframework.xml.Element;
import org.simpleframework.xml.ElementList;
import org.simpleframework.xml.Root;
import org.simpleframework.xml.Text;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@ -40,15 +42,30 @@ public class Tv {
@Attribute(name = "id", required = false)
private String id;
@Element(name = "display-name", required = false)
private String displayName;
@Element(name = "icon", required = false)
private Icon icon;
@ElementList(entry = "display-name", required = false, inline = true)
private List<DisplayName> displayName;
public String getId() {
return TextUtils.isEmpty(id) ? "" : id;
}
public String getDisplayName() {
return TextUtils.isEmpty(displayName) ? "" : displayName;
private Icon getIcon() {
return icon == null ? new Icon() : icon;
}
public List<DisplayName> getDisplayName() {
return displayName == null ? new ArrayList<>() : displayName;
}
public String getSrc() {
return getIcon().getSrc();
}
public boolean hasSrc() {
return !getIcon().getSrc().isEmpty();
}
}
@ -83,4 +100,26 @@ public class Tv {
return TextUtils.isEmpty(title) ? "" : title;
}
}
@Root(name = "icon")
public static class Icon {
@Attribute(name = "src")
private String src;
public String getSrc() {
return TextUtils.isEmpty(src) ? "" : src;
}
}
@Root(name = "display-name")
public static class DisplayName {
@Text
private String text;
public String getText() {
return TextUtils.isEmpty(text) ? "" : text;
}
}
}

@ -77,7 +77,7 @@ public class LiveViewModel extends ViewModel {
String date = formatDate.format(new Date());
String url = item.getEpg().replace("{date}", date);
execute(EPG, () -> {
if (!url.isEmpty() && !item.getData().equal(date)) item.setData(Epg.objectFrom(OkHttp.string(url), item.getTvgName(), formatTime));
if (url.startsWith("http") && !item.getData().equal(date)) item.setData(Epg.objectFrom(OkHttp.string(url), item.getTvgName(), formatTime));
return item.getData().selected();
});
}

Loading…
Cancel
Save