diff --git a/src/dlhdhr/epg/__init__.py b/src/dlhdhr/epg/__init__.py index d372a29..1689a2b 100644 --- a/src/dlhdhr/epg/__init__.py +++ b/src/dlhdhr/epg/__init__.py @@ -27,9 +27,11 @@ class EPG: return [] async def get_channel_icon_from_epg(self, channel: DLHDChannel) -> str | None: - if channel.country_code == "uk": + if channel.country_code == "us": + return await self.zap2it.get_channel_icon(channel) + elif channel.country_code == "uk": if channel.epgsky_id: - return f"https://d2n0069hmnqmmx.cloudfront.net/epgdata/1.0/newchanlogos/80/35/skychb{channel.epgsky_id}.png" + return self.epgsky.get_channel_icon(channel) return None async def generate_xmltv(self, channels: Iterable[DLHDChannel]) -> bytes: @@ -42,8 +44,6 @@ class EPG: programs = await self.get_channel_programs(channel) - # Note: The order of the elements in the matters - # title, desc, date, category, icon, episode-num, rating for program in programs: node = program.to_xmltv(channel) if node: diff --git a/src/dlhdhr/epg/epgsky.py b/src/dlhdhr/epg/epgsky.py index 6c4fd37..e30b94a 100644 --- a/src/dlhdhr/epg/epgsky.py +++ b/src/dlhdhr/epg/epgsky.py @@ -107,3 +107,8 @@ class EPGSky: return [] return self._listings[channel.epgsky_id] + + def get_channel_icon(self, channel: DLHDChannel) -> str | None: + if not channel.epgsky_id: + return None + return f"https://d2n0069hmnqmmx.cloudfront.net/epgdata/1.0/newchanlogos/80/35/skychb{channel.epgsky_id}.png" diff --git a/src/dlhdhr/epg/zap2it.py b/src/dlhdhr/epg/zap2it.py index 5d4b692..1cdf1b9 100644 --- a/src/dlhdhr/epg/zap2it.py +++ b/src/dlhdhr/epg/zap2it.py @@ -15,6 +15,7 @@ class Zap2it: _BASE_URL = "https://tvlistings.zap2it.com/api/" _listings: dict[str, Program] = field(default_factory=dict) _last_fetch: float = 0 + _channel_icons: dict[str, str] = field(default_factory=dict) def _get_client(self) -> httpx.AsyncClient: return httpx.AsyncClient( @@ -77,6 +78,12 @@ class Zap2it: if call_sign not in events: events[call_sign] = {} + if ch_data.get("thumbnail"): + thumbnail = ch_data["thumbnail"] + if thumbnail.startswith("//"): + thumbnail = f"https:{thumbnail}" + self._channel_icons[call_sign] = thumbnail + for evt in ch_data["events"]: key = (evt["startTime"], evt["endTime"]) if key not in events[call_sign]: @@ -149,3 +156,10 @@ class Zap2it: return [] return self._listings[channel.call_sign] + + async def get_channel_icon(self, channel: DLHDChannel) -> str | None: + if not channel.call_sign: + return None + + await self._refresh_listings() + return self._channel_icons.get(channel.call_sign)