dev: umfangreiches Refactoring, Trakt-Integration und Code-Review-Fixes (0.1.69-dev)
Core & Architektur: - Neues Verzeichnis addon/core/ mit router.py, trakt.py, metadata.py, gui.py, playstate.py, plugin_manager.py, updater.py - Tests-Verzeichnis hinzugefügt (24 Tests, pytest + Coverage) Trakt-Integration: - OAuth Device Flow, Scrobbling, Watchlist, History, Calendar - Upcoming Episodes, Weiterschauen (Continue Watching) - Watched-Status in Episodenlisten - _trakt_find_in_plugins() mit 5-Min-Cache Serienstream-Suche: - API-Ergebnisse werden immer mit Katalog-Cache ergänzt (serverseitiges 10-Treffer-Limit) - Katalog-Cache wird beim Addon-Start im Daemon-Thread vorgewärmt - Notification nach Cache-Load via xbmc.executebuiltin() (thread-sicher) Bugfixes (Code-Review): - Race Condition auf _TRAKT_WATCHED_CACHE: _TRAKT_WATCHED_CACHE_LOCK hinzugefügt - GUI-Dialog aus Daemon-Thread: xbmcgui -> xbmc.executebuiltin() - ValueError in Trakt-Watchlist-Routen abgesichert - Token expires_at==0 Check korrigiert - get_setting_bool() Kontrollfluss in gui.py bereinigt - topstreamfilm_plugin: try-finally um xbmcvfs.File.close() Cleanup: - default.py.bak und refactor_router.py entfernt - .gitignore: /tests/ Eintrag entfernt - Type-Hints vereinheitlicht (Dict/List/Tuple -> dict/list/tuple)
This commit is contained in:
@@ -7,9 +7,19 @@ Vorgehen fuer ein neues Plugin:
|
||||
1. Datei kopieren/umbenennen (ohne fuehrenden Unterstrich), z.B. `my_site_plugin.py`
|
||||
2. `name`, `ADDON_ID`, `BASE_URL` und Header anpassen
|
||||
3. `search_titles`, `seasons_for`, `episodes_for` gemaess Zielseite implementieren
|
||||
4. Optional weitere Methoden wie `stream_link_for`, `resolve_stream_link`,
|
||||
`popular_series`, `genres`, `titles_for_genre`, `available_hosters_for` etc.
|
||||
implementieren – siehe `docs/PLUGIN_DEVELOPMENT.md` und bestehende Plugins.
|
||||
4. Optional weitere Methoden implementieren – capabilities deklarieren und Methoden ueberschreiben:
|
||||
- `popular_series()` + capability 'popular_series'
|
||||
- `latest_titles(page)` + capability 'latest_titles'
|
||||
- `genres()` + `titles_for_genre(genre)` + `titles_for_genre_page(genre, page)`
|
||||
- `alpha_index()` + `titles_for_alpha_page(letter, page)`
|
||||
- `years_available()` + `titles_for_year(year, page)` + capability 'year_filter'
|
||||
- `countries_available()` + `titles_for_country(country, page)` + capability 'country_filter'
|
||||
- `collections()` + `titles_for_collection(collection, page)` + capability 'collections'
|
||||
- `tags()` + `titles_for_tag(tag, page)` + capability 'tags'
|
||||
- `random_title()` + capability 'random'
|
||||
- `stream_link_for(...)`, `resolve_stream_link(link)`, `available_hosters_for(...)`
|
||||
- `metadata_for(title)` fuer eigene Metadaten
|
||||
Siehe `docs/PLUGIN_DEVELOPMENT.md` und bestehende Plugins.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
@@ -157,10 +167,17 @@ class TemplatePlugin(BasisPlugin):
|
||||
def capabilities(self) -> set[str]:
|
||||
"""Optional: Deklariert die Faehigkeiten dieses Plugins.
|
||||
|
||||
Beispiele:
|
||||
- `popular_series`: Plugin kann beliebte Titel liefern
|
||||
- `genres`: Plugin unterstuetzt Genre-Browser
|
||||
- `latest_episodes`: Plugin liefert eine Liste neuer Episoden
|
||||
Bekannte Werte (aus plugin_interface.py):
|
||||
- 'popular_series' – Plugin hat beliebte Serien/Filme
|
||||
- 'latest_titles' – Plugin hat neu hinzugefuegte Titel
|
||||
- 'year_filter' – Plugin unterstuetzt Jahr-Filter
|
||||
- 'country_filter' – Plugin unterstuetzt Land-Filter
|
||||
- 'collections' – Plugin hat Sammlungen/Filmreihen
|
||||
- 'tags' – Plugin hat Tag/Schlagwort-Suche
|
||||
- 'random' – Plugin kann einen zufaelligen Titel liefern
|
||||
- 'genres' – Plugin hat Genre-Browser
|
||||
- 'alpha' – Plugin hat A-Z-Index
|
||||
- 'latest_episodes' – Plugin liefert neue Episoden
|
||||
"""
|
||||
|
||||
return set()
|
||||
|
||||
Reference in New Issue
Block a user