- C# 87%
- HTML 13%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| .forgejo/workflows | ||
| Jellyfin.Plugin.ReleaseWindows | ||
| Jellyfin.Plugin.ReleaseWindows.Tests | ||
| .editorconfig | ||
| .gitignore | ||
| build.yaml | ||
| Directory.Build.props | ||
| Jellyfin.Plugin.ReleaseWindows.sln | ||
| manifest.json | ||
| README.md | ||
Wichtiger Hinweis: Mir war das ehrlicherweise nicht wichtig genug für so einen Kleinkram selsbt zu coden. Also viel LLM-Gedönse drinne. Habe zwar reviewed dass da nix schlimmes passiert, erwartet aber keinen sauberen code
Jellyfin Plugin: ReleaseWindows
Holt für jeden Film in der Bibliothek die Veröffentlichungstermine (Kino, Digital, Disc) von TMDB und macht sie in Jellyfin als Tags sichtbar, optional zusätzlich als Block am Ende der Beschreibung (Overview).
- Zielplattform: Jellyfin 10.11.x (targetAbi 10.11.0.0, .NET 9)
- Baut auf dem jellyfin-plugin-template auf
Funktionsweise
Der Scheduled Task „Release Windows aktualisieren“ (Kategorie ReleaseWindows)
- iteriert über alle Filme mit TMDB-ID,
- ruft
GET /3/movie/{id}/release_datesauf (max. 40 Requests / 10 s, Retry bei HTTP 429 mitRetry-After), - wählt pro Datum erst das konfigurierte Land, dann das Fallback-Land:
- Kino: TMDB-Typ 3 (Theatrical), sonst Typ 2 (Theatrical limited)
- Digital: Typ 4
- Disc: Typ 5
- entfernt alle Tags mit den konfigurierten Präfixen und schreibt pro vorhandenem Datum einen Tag,
z. B.
Kino: 2024-03-14,Digital: 2024-06-01,Disc: 2024-07-15, - hängt optional einen Block
Release Windows:mit den Zeilen- Kino: …,- Digital: …,- Disc: …an die Overview an. Der Block wird beim nächsten Lauf erkannt und ersetzt.
Filme ohne Ergebnis landen in einem kleinen Cache (no-result-cache.json im Plugin-Datenordner) und werden
30 Tage lang nicht erneut abgefragt. Der Task ist idempotent und läuft standardmäßig wöchentlich (Sonntag 03:00),
kann aber jederzeit manuell gestartet werden.
Installation
Variante A: Plugin-Repository (empfohlen)
Die Release-Pipeline (.forgejo/workflows/release.yaml) pflegt manifest.json auf main automatisch.
- In Jellyfin: Dashboard → Plugins → Repositories → +
- Name:
ReleaseWindows - URL:
https://igitt.oles.cloud/GuacamOle/JellyFinDate/raw/branch/main/manifest.json
- Name:
- Dashboard → Plugins → Katalog → Kategorie Metadata → ReleaseWindows installieren.
- Jellyfin neu starten.
Variante B: Manuell
ZIP entpacken nach <Jellyfin-Datenordner>/plugins/ReleaseWindows_1.0.0.0/ und Jellyfin neu starten.
Konfiguration
Dashboard → Plugins → ReleaseWindows
| Option | Default | Beschreibung |
|---|---|---|
| TMDB API Key | – | v3-API-Key aus den TMDB-Kontoeinstellungen |
| Ländercode | DE |
ISO-3166-1 |
| Fallback-Ländercode | US |
wird genutzt, wenn das Hauptland kein Datum hat |
| Tags schreiben | an | Tags Kino: yyyy-MM-dd usw. |
| Overview-Anhang schreiben | aus | Block ans Ende der Beschreibung |
| Präfixe | Kino:, Digital:, Disc: |
Tag-Präfixe, frei editierbar |
| Alte Präfixe entfernen | leer | Kommagetrennt, z. B. Kino: nach einer Umbenennung. Tags damit werden nur entfernt. |
Task starten
Dashboard → Geplante Aufgaben → ReleaseWindows → Release Windows aktualisieren → ▶
Fortschritt und Ergebnis erscheinen dort, Details im Jellyfin-Log (Präfix ReleaseWindows:).
Die Tags sind danach in der Filmansicht sichtbar und über den Tag-Filter der Bibliothek nutzbar.
Build
dotnet build -c Release
dotnet test
Release
Ein Tag der Form vX.Y.Z.W startet die Release-Pipeline:
git tag -a v1.0.0.0 -m "Erste Version"
git push origin v1.0.0.0
Die Pipeline baut, testet, erzeugt releasewindows_X.Y.Z.W.zip samt MD5, legt ein Forgejo-Release mit
den Assets an und trägt die Version mit sourceUrl und checksum in manifest.json auf main ein.
Die Tag-Message wird als Changelog übernommen. Die CI-Pipeline (ci.yaml) baut und testet bei jedem Push.
Projektstruktur
Jellyfin.Plugin.ReleaseWindows/
Plugin.cs BasePlugin<PluginConfiguration>, IHasWebPages
PluginServiceRegistrator.cs HttpClient (IHttpClientFactory), TmdbClient, RateLimiter
Configuration/PluginConfiguration.cs
Configuration/configPage.html Konfigurationsseite
ScheduledTasks/UpdateReleaseWindowsTask.cs
Tmdb/ TmdbClient, Modelle, Rate-Limiter
ReleaseWindowMapper.cs TMDB-Typen -> Kino/Digital/Disc inkl. Fallback
TagUpdater.cs Tags entfernen/schreiben
OverviewFormatter.cs Overview-Block mit Marker
NoResultCache.cs Datei-Cache mit 30 Tagen TTL
Jellyfin.Plugin.ReleaseWindows.Tests/ xUnit-Tests
build.yaml, manifest.json
Lizenz
MIT