Improve logging and docs
This commit is contained in:
54
docs/DEFAULT_ROUTER.md
Normal file
54
docs/DEFAULT_ROUTER.md
Normal file
@@ -0,0 +1,54 @@
|
||||
# ViewIT – Hauptlogik (`addon/default.py`)
|
||||
|
||||
Dieses Dokument beschreibt den Einstiegspunkt des Addons und die zentrale Steuerlogik.
|
||||
|
||||
## Aufgabe der Datei
|
||||
`addon/default.py` ist der Router des Addons. Er:
|
||||
- lädt die Plugin‑Module dynamisch,
|
||||
- stellt die Kodi‑Navigation bereit,
|
||||
- übersetzt UI‑Aktionen in Plugin‑Aufrufe,
|
||||
- startet die Wiedergabe und verwaltet Playstate/Resume.
|
||||
|
||||
## Ablauf (high level)
|
||||
1. **Plugin‑Discovery**: Lädt alle `addon/plugins/*.py` (ohne `_`‑Prefix) und instanziiert Klassen, die von `BasisPlugin` erben.
|
||||
2. **Navigation**: Baut Kodi‑Listen (Serien/Staffeln/Episoden) auf Basis der Plugin‑Antworten.
|
||||
3. **Playback**: Holt Stream‑Links aus dem Plugin und startet die Wiedergabe.
|
||||
4. **Playstate**: Speichert Resume‑Daten lokal (`playstate.json`) und setzt `playcount`/Resume‑Infos.
|
||||
|
||||
## Routing & Aktionen
|
||||
Die Datei arbeitet mit URL‑Parametern (Kodi‑Plugin‑Standard). Typische Aktionen:
|
||||
- `search` → Suche über ein Plugin
|
||||
- `seasons` → Staffeln für einen Titel
|
||||
- `episodes` → Episoden für eine Staffel
|
||||
- `play` → Stream‑Link auflösen und abspielen
|
||||
|
||||
Die genaue Aktion wird aus den Query‑Parametern gelesen und an das entsprechende Plugin delegiert.
|
||||
|
||||
## Playstate (Resume/Watched)
|
||||
- **Speicherort**: `playstate.json` im Addon‑Profilordner.
|
||||
- **Key**: Kombination aus Plugin‑Name, Titel, Staffel, Episode.
|
||||
- **Verwendung**:
|
||||
- `playcount` wird gesetzt, wenn „gesehen“ markiert ist.
|
||||
- `resume_position`/`resume_total` werden gesetzt, wenn vorhanden.
|
||||
|
||||
## Wichtige Hilfsfunktionen
|
||||
- **Plugin‑Loader**: findet & instanziiert Plugins.
|
||||
- **UI‑Helper**: setzt Content‑Type, baut Verzeichnisseinträge.
|
||||
- **Playstate‑Helper**: `_load_playstate`, `_save_playstate`, `_apply_playstate_to_info`.
|
||||
|
||||
## Fehlerbehandlung
|
||||
- Plugin‑Importfehler werden isoliert behandelt, damit das Addon nicht komplett ausfällt.
|
||||
- Netzwerk‑Fehler werden in Plugins abgefangen, `default.py` sollte nur saubere Fehlermeldungen weitergeben.
|
||||
|
||||
## Debugging
|
||||
- Globale Debug‑Settings werden über `addon/resources/settings.xml` gesteuert.
|
||||
- Plugins loggen URLs/HTML optional (siehe jeweilige Plugin‑Doku).
|
||||
|
||||
## Änderungen & Erweiterungen
|
||||
Für neue Aktionen:
|
||||
1. Neue Aktion im Router registrieren.
|
||||
2. UI‑Einträge passend anlegen.
|
||||
3. Entsprechende Plugin‑Methode definieren oder erweitern.
|
||||
|
||||
## Hinweis zur Erstellung
|
||||
Teile dieser Dokumentation wurden KI‑gestützt erstellt und bei Bedarf manuell angepasst.
|
||||
75
docs/PLUGIN_DEVELOPMENT.md
Normal file
75
docs/PLUGIN_DEVELOPMENT.md
Normal file
@@ -0,0 +1,75 @@
|
||||
# ViewIT – Entwicklerdoku Plugins (`addon/plugins/*_plugin.py`)
|
||||
|
||||
Diese Doku beschreibt, wie Plugins im ViewIT‑Addon aufgebaut sind und wie neue Provider‑Integrationen entwickelt werden.
|
||||
|
||||
## Grundlagen
|
||||
- Jedes Plugin ist eine einzelne Datei unter `addon/plugins/`.
|
||||
- Dateinamen **ohne** `_`‑Prefix werden automatisch geladen.
|
||||
- Jede Datei enthält eine Klasse, die von `BasisPlugin` erbt.
|
||||
|
||||
## Pflicht‑Methoden (BasisPlugin)
|
||||
Jedes Plugin muss diese Methoden implementieren:
|
||||
- `async search_titles(query: str) -> list[str]`
|
||||
- `seasons_for(title: str) -> list[str]`
|
||||
- `episodes_for(title: str, season: str) -> list[str]`
|
||||
|
||||
## Optionale Features (Capabilities)
|
||||
Über `capabilities()` kann das Plugin zusätzliche Funktionen anbieten:
|
||||
- `popular_series` → `popular_series()`
|
||||
- `genres` → `genres()` + `titles_for_genre(genre)`
|
||||
- `latest_episodes` → `latest_episodes(page=1)`
|
||||
|
||||
## Empfohlene Struktur
|
||||
- Konstanten für URLs/Endpoints (BASE_URL, Pfade, Templates)
|
||||
- `requests` + `bs4` optional (fehlt beides, Plugin sollte sauber deaktivieren)
|
||||
- Helper‑Funktionen für Parsing und Normalisierung
|
||||
- Caches für Such‑, Staffel‑ und Episoden‑Daten
|
||||
|
||||
## Suche (aktuelle Policy)
|
||||
- **Nur Titel‑Matches**
|
||||
- **Substring‑Match** nach Normalisierung (Lowercase + Nicht‑Alnum → Leerzeichen)
|
||||
- Keine Beschreibung/Plot/Meta für Matches
|
||||
|
||||
## Namensgebung
|
||||
- Plugin‑Klassenname: `XxxPlugin`
|
||||
- Anzeigename (Property `name`): **mit Großbuchstaben beginnen** (z. B. `Serienstream`, `Einschalten`)
|
||||
|
||||
## Settings pro Plugin
|
||||
Standard: `*_base_url` (Domain / BASE_URL)
|
||||
- Beispiele:
|
||||
- `serienstream_base_url`
|
||||
- `aniworld_base_url`
|
||||
- `einschalten_base_url`
|
||||
- `topstream_base_url`
|
||||
|
||||
## Playback
|
||||
- Wenn möglich `stream_link_for(...)` implementieren.
|
||||
- Optional `available_hosters_for(...)`/`resolve_stream_link(...)` für Hoster‑Auflösung.
|
||||
|
||||
## Debugging
|
||||
Global gesteuert über Settings:
|
||||
- `debug_log_urls`
|
||||
- `debug_dump_html`
|
||||
- `debug_show_url_info`
|
||||
|
||||
Plugins sollten die Helper aus `addon/plugin_helpers.py` nutzen:
|
||||
- `log_url(...)`
|
||||
- `dump_response_html(...)`
|
||||
- `notify_url(...)`
|
||||
|
||||
## Template
|
||||
`addon/plugins/_template_plugin.py` dient als Startpunkt für neue Provider.
|
||||
|
||||
## Build & Test
|
||||
- ZIP bauen: `./scripts/build_kodi_zip.sh`
|
||||
- Addon‑Ordner: `./scripts/build_install_addon.sh`
|
||||
|
||||
## Beispiel‑Checkliste
|
||||
- [ ] `name` korrekt gesetzt
|
||||
- [ ] `*_base_url` in Settings vorhanden
|
||||
- [ ] Suche matcht nur Titel
|
||||
- [ ] Fehlerbehandlung und Timeouts vorhanden
|
||||
- [ ] Optional: Caches für Performance
|
||||
|
||||
## Hinweis zur Erstellung
|
||||
Teile dieser Dokumentation wurden KI‑gestützt erstellt und bei Bedarf manuell angepasst.
|
||||
@@ -6,6 +6,10 @@ Dieses Dokument beschreibt, wie das Plugin-System von **ViewIt** funktioniert un
|
||||
|
||||
ViewIt lädt Provider-Integrationen dynamisch aus `addon/plugins/*.py`. Jede Datei enthält eine Klasse, die von `BasisPlugin` erbt. Beim Start werden alle Plugins instanziiert und nur aktiv genutzt, wenn sie verfügbar sind.
|
||||
|
||||
Weitere Details:
|
||||
- `docs/DEFAULT_ROUTER.md` (Hauptlogik in `addon/default.py`)
|
||||
- `docs/PLUGIN_DEVELOPMENT.md` (Entwicklerdoku für Plugins)
|
||||
|
||||
### Aktuelle Plugins
|
||||
|
||||
- `serienstream_plugin.py` – Serienstream (s.to)
|
||||
|
||||
Reference in New Issue
Block a user