Files
script.service.ultimate/lib/streaming_providers/base/epg_operations.py
T
2026-01-16 12:24:41 +01:00

73 lines
2.6 KiB
Python

# ============================================================================
# streaming_providers/base/epg_operations.py
"""
EPG-related operations.
"""
from typing import Dict, List, Optional
from .epg import EPGManager
from .utils.logger import logger
class EPGOperations:
"""Handles all EPG-related operations."""
def __init__(self, registry):
self.registry = registry
self.epg_manager = EPGManager()
logger.debug("EPGOperations: Initialized")
def get_channel_epg(self, provider_name: str, channel_id: str, **kwargs) -> List[Dict]:
"""Get EPG data for a specific channel."""
provider = self.registry.get_provider(provider_name)
if not provider:
raise ValueError(f"Provider '{provider_name}' not found or disabled")
if provider.implements_epg:
logger.debug(f"Using native EPG for '{provider_name}'")
epg_data = provider.get_epg(channel_id, **kwargs)
else:
logger.debug(f"Using generic EPG for '{provider_name}'")
epg_data = self.epg_manager.get_epg(
provider_name=provider_name,
channel_id=channel_id,
start_time=kwargs.get("start_time"),
end_time=kwargs.get("end_time"),
)
logger.debug(f"Retrieved {len(epg_data)} EPG entries for '{channel_id}'")
return epg_data
def get_provider_epg_xmltv(self, provider_name: str, **kwargs) -> Optional[str]:
"""Get complete EPG data in XMLTV format."""
provider = self.registry.get_provider(provider_name)
if not provider:
raise ValueError(f"Provider '{provider_name}' not found or disabled")
if provider.implements_epg:
return provider.get_epg_xmltv(**kwargs)
logger.warning(f"Provider '{provider_name}' has no XMLTV EPG")
return None
def clear_epg_cache(self) -> bool:
"""Clear the generic EPG cache."""
return self.epg_manager.clear_cache()
def reload_epg_mapping(self) -> bool:
"""Reload EPG channel mapping."""
return self.epg_manager.reload_mapping()
def get_epg_cache_info(self) -> Optional[Dict]:
"""Get EPG cache information."""
return self.epg_manager.get_cache_info()
def get_epg_mapping_stats(self) -> Dict:
"""Get EPG mapping statistics."""
return self.epg_manager.get_mapping_stats()
def has_epg_mapping(self, provider_name: str, channel_id: str) -> bool:
"""Check if EPG mapping exists."""
return self.epg_manager.has_mapping_for_channel(provider_name, channel_id)