mirror of
https://github.com/nirvana-7777/script.service.ultimate.git
synced 2026-09-16 06:02:35 +02:00
126 lines
4.6 KiB
Python
126 lines
4.6 KiB
Python
# lib/streaming_providers/__init__.py
|
|
import importlib
|
|
from typing import Dict, Type
|
|
import os
|
|
import sys
|
|
|
|
# Import the centralized logger
|
|
from .base.utils.logger import logger
|
|
|
|
AVAILABLE_PROVIDERS: Dict[str, Type] = {}
|
|
|
|
|
|
def _discover_providers():
|
|
"""Kodi-compatible provider discovery"""
|
|
try:
|
|
# Import the base provider class first
|
|
from .base.provider import StreamingProvider
|
|
|
|
# Get the current package path
|
|
current_dir = os.path.dirname(__file__)
|
|
providers_dir = os.path.join(current_dir, 'providers')
|
|
|
|
logger.info(f"Looking for providers in: {providers_dir}")
|
|
|
|
# Check if providers directory exists
|
|
if not os.path.exists(providers_dir):
|
|
logger.error(f"Providers directory does not exist: {providers_dir}")
|
|
return
|
|
|
|
# Add the lib directory to Python path if not already there
|
|
lib_dir = os.path.dirname(current_dir)
|
|
if lib_dir not in sys.path:
|
|
sys.path.insert(0, lib_dir)
|
|
logger.debug(f"Added lib directory to Python path: {lib_dir}")
|
|
|
|
# Iterate through subdirectories in providers folder
|
|
for item in os.listdir(providers_dir):
|
|
provider_path = os.path.join(providers_dir, item)
|
|
|
|
# Skip if not a directory or if it starts with __
|
|
if not os.path.isdir(provider_path) or item.startswith('__'):
|
|
continue
|
|
|
|
# Check if __init__.py exists in the provider directory
|
|
init_file = os.path.join(provider_path, '__init__.py')
|
|
if not os.path.exists(init_file):
|
|
logger.debug(f"No __init__.py found in {item}, skipping")
|
|
continue
|
|
|
|
try:
|
|
logger.debug(f"Attempting to import provider: {item}")
|
|
|
|
# Import the provider module using absolute import
|
|
module_name = f'streaming_providers.providers.{item}'
|
|
module = importlib.import_module(module_name)
|
|
|
|
# Find provider classes in the module
|
|
provider_found = False
|
|
for attr_name in dir(module):
|
|
attr = getattr(module, attr_name)
|
|
if (isinstance(attr, type) and
|
|
issubclass(attr, StreamingProvider) and
|
|
attr != StreamingProvider):
|
|
AVAILABLE_PROVIDERS[item] = attr
|
|
logger.info(f"Discovered provider: {item} -> {attr_name}")
|
|
provider_found = True
|
|
break
|
|
|
|
if not provider_found:
|
|
logger.warning(f"No valid provider class found in {item}")
|
|
|
|
except ImportError as e:
|
|
logger.error(f"Could not import provider {item}: {e}")
|
|
logger.debug(f"Python path: {sys.path}")
|
|
except Exception as e:
|
|
logger.error(f"Error processing provider {item}: {e}")
|
|
|
|
except Exception as e:
|
|
logger.error(f"Error during provider discovery: {e}")
|
|
logger.debug(f"Current working directory: {os.getcwd()}")
|
|
logger.debug(f"Python path: {sys.path}")
|
|
|
|
|
|
def get_configured_manager(country: str = 'de') -> 'ProviderManager':
|
|
"""
|
|
Get manager with settings-aware providers
|
|
|
|
Args:
|
|
country: Default country code for providers without country detection (default: 'de')
|
|
|
|
Returns:
|
|
Configured ProviderManager instance with all detected providers
|
|
"""
|
|
from .base.manager import ProviderManager
|
|
from .base.settings.settings_manager import SettingsManager
|
|
|
|
# Create manager
|
|
manager = ProviderManager()
|
|
|
|
# Initialize settings manager to detect providers
|
|
settings_manager = SettingsManager(enable_kodi_integration=True)
|
|
|
|
# Detect providers from Kodi (if available) or use all available providers
|
|
detected_providers = None
|
|
|
|
if settings_manager.kodi_bridge and settings_manager.kodi_bridge.is_kodi_environment():
|
|
detected_providers = settings_manager.kodi_bridge.detect_all_providers_from_kodi()
|
|
logger.info(f"Detected providers from Kodi: {detected_providers}")
|
|
else:
|
|
logger.info(f"Not in Kodi environment, will register all available providers with default country '{country}'")
|
|
|
|
# Use the new discover_providers method with detected providers
|
|
registered = manager.discover_providers(
|
|
country=country,
|
|
detected_providers=detected_providers
|
|
)
|
|
|
|
logger.info(f"Registered {len(registered)} providers: {registered}")
|
|
|
|
return manager
|
|
|
|
|
|
# Initial discovery
|
|
_discover_providers()
|
|
|
|
__all__ = ['AVAILABLE_PROVIDERS', 'get_configured_manager'] |