Files
ViewIT/docs/ARCHITECTURE.md

3.6 KiB
Raw Blame History

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.SessionInstanzen 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.SessionPooling 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.
  • 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.