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 81e5c7415..4afb948a9 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 @@ -27,6 +27,10 @@ import java.util.Set; public class EpgParser { + private static final SimpleDateFormat formatTime = new SimpleDateFormat("HH:mm", Locale.getDefault()); + private static final SimpleDateFormat formatDate = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()); + private static final SimpleDateFormat formatFull = new SimpleDateFormat("yyyyMMddHHmmss Z", Locale.getDefault()); + public static boolean start(Live live, String url) throws Exception { if (!url.contains("xml") && !url.contains("gz")) return false; File file = Path.epg(Uri.parse(url).getLastPathSegment()); @@ -60,9 +64,6 @@ public class EpgParser { Set exist = new HashSet<>(); Map epgMap = new HashMap<>(); Map mapping = new HashMap<>(); - SimpleDateFormat formatTime = new SimpleDateFormat("HH:mm", Locale.getDefault()); - SimpleDateFormat formatDate = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()); - SimpleDateFormat formatFull = new SimpleDateFormat("yyyyMMddHHmmss Z", Locale.getDefault()); 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()); @@ -76,13 +77,7 @@ public class EpgParser { if (!exist.contains(key)) continue; if (!isToday(startDate) && !isToday(endDate)) continue; if (!epgMap.containsKey(key)) epgMap.put(key, Epg.create(key, today)); - EpgData epgData = new EpgData(); - epgData.setTitle(Trans.s2t(programme.getTitle())); - epgData.setStart(formatTime.format(startDate)); - epgData.setEnd(formatTime.format(endDate)); - epgData.setStartTime(startDate.getTime()); - epgData.setEndTime(endDate.getTime()); - epgMap.get(key).getList().add(epgData); + epgMap.get(key).getList().add(getEpgData(startDate, endDate, programme)); } for (Group group : live.getGroups()) { for (Channel channel : group.getChannel()) { @@ -92,4 +87,39 @@ public class EpgParser { } } } + + public static Epg getEpg(String xml, String key) throws Exception { + Tv tv = new Persister().read(Tv.class, xml, false); + Epg epg = Epg.create(key, getDate(tv.getDate())); + for (Tv.Programme programme : tv.getProgramme()) epg.getList().add(getEpgData(programme)); + return epg; + } + + private static String getDate(String date) { + try { + return formatDate.format(formatFull.parse(date)); + } catch (Exception e) { + return formatDate.format(new Date()); + } + } + + private static EpgData getEpgData(Tv.Programme programme) throws Exception { + Date startDate = formatFull.parse(programme.getStart()); + Date endDate = formatFull.parse(programme.getStop()); + return getEpgData(startDate, endDate, programme); + } + + private static EpgData getEpgData(Date startDate, Date endDate, Tv.Programme programme) { + try { + EpgData epgData = new EpgData(); + epgData.setTitle(Trans.s2t(programme.getTitle())); + epgData.setStart(formatTime.format(startDate)); + epgData.setEnd(formatTime.format(endDate)); + epgData.setStartTime(startDate.getTime()); + epgData.setEndTime(endDate.getTime()); + return epgData; + } catch (Exception e) { + return new EpgData(); + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Epg.java b/app/src/main/java/com/fongmi/android/tv/bean/Epg.java index ec98d0323..cdb2a5653 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Epg.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Epg.java @@ -3,7 +3,9 @@ package com.fongmi.android.tv.bean; import android.text.TextUtils; import com.fongmi.android.tv.App; +import com.fongmi.android.tv.api.EpgParser; import com.fongmi.android.tv.utils.Util; +import com.github.catvod.utils.Json; import com.github.catvod.utils.Trans; import com.google.gson.annotations.SerializedName; @@ -24,15 +26,12 @@ public class Epg { private int width; - public static Epg objectFrom(String str, String key, SimpleDateFormat format) { - try { - Epg item = App.gson().fromJson(str, Epg.class); - item.setTime(format); - item.setKey(key); - return item; - } catch (Exception e) { - return new Epg(); - } + public static Epg objectFrom(String str, String key, SimpleDateFormat format) throws Exception { + if (!Json.isObj(key)) return EpgParser.getEpg(str, key); + Epg item = App.gson().fromJson(str, Epg.class); + item.setTime(format); + item.setKey(key); + return item; } public static Epg create(String key, String date) { 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 dff815469..72dc6798d 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 @@ -13,12 +13,19 @@ import java.util.List; @Root(name = "tv", strict = false) public class Tv { + @Attribute(name = "date", required = false) + private String date; + @ElementList(entry = "channel", required = false, inline = true) private List channel; @ElementList(entry = "programme", required = false, inline = true) private List programme; + public String getDate() { + return TextUtils.isEmpty(date) ? "" : date; + } + public List getChannel() { return channel == null ? Collections.emptyList() : channel; }