diff --git a/lib/streaming_providers/base/provider.py b/lib/streaming_providers/base/provider.py index b3c8849..5fc7290 100644 --- a/lib/streaming_providers/base/provider.py +++ b/lib/streaming_providers/base/provider.py @@ -402,6 +402,20 @@ class StreamingProvider(ABC): """Return True if provider uses truly dynamic manifests""" pass + @property + @abstractmethod + def implements_epg(self) -> bool: + """ + Indicates whether this provider has its own EPG implementation. + If False, the generic EPG manager will be used. + + Override in subclass and return True if provider has native EPG. + + Returns: + True if provider implements its own EPG, False to use generic EPG + """ + pass + @abstractmethod def get_channels(self, **kwargs) -> List[StreamingChannel]: """Fetch channels from the provider""" diff --git a/lib/streaming_providers/providers/hrti/provider.py b/lib/streaming_providers/providers/hrti/provider.py index 5a1f184..84213c3 100644 --- a/lib/streaming_providers/providers/hrti/provider.py +++ b/lib/streaming_providers/providers/hrti/provider.py @@ -61,6 +61,10 @@ class HRTiProvider(StreamingProvider): # HRTi requires session authorization for manifests return True + @property + def implements_epg(self) -> bool: + return False + def _get_hrti_authenticated_headers(self) -> Dict[str, str]: """ Get headers with HRTi authentication for API requests diff --git a/lib/streaming_providers/providers/joyn/provider.py b/lib/streaming_providers/providers/joyn/provider.py index 9a7eac0..ea34a3e 100644 --- a/lib/streaming_providers/providers/joyn/provider.py +++ b/lib/streaming_providers/providers/joyn/provider.py @@ -175,6 +175,10 @@ class JoynProvider(StreamingProvider): def uses_dynamic_manifests(self) -> bool: return False + @property + def implements_epg(self) -> bool: + return False + def authenticate(self, **kwargs) -> str: """Authenticate and return bearer token""" self.bearer_token = self.authenticator.get_bearer_token( diff --git a/lib/streaming_providers/providers/magenta2/provider.py b/lib/streaming_providers/providers/magenta2/provider.py index 3bf0794..394085a 100644 --- a/lib/streaming_providers/providers/magenta2/provider.py +++ b/lib/streaming_providers/providers/magenta2/provider.py @@ -396,6 +396,10 @@ class Magenta2Provider(StreamingProvider): def uses_dynamic_manifests(self) -> bool: return False + @property + def implements_epg(self) -> bool: + return False + def get_discovery_status(self) -> Dict[str, Any]: """Get discovery and configuration status""" if not self.discovery_service: diff --git a/lib/streaming_providers/providers/magentaeu/constants.py b/lib/streaming_providers/providers/magentaeu/constants.py index dc1b98a..3a81499 100644 --- a/lib/streaming_providers/providers/magentaeu/constants.py +++ b/lib/streaming_providers/providers/magentaeu/constants.py @@ -13,6 +13,7 @@ DEFAULT_COUNTRY = 'at' MAX_TV_LOGO = 'https://www.lyngsat.com/logo/corp/mm/max-tv-hr.png' MAGENTA_TV_PL_LOGO = 'https://magentatv.pl/client/assets/6700c91b4408a2abe2a4.webp' +MAGENTA_TV_AT_LOGO = 'https://m.media-amazon.com/images/I/51XY6Cq3ANL.png' # Country-specific configuration COUNTRY_CONFIG = { diff --git a/lib/streaming_providers/providers/magentaeu/provider.py b/lib/streaming_providers/providers/magentaeu/provider.py index d99c6e3..3d0c3fc 100644 --- a/lib/streaming_providers/providers/magentaeu/provider.py +++ b/lib/streaming_providers/providers/magentaeu/provider.py @@ -19,6 +19,7 @@ from .constants import ( DEFAULT_REQUEST_TIMEOUT, DEFAULT_MAX_RETRIES, DRM_SYSTEM_WIDEVINE, + MAGENTA_TV_AT_LOGO, MAGENTA_TV_PL_LOGO, WV_URL, CONTENT_TYPE_LIVE, @@ -109,6 +110,8 @@ class MagentaProvider(StreamingProvider): @property def provider_logo(self) -> str: + if self.country.lower() == 'at': + return MAGENTA_TV_AT_LOGO if self.country.lower() == 'hr': return MAX_TV_LOGO elif self.country.lower() == 'pl': @@ -120,6 +123,10 @@ class MagentaProvider(StreamingProvider): def uses_dynamic_manifests(self) -> bool: return False + @property + def implements_epg(self) -> bool: + return False + def authenticate(self, **kwargs) -> str: logger.info(f"=== MagentaProvider.authenticate() CALLED with kwargs: {kwargs} ===") self.bearer_token = self.authenticator.get_bearer_token(force_refresh=kwargs.get('force_refresh', False)) diff --git a/lib/streaming_providers/providers/rtlplus/provider.py b/lib/streaming_providers/providers/rtlplus/provider.py index 0084ed4..2f6aedf 100644 --- a/lib/streaming_providers/providers/rtlplus/provider.py +++ b/lib/streaming_providers/providers/rtlplus/provider.py @@ -65,6 +65,10 @@ class RTLPlusProvider(StreamingProvider): # RTL+ provides relatively stable manifest URLs that can be fetched and cached return False + @property + def implements_epg(self) -> bool: + return False + # ============================================================================ # OPTION 1: Provider-specific method (RECOMMENDED - No signature conflict) # ============================================================================