86 lines
2.3 KiB
Markdown
86 lines
2.3 KiB
Markdown
# 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 = <Klasse>` 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
|