Improve logging and docs

This commit is contained in:
2026-02-01 19:45:51 +01:00
parent da83ed02be
commit 9df80240c4
9 changed files with 461 additions and 47 deletions

54
docs/DEFAULT_ROUTER.md Normal file
View 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 PluginModule dynamisch,
- stellt die KodiNavigation bereit,
- übersetzt UIAktionen in PluginAufrufe,
- startet die Wiedergabe und verwaltet Playstate/Resume.
## Ablauf (high level)
1. **PluginDiscovery**: Lädt alle `addon/plugins/*.py` (ohne `_`Prefix) und instanziiert Klassen, die von `BasisPlugin` erben.
2. **Navigation**: Baut KodiListen (Serien/Staffeln/Episoden) auf Basis der PluginAntworten.
3. **Playback**: Holt StreamLinks aus dem Plugin und startet die Wiedergabe.
4. **Playstate**: Speichert ResumeDaten lokal (`playstate.json`) und setzt `playcount`/ResumeInfos.
## Routing & Aktionen
Die Datei arbeitet mit URLParametern (KodiPluginStandard). Typische Aktionen:
- `search` → Suche über ein Plugin
- `seasons` → Staffeln für einen Titel
- `episodes` → Episoden für eine Staffel
- `play` → StreamLink auflösen und abspielen
Die genaue Aktion wird aus den QueryParametern gelesen und an das entsprechende Plugin delegiert.
## Playstate (Resume/Watched)
- **Speicherort**: `playstate.json` im AddonProfilordner.
- **Key**: Kombination aus PluginName, Titel, Staffel, Episode.
- **Verwendung**:
- `playcount` wird gesetzt, wenn „gesehen“ markiert ist.
- `resume_position`/`resume_total` werden gesetzt, wenn vorhanden.
## Wichtige Hilfsfunktionen
- **PluginLoader**: findet & instanziiert Plugins.
- **UIHelper**: setzt ContentType, baut Verzeichnisseinträge.
- **PlaystateHelper**: `_load_playstate`, `_save_playstate`, `_apply_playstate_to_info`.
## Fehlerbehandlung
- PluginImportfehler werden isoliert behandelt, damit das Addon nicht komplett ausfällt.
- NetzwerkFehler werden in Plugins abgefangen, `default.py` sollte nur saubere Fehlermeldungen weitergeben.
## Debugging
- Globale DebugSettings werden über `addon/resources/settings.xml` gesteuert.
- Plugins loggen URLs/HTML optional (siehe jeweilige PluginDoku).
## Änderungen & Erweiterungen
Für neue Aktionen:
1. Neue Aktion im Router registrieren.
2. UIEinträge passend anlegen.
3. Entsprechende PluginMethode definieren oder erweitern.
## Hinweis zur Erstellung
Teile dieser Dokumentation wurden KIgestützt erstellt und bei Bedarf manuell angepasst.

View File

@@ -0,0 +1,75 @@
# ViewIT Entwicklerdoku Plugins (`addon/plugins/*_plugin.py`)
Diese Doku beschreibt, wie Plugins im ViewITAddon aufgebaut sind und wie neue ProviderIntegrationen 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.
## PflichtMethoden (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)
- HelperFunktionen für Parsing und Normalisierung
- Caches für Such, Staffel und EpisodenDaten
## Suche (aktuelle Policy)
- **Nur TitelMatches**
- **SubstringMatch** nach Normalisierung (Lowercase + NichtAlnum → Leerzeichen)
- Keine Beschreibung/Plot/Meta für Matches
## Namensgebung
- PluginKlassenname: `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 HosterAuflö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`
- AddonOrdner: `./scripts/build_install_addon.sh`
## BeispielCheckliste
- [ ] `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 KIgestützt erstellt und bei Bedarf manuell angepasst.

View File

@@ -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)