"""Media controller services.""" import os import platform from pathlib import Path from typing import TYPE_CHECKING if TYPE_CHECKING: from .media_controller import MediaController _controller_instance: "MediaController | None" = None def _is_android() -> bool: """Check if running on Android (e.g., via Termux).""" # Check for Android-specific paths and environment android_indicators = [ Path("/system/build.prop").exists(), Path("/data/data/com.termux").exists(), "ANDROID_ROOT" in os.environ, "TERMUX_VERSION" in os.environ, ] return any(android_indicators) def get_media_controller() -> "MediaController": """Get the platform-specific media controller instance. Returns: The media controller for the current platform Raises: RuntimeError: If the platform is not supported """ global _controller_instance if _controller_instance is not None: return _controller_instance system = platform.system() if system == "Windows": from .windows_media import WindowsMediaController from ..config import settings _controller_instance = WindowsMediaController(audio_device=settings.audio_device) elif system == "Linux": # Check if running on Android if _is_android(): from .android_media import AndroidMediaController _controller_instance = AndroidMediaController() else: from .linux_media import LinuxMediaController _controller_instance = LinuxMediaController() elif system == "Darwin": # macOS from .macos_media import MacOSMediaController _controller_instance = MacOSMediaController() else: raise RuntimeError(f"Unsupported platform: {system}") return _controller_instance def get_current_album_art() -> bytes | None: """Get the current album art bytes (Windows only for now).""" system = platform.system() if system == "Windows": from .windows_media import get_current_album_art as _get_art return _get_art() return None def get_audio_devices() -> list[dict[str, str]]: """Get list of available audio output devices (Windows only for now).""" system = platform.system() if system == "Windows": from .windows_media import WindowsMediaController return WindowsMediaController.get_audio_devices() return [] __all__ = ["get_media_controller", "get_current_album_art", "get_audio_devices"]