Files
ViewIT/docs/ARCHITECTURE.md

86 lines
4.7 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## ViewIT Architekturüberblick
Dieses Dokument fasst die wichtigsten Kernmodule des Addons und ihre Aufgaben zusammen.
Es ergänzt die Detaildokumente `DEFAULT_ROUTER.md` und `PLUGIN_SYSTEM.md`.
### Ebenen und Verantwortlichkeiten
- **Router (`addon/default.py`)**
- Einstiegspunkt aus Kodi (Parsing von `sys.argv`).
- Lädt und verwaltet alle Plugins (Discovery, Instanziierung, Fehlerisolation).
- Baut die Kodi-Menüs (Titel-, Staffel-, Episodenlisten, Spezialmenüs).
- Mapped UIAktionen (`search`, `seasons`, `episodes`, `play_*`) auf Plugin-Methoden.
- Startet Playback und hält Kodi-Playstate konsistent (Resume/Watched).
- **Plugin-Vertrag (`addon/plugin_interface.py`)**
- Definiert `BasisPlugin` als zentrale abstrakte Basisklasse.
- Kern-API:
- `search_titles(query, progress_callback?)`
- `seasons_for(title)`
- `episodes_for(title, season)`
- Optionale Fähigkeiten:
- Stream-Auflösung (`stream_link_for`, `resolve_stream_link`)
- Metadaten (`metadata_for`, `genres`, `titles_for_genre`, `popular_series`, `capabilities`).
- Dient als Referenz für alle konkreten Provider in `addon/plugins/`.
- **Plugin-Hilfen (`addon/plugin_helpers.py`)**
- Zugriff auf Addon-Settings als String/Bool/Int (robust, auch außerhalb von Kodi).
- Optionale URLBenachrichtigungen im UI (`notify_url`).
- Strukturierte Logging-Helfer (`log_url`, `log_error`, `dump_response_html`) mit Rotationslogik.
- Normalisierung von speziellen Stream-URLs (`normalize_resolved_stream_url`).
- Fokus: Wiederverwendbare Infrastruktur für alle Plugins, ohne deren Kernlogik zu vermischen.
- **HTTP Session Pool (`addon/http_session_pool.py`)**
- Verwaltet wiederverwendete `requests.Session`Instanzen pro Schlüssel.
- Ziel: TCPVerbindungen und Cookies über mehrere Requests hinweg wiederverwenden.
- Bietet `get_requests_session(key, headers?)` und `close_all_sessions()`.
- Wird von Plugins oder Hilfsmodulen genutzt, die viele HTTPAufrufe pro Sitzung machen.
- **TMDB-Integration (`addon/tmdb.py`)**
- Kapselt alle Zugriffe auf die TMDBAPI (TVShows, Staffeln, Episoden, Filme).
- Enthält Datenklassen für CastMitglieder, Shows, Staffeln und Filme.
- Nutzt ein threadlokales `requests.Session`Pooling für parallele Metadatenabfragen.
- Wird vom Router genutzt, um Plugin-Metadaten optional mit TMDBDaten anzureichern.
- **Metadaten-Helfer (`addon/metadata_utils.py`)**
- Berechnet plugin-spezifische SettingIDs für Metadatenquellen.
- Entscheidet pro Plugin und UserSetting, ob Quelle, TMDB oder Mix bevorzugt wird.
- Sammelt Metadaten aus Plugins (`collect_plugin_metadata`) und merged sie mit TMDB (`merge_metadata`).
- Liefert Signale, wann ein TMDBFallback nötig ist (`needs_tmdb`).
- **ResolveURL Backend (`addon/resolveurl_backend.py`)**
- Optionales Backend, das `script.module.resolveurl` nutzt, wenn installiert.
- Versucht HosterLinks in abspielbare MediaURLs aufzulösen.
- Speichert den letzten Fehlerzustand (`get_last_error`) für Logging oder UserFeedback.
- Ist vollständig optional und bricht das Addon nicht, wenn ResolveURL fehlt.
- **Regex-Muster (`addon/regex_patterns.py`)**
- Zentrale Sammlung wiederverwendeter Regulärer Ausdrücke (Staffel/EpisodenTags, Ziffern etc.).
- Ziel: Konsistenz und Vermeidung von fehleranfälligem Copy/Paste in Plugins.
- **yt-dlp Helper (`addon/ytdlp_helper.py`)**
- Kapselt Zugriffe auf `yt-dlp` zum Auflösen von Stream-URLs.
- Wird als optionales Backend für Hoster genutzt, die weder ResolveURL noch direkte Links liefern.
- **Genre-Helfer (`addon/genre_utils.py`)**
- Hilfsfunktionen für Genre-Normalisierung und -Mapping (plugin-übergreifend wiederverwendbar).
- **Such-Helfer (`addon/search_utils.py`)**
- Gemeinsame Logik für titelbasierte Volltextsuche (Wortmatch, Normalisierung).
- Wird vom Router genutzt, um Plugin-Suchtreffer konsistent zu filtern.
- **Kern-Module (`addon/core/`)**
- `trakt.py` Trakt.tv-Integration (OAuth, Scrobbling, Watchlist, Upcoming, History).
- `metadata.py` Metadaten-Aggregation aus Plugins und TMDB.
- `gui.py` Dialog-Helfer und UI-Utilities (z.B. Changelog-Dialog).
- `playstate.py` Playstate-Hilfsfunktionen (Schlüssel­berechnung, Zustandsabfrage). Eigenes Resume/Watched ist deaktiviert; Kodi verwaltet das selbst.
- `plugin_manager.py` Plugin-Discovery und -Instanziierung.
- `router.py` Routing-Helfer und Aktions-Dispatch.
- `updater.py` Versionsprüfung und Addon-Update-Flow.
- **Plugins (`addon/plugins/*.py`)**
- Konkrete Integrationen zu einzelnen Providern (z.B. Serien-/Filmportale).
- Implementieren `BasisPlugin` und optional zusätzliche Capabilities.
- Verwenden die oben beschriebenen Hilfs und Infrastrukturmodule.