mirror of
https://github.com/nirvana-7777/script.service.ultimate.git
synced 2026-09-23 09:32:22 +02:00
73 lines
2.6 KiB
Python
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)
|