# ViewIT Plugin Entwicklung (`addon/plugins/*_plugin.py`) Diese Datei zeigt, wie Plugins im Projekt aufgebaut sind und wie sie mit dem Router zusammenarbeiten. ## Grundlagen - Ein Plugin ist eine Python Datei in `addon/plugins/`. - Dateien mit `_` Prefix werden nicht geladen. - Plugin Klasse erbt von `BasisPlugin`. - Optional: `Plugin = ` als klarer Einstiegspunkt. ## Pflichtmethoden Jedes Plugin implementiert: - `async search_titles(query: str, progress_callback: Callable[[str, Optional[int]], Any] | None = None) -> list[str>` - `seasons_for(title: str) -> list[str]` - `episodes_for(title: str, season: str) -> list[str]` ## Wichtige optionale Methoden - `capabilities()` - `genres()` - `popular_series()` - `latest_episodes(page: int = 1)` - `titles_for_genre(genre: str)` - `titles_for_genre_page(genre: str, page: int)` - `titles_for_genre_group_page(...)` / `genre_has_more(...)` (Paging / Alphabet-Gruppen) - `stream_link_for(...)` - `stream_link_for_url(...)` - `available_hosters_for(...)` - `available_hosters_for_url(...)` - `episode_url_for(...)` - `series_url_for_title(...)` - `remember_series_url(...)` - `metadata_for(...)` ## Film Provider Standard Wenn keine echten Staffeln existieren: - `seasons_for(title)` gibt `['Film']` - `episodes_for(title, 'Film')` gibt `['Stream']` ## Capabilities Ein Plugin kann Features melden ueber `capabilities()`. Bekannte Werte: - `popular_series` - `genres` - `latest_episodes` - `new_titles` - `alpha` - `series_catalog` ## Suche Aktuelle Regeln fuer Suchtreffer: - Match auf Titel - Wortbasiert - Keine Teilwort Treffer im selben Wort - Beschreibungen nicht fuer Match nutzen Siehe als Referenz: - `addon/plugins/_template_plugin.py` (Minimal-Template) - `addon/plugins/serienstream_plugin.py` - `addon/plugins/aniworld_plugin.py` - `addon/plugins/topstreamfilm_plugin.py` ## Settings Pro Plugin meist `*_base_url`. Beispiele: - `serienstream_base_url` - `aniworld_base_url` - `einschalten_base_url` - `topstream_base_url` - `filmpalast_base_url` - `doku_streams_base_url` ## Playback Flow 1. Episode oder Film auswaehlen. 2. Optional Hosterliste anzeigen. 3. `stream_link_for` oder `stream_link_for_url` aufrufen. 4. `resolve_stream_link` aufrufen. 5. Finale URL an Kodi geben. ## Logging Nutze Helper aus `addon/plugin_helpers.py`: - `log_url(...)` - `dump_response_html(...)` - `notify_url(...)` ## Build und Checks - ZIP: `./scripts/build_kodi_zip.sh` - Addon Ordner: `./scripts/build_install_addon.sh` - Manifest: `python3 scripts/generate_plugin_manifest.py` - Snapshot Checks: `python3 qa/run_plugin_snapshots.py` ## Kurze Checkliste - `name` gesetzt und korrekt - `*_base_url` in Settings vorhanden - Suche liefert nur passende Titel - Playback Methoden vorhanden - Fehler und Timeouts behandelt - Cache nur da, wo er Zeit spart