diff --git a/app/src/main/java/com/fongmi/android/tv/api/EpgParser.java b/app/src/main/java/com/fongmi/android/tv/api/EpgParser.java index eac7f2d0a..e3b01245a 100644 --- a/app/src/main/java/com/fongmi/android/tv/api/EpgParser.java +++ b/app/src/main/java/com/fongmi/android/tv/api/EpgParser.java @@ -62,30 +62,37 @@ public class EpgParser { private static void readXml(Live live, File file) throws Exception { Set exist = new HashSet<>(); Map epgMap = new HashMap<>(); - Map mapping = new HashMap<>(); + Map srcMap = new HashMap<>(); + Map 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 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()))); diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Tv.java b/app/src/main/java/com/fongmi/android/tv/bean/Tv.java index 72dc6798d..d7f19c3ac 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Tv.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Tv.java @@ -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; 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 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; + } + } } diff --git a/app/src/main/java/com/fongmi/android/tv/model/LiveViewModel.java b/app/src/main/java/com/fongmi/android/tv/model/LiveViewModel.java index 3310a7725..dd111c432 100644 --- a/app/src/main/java/com/fongmi/android/tv/model/LiveViewModel.java +++ b/app/src/main/java/com/fongmi/android/tv/model/LiveViewModel.java @@ -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(); }); }