From d3ba88de4821463519aee0be6b48375d01270278 Mon Sep 17 00:00:00 2001 From: brettlangdon Date: Sat, 23 Dec 2023 16:56:32 -0500 Subject: [PATCH] fix xmltv generation --- src/dlhdhr/xmltv.py | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/src/dlhdhr/xmltv.py b/src/dlhdhr/xmltv.py index 1c23e14..5c5051e 100644 --- a/src/dlhdhr/xmltv.py +++ b/src/dlhdhr/xmltv.py @@ -8,7 +8,10 @@ async def generate_xmltv(channels: list[DLHDChannel], zap2it: Zap2it) -> bytes: tv = Element("tv", attrib={"generator-info-name": "dlhdhr"}) for channel in channels: - ch_node = SubElement(tv, "channel", attrib={"id": channel.number}) + if not channel.tvg_id: + continue + + ch_node = SubElement(tv, "channel", attrib={"id": channel.tvg_id}) SubElement(ch_node, "display-name", attrib={"lang": "en"}).text = channel.name SubElement(ch_node, "lcn").text = channel.number @@ -16,20 +19,22 @@ async def generate_xmltv(channels: list[DLHDChannel], zap2it: Zap2it) -> bytes: if not channel.call_sign: continue + if not channel.tvg_id: + continue + z_channel = await zap2it.get_channel(channel.call_sign) if not z_channel: continue - if not channel.tvg_id: - continue - + # Note: The order of the elements in the matters + # title, desc, date, category, icon, episode-num, rating for event in z_channel.events: start_time = event.start_time.strftime("%Y%m%d%H%M%S %z") end_time = event.start_time.strftime("%Y%m%d%H%M%S %z") programme = SubElement( - tv, "programme", attrib={"start": start_time, "stop": end_time, "channel": channel.number} + tv, "programme", attrib={"start": start_time, "stop": end_time, "channel": channel.tvg_id} ) if event.program.title: SubElement(programme, "title", attrib={"lang": "en"}).text = event.program.title @@ -39,17 +44,18 @@ async def generate_xmltv(channels: list[DLHDChannel], zap2it: Zap2it) -> bytes: if event.program.release_year: SubElement(programme, "date").text = event.program.release_year - if event.rating: - rating = SubElement(programme, "rating", attrib={"system": "MPAA"}) - SubElement(rating, "value").text = event.rating + for tag in event.tags: + SubElement(programme, "category", attrib={"lang": "en"}).text = tag + + if event.thumbnail: + SubElement(programme, "icon", attrib={"src": event.thumbnail}) if event.program.season or event.program.episode: e_id = ".".join([event.program.season or "", event.program.episode or "", ""]) SubElement(programme, "episode-num", attrib={"system": "xmltv_ns"}).text = e_id - if event.thumbnail: - SubElement(programme, "icon", attrib={"src": event.thumbnail}) + if event.rating: + rating = SubElement(programme, "rating", attrib={"system": "MPAA"}) + SubElement(rating, "value").text = event.rating - for tag in event.tags: - SubElement(programme, "category", attrib={"lang": "en"}).text = tag return tostring(tv)