# Changelog (Dev) ## 0.1.69-dev - 2026-03-01 ### Trakt: Neue Features - **Weiterschauen:** Neuer Hauptmenüpunkt – zeigt die nächste ungesehene Folge je Serie basierend auf der Trakt-History. Auto-Matching sucht den Titel automatisch in allen aktiven Plugins und verlinkt direkt zur richtigen Staffel. - **Trakt Upcoming:** Neuer Hauptmenüpunkt – zeigt anstehende Episoden der Watchlist-Serien (Trakt-Kalender, 14 Tage voraus) mit Ausstrahlungsdatum und TMDB-Poster. Auto-Matching wie bei „Weiterschauen". - **Watched-Status in Episodenlisten:** Bereits bei Trakt als gesehen markierte Episoden werden in Staffelansichten mit Häkchen (Kodi `playcount=1`) markiert. Ergebnis wird 5 Minuten gecacht um API-Aufrufe zu minimieren. - **`core/trakt.py`:** Neuer `TraktCalendarItem`-Dataclass und `get_calendar()`-Methode (Trakt Calendar API: `/calendars/my/shows/{start}/{days}`). ### Python 3.8 Kompatibilität (Windows/Kodi) - **`from __future__ import annotations`** in allen Modulen ergänzt, die noch kein deferred-evaluation hatten (`core/router.py`, `core/metadata.py`, `core/playstate.py`, `core/gui.py`, `regex_patterns.py`). Behebt `TypeError: 'type' object is not subscriptable` auf Kodi-Installationen mit Python 3.8 (Windows). ### Bugfixes - **`dokustreams_plugin.py`:** Regex `r"(\\d+)"` → `r"(\d+)"` – Seitennavigation hat nie Seitenzahlen gefunden (falsch-escaped in Raw-String). - **`serienstream_plugin.py`:** Dedup-Key verwendete `\\t` (Backslash+t) statt echtem Tab-Zeichen – inkonsistent mit `aniworld_plugin.py`. - **Menübereinigung:** Doppelter Menüpunkt „Neue Titel" (`new_plugin_titles`) entfernt – identisch mit „Neuste Titel" (`latest_titles`). --- ## 0.1.67-dev - 2026-02-27 ### Stabilitäts- und Sicherheits-Fixes - **Sicherheit (updater.py):** ZIP-Extraktion prüft jetzt jeden Eintrag auf Path-Traversal. Bösartige Pfade (z. B. `../../`) werden abgelehnt und der Update-Vorgang abgebrochen (war: still ignoriert mit `continue`). - **Silent-Failure-Fix (metadata.py):** Neues `_initialized`-Flag und `_require_init()`-Guard – wenn `init()` nicht aufgerufen wurde, erscheint jetzt eine Warnung im Log statt lautlosem No-Op. - **Thread-Safety (default.py):** Neue Locks `_PLUGIN_CACHE_LOCK` und `_GENRE_TITLES_CACHE_LOCK` schützen alle Cache-Zugriffe auf Plugin-Instanzen und Genre-Titel-Caches. - **Memory-Leak-Fix (default.py):** Alle internen Caches haben jetzt ein Größenlimit (`_CACHE_MAXSIZE = 500`) mit LRU-artigem Eviction-Mechanismus. - **Code-Qualität (default.py):** ~300 Zeilen Duplicate-Code durch `_show_paged_title_list()` Hilfsfunktion ersetzt – alle paginierten Titellisten (Genres, Kategorien, A-Z) nutzen jetzt dieselbe Logik. - **Syntax-Fix (default.py):** Fremd-Text in Zeile 3517 entfernt, der einen latenten Syntax- Fehler verursachte. ### Neues Plugin-Interface Neue optionale Methoden in `BasisPlugin` (plugin_interface.py): | Methode | Beschreibung | |---------|-------------| | `latest_titles(page)` | Neuerscheinungen / neu hinzugefügte Titel | | `years_available()` | Verfügbare Erscheinungsjahre für Filter | | `titles_for_year(year, page)` | Titel nach Jahr gefiltert | | `countries_available()` | Verfügbare Länder für Filter | | `titles_for_country(country, page)` | Titel nach Herkunftsland gefiltert | | `collections()` | Filmreihen / Sammlungen | | `titles_for_collection(collection, page)` | Titel einer Sammlung | | `tags()` | Schlagworte / Tags | | `titles_for_tag(tag, page)` | Titel nach Schlagwort | | `random_title()` | Zufälliger Titel | Neue Capability-Strings: `latest_titles`, `year_filter`, `country_filter`, `collections`, `tags`, `random` ### Neue Menüeinträge in default.py Plugins die die neuen Capabilities melden, erhalten automatisch folgende Menüpunkte: - **"Neue Titel"** – für Plugins mit `latest_titles` - **"Nach Jahr"** – für Plugins mit `year_filter` - **"Nach Land"** – für Plugins mit `country_filter` - **"Sammlungen"** – für Plugins mit `collections` - **"Schlagworte"** – für Plugins mit `tags` - **"Zufälliger Titel"** – für Plugins mit `random` ### Plugin-Erweiterungen **Filmpalast** (`filmpalast_plugin.py`): - `popular_series()` – scrapt Top-Filme von `/movies/top` - `latest_titles(page)` – scrapt Neuerscheinungen von `/movies/new` mit Pagination - IMDb-Rating in `metadata_for()` integriert (`info_labels["rating"]`) - Neue Capabilities: `popular_series`, `latest_titles` **Doku-Streams** (`dokustreams_plugin.py`): - `tags()` – scrapt alle Schlagworte von der Startseite - `titles_for_tag(tag, page)` – Titelliste pro Schlagwort mit Pagination - `random_title()` – folgt dem Redirect von `/zufaellige-doku/` - `resolve_stream_link(link)` – ResolveURL + HTTP-Redirect-Fallback - Neue Capabilities: `tags`, `random` **AniWorld** (`aniworld_plugin.py`): - `titles_for_genre_page(genre, page)` – paginierte Genre-Titellisten via `/genre/[slug]?page=[n]` - `genre_page_count(genre)` – letzte Seitennummer aus Pagination extrahiert - `latest_titles(page)` – neue Anime-Releases via `/animekalender` - Neue Capability: `latest_titles` **SerienStream** (`serienstream_plugin.py`): - `latest_titles(page)` – neue Serien via JSON-Kalender-API (`/api/calendar`) mit wochenweiser Rückwärts-Paginierung - `genre_page_count(genre)` – Gesamtanzahl der Genre-Seiten aus Pagination-Links extrahiert - `alpha_index()` – gibt A-Z-Buchstaben + `0-9` zurück - `titles_for_alpha_page(letter, page)` – Serien alphabetisch abrufen via `/serien/alle?buchstabe={letter}` - Neue Capabilities: `latest_titles`, `alpha` **TopStreamFilm** (`topstreamfilm_plugin.py`): - `years_available()` – statische Liste vom aktuellen Jahr bis 1980 - `titles_for_year(year, page)` – Titel nach Erscheinungsjahr via `/xfsearch/{year}/page/{n}/` - `latest_titles(page)` – neue Filme via `/neueste-filme/page/{n}/` - Neue Capabilities: `year_filter`, `latest_titles` **Einschalten** (`einschalten_plugin.py`): - `popular_series()` – Top-50 Filme sortiert nach `voteAverage` (absteigend) - `latest_titles(page)` – neue Filme (Alias zu `new_titles_page(page)`) - Neue Capabilities: `popular_series`, `latest_titles` - Hinweis: Ratings (`voteAverage`, `voteCount`) waren bereits in `metadata_for()` enthalten --- ## 0.1.66-dev - 2026-02-25 - Serienstream HTTP-Fetches robuster gemacht: Retry bei kurzzeitigen Verbindungsabbruechen inkl. Session-Reset. - ResolveURL-Import im Kodi-Addon gehaertet: Fallback ueber Addon-`lib`-Pfade (`resolveurl`, `kodi-six`, `six`). - Resolver-Debug erweitert: Input/Output im Kodi-Log fuer jeden ResolveURL-Aufruf sichtbar. - Playback-Guard fuer unaufgeloeste Hoster-Links (z. B. `voe.sx/e/...`) bleibt aktiv und liefert klare Fehlermeldungen. - `script.module.resolveurl` als Addon-Abhaengigkeit in `addon.xml` eingetragen. ## 0.1.65-dev - 2026-02-24 - Resolver-Diagnosepfad wieder vereinfacht (Fallback/Embed-Block aus dem Router entfernt). - Serienstream und AniWorld wieder mit VOE als bevorzugtem Hoster in der Default-Prioritaet. ## 0.1.64-dev - 2026-02-24 - Update-Kanaele in den Settings erweitert: `Dev` ist jetzt ein eigener Kanal. - Neue Setting-URL `update_repo_url_dev` fuer direkte Dev-Repo-Auswahl. - Repository-Addon auf `1.0.1` erhoeht. - `repository.viewit` enthaelt jetzt zusaetzlich den `smrzips`-Feed, damit ResolveURL-Updates direkt verfuegbar sind. ## 0.1.63-dev - 2026-02-24 - ResolveURL ist jetzt eine weiche Abhaengigkeit: ViewIt installiert auch ohne vorinstalliertes ResolveURL. - Neuer Settings-Action: `ResolveURL installieren/reparieren`. - Optionales Auto-Bootstrap: ResolveURL kann beim Start automatisch nachinstalliert werden. - Wiedergabe versucht bei fehlendem ResolveURL einmalig eine stille Nachinstallation und loest dann erneut auf. - Update-Settings aufgeraeumt: Fokus auf installierte Version, Kanalstatus und verfuegbare Version im gewaehlten Kanal. - Repo-Validierung als Script hinzugefuegt (`scripts/verify_repo_artifacts.py`) und in den lokalen Repo-Build eingebunden. ## 0.1.62-dev - 2026-02-24 - Neuer Dev-Stand fuer Genre-Performance (Serienstream). - Genre-Listen laden strikt nur die angeforderte Seite (on-demand, max. 20 Titel). - Weitere Seiten werden erst bei `Naechste Seite` geladen. - Listen-Parser reduziert auf Titel, Serien-URL und Cover. - Plot wird aus den Karten mit uebernommen und in der Liste angezeigt, falls vorhanden. - Metadaten werden fuer die jeweils geoeffnete Seite vollstaendig geladen und angezeigt. - Serien-Infos (inkl. Plot/Art) sind bereits in der Titelauswahl sichtbar, nicht erst in der Staffelansicht.