# 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) -> list[str]` - `seasons_for(title: str) -> list[str]` - `episodes_for(title: str, season: str) -> list[str]` ## Wichtige optionale Methoden - `stream_link_for(...)` - `resolve_stream_link(...)` - `metadata_for(...)` - `available_hosters_for(...)` - `series_url_for_title(...)` - `remember_series_url(...)` - `episode_url_for(...)` - `available_hosters_for_url(...)` - `stream_link_for_url(...)` ## 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 ## 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