#!/usr/bin/env python3 """Gemeinsame Schnittstelle fuer Kodi-Plugins.""" from __future__ import annotations from abc import ABC, abstractmethod from typing import Any, Callable, Dict, List, Optional, Set, Tuple class BasisPlugin(ABC): """Abstrakte Basisklasse fuer alle Integrationen.""" name: str version: str = "0.0.0" prefer_source_metadata: bool = False @abstractmethod async def search_titles( self, query: str, progress_callback: Optional[Callable[[str, Optional[int]], Any]] = None, ) -> List[str]: """Liefert eine Liste aller Treffer fuer die Suche.""" @abstractmethod def seasons_for(self, title: str) -> List[str]: """Liefert alle Staffeln zu einem Titel.""" @abstractmethod def episodes_for(self, title: str, season: str) -> List[str]: """Liefert alle Folgen zu einer Staffel.""" def stream_link_for(self, title: str, season: str, episode: str) -> Optional[str]: """Optional: Liefert den Stream-Link fuer eine konkrete Folge.""" return None def metadata_for(self, title: str) -> Tuple[Dict[str, str], Dict[str, str], Optional[List[Any]]]: """Optional: Liefert Info-Labels, Art und Cast fuer einen Titel.""" return {}, {}, None def resolve_stream_link(self, link: str) -> Optional[str]: """Optional: Folgt einem Stream-Link und liefert die finale URL.""" return None def genres(self) -> List[str]: """Optional: Liefert eine Liste an Genres (falls verfügbar).""" return [] def titles_for_genre(self, genre: str) -> List[str]: """Optional: Liefert alle Serientitel zu einem Genre.""" return [] def capabilities(self) -> Set[str]: """Optional: Liefert eine Menge an Features/Capabilities dieses Plugins. Bekannte Werte: - 'popular_series' – Plugin hat beliebte Serien/Filme - 'latest_titles' – Plugin hat neu hinzugefuegte Titel - 'year_filter' – Plugin unterstuetzt Jahr-Filter - 'country_filter' – Plugin unterstuetzt Land-Filter - 'collections' – Plugin hat Sammlungen/Filmreihen - 'tags' – Plugin hat Tag/Schlagwort-Suche - 'random' – Plugin kann einen zufaelligen Titel liefern """ return set() def popular_series(self) -> List[str]: """Optional: Liefert eine Liste beliebter Serien (als Titel-Strings).""" return [] # ------------------------------------------------------------------ # Neue Felder fuer "Neue Titel"-Menü # ------------------------------------------------------------------ def latest_titles(self, page: int = 1) -> List[str]: """Optional: Liefert neu hinzugefuegte Titel (Filme oder Serien). Capability: 'latest_titles' """ return [] # ------------------------------------------------------------------ # Jahr-Filter # ------------------------------------------------------------------ def years_available(self) -> List[str]: """Optional: Liefert verfuegbare Erscheinungsjahre (z.B. ['2026', '2025', ...]). Capability: 'year_filter' """ return [] def titles_for_year(self, year: str, page: int = 1) -> List[str]: """Optional: Liefert Titel fuer ein bestimmtes Erscheinungsjahr.""" return [] # ------------------------------------------------------------------ # Land-Filter # ------------------------------------------------------------------ def countries_available(self) -> List[str]: """Optional: Liefert verfuegbare Produktionslaender. Capability: 'country_filter' """ return [] def titles_for_country(self, country: str, page: int = 1) -> List[str]: """Optional: Liefert Titel fuer ein bestimmtes Produktionsland.""" return [] # ------------------------------------------------------------------ # Sammlungen / Collections # ------------------------------------------------------------------ def collections(self) -> List[str]: """Optional: Liefert verfuegbare Sammlungen/Filmreihen. Capability: 'collections' """ return [] def titles_for_collection(self, collection: str, page: int = 1) -> List[str]: """Optional: Liefert Titel einer Sammlung/Filmreihe.""" return [] # ------------------------------------------------------------------ # Tags / Schlagworte # ------------------------------------------------------------------ def tags(self) -> List[str]: """Optional: Liefert verfuegbare Schlagworte/Tags. Capability: 'tags' """ return [] def titles_for_tag(self, tag: str, page: int = 1) -> List[str]: """Optional: Liefert Titel zu einem Schlagwort/Tag.""" return [] # ------------------------------------------------------------------ # Zufaelliger Titel # ------------------------------------------------------------------ def random_title(self) -> Optional[str]: """Optional: Liefert einen zufaelligen Titel. Capability: 'random' """ return None