Files
Flaro/Tools/JellyfinStub
ScarriffleandClaude Opus 5 3a6a6c4242 Intro und Abspann bei Jellyfin, und drei Dinge aus dem Gebrauch
**Intro überspringen gab es für Jellyfin nie.** Der Knopf, die Marken,
das automatische Überspringen, die Einstellungen dazu — alles stand seit
Langem im Player und auf dem Fernseher. Nur kam bei Jellyfin nie eine
Marke an: `JellyfinItem+Media.swift` setzte `markers: []`, weil Jellyfin
sie nicht am Titel liefert.

Seit 10.10 gibt es `/MediaSegments/{itemId}`, gefüllt von einem Anbieter
im Server wie dem Intro-Skipper. Die Anfrage läuft **neben** dem Abruf
des Titels, nicht danach — sonst wartete die Detailseite zweimal.

Zwei Dinge, die sonst eine Stunde kosten: `includeSegmentTypes` muss
**zweimal** stehen, nicht einmal mit Komma (mit Komma antwortet Jellyfin
mit null Treffern), und die Abfrage wirft nicht. Ein Server ohne Anbieter
antwortet leer, einer vor 10.10 mit einem 404 — und ein Film ohne Intro
ist kein Fehler, sondern der Normalfall.

Geprüft im Simulator: die Attrappe meldet jetzt Segmente, und im Player
steht „Intro überspringen".

---

**„Aus Weiterschauen entfernen".** Eine halbe Stunde gesehen und keine
Lust mehr — der Titel ist weder gesehen noch ungesehen, er soll nur nicht
ewig oben stehen. Beide Server können es, auf verschiedenen Wegen:

- **Plex** hat einen eigenen: `PUT /actions/removeFromContinueWatching`.
  **Nicht** `/:/unscrobble` — das setzt zugleich auf ungesehen.
- **Jellyfin** hat keinen. Was es gibt, ist das Benutzerdatenblatt; die
  Liste führt, was eine gemerkte Stelle grösser null hat. Also wird das
  Blatt gelesen, bekommt eine Null und geht so, wie es war, zurück.
  **Erst lesen, dann schreiben**, weil dort auch „gesehen", „Favorit" und
  die Bewertung stehen — wer seinen Favoriten verliert, weil er einen
  Film aus einer Liste genommen hat, sucht den Grund nie dort.

Der Eintrag erscheint nur, wenn es eine gemerkte Stelle gibt.

---

**Die Mediatheken für den Aufmacher taten zu wenig.** Die Regel „Reihen
ohne Mediathek bleiben immer drin" war freundlich gemeint und falsch: bei
„nur Filme" stand weiter eine Serie oben, weil sie aus „Weiterschauen"
kam. Gemessen und nicht vermutet — es lag nicht am Zeitfenster der
Auswahl, wie zuerst angenommen.

Jetzt gilt: ist etwas gewählt, speist sich der Aufmacher **nur** daraus.
Wer Weiterschauen oben haben will, wählt keine Mediathek. Der Hinweis
unter der Auswahl sagt das auch.

---

**Der „Bearbeiten"-Knopf stand über allem und tat dort nichts.** Er gilt
nur für die Reihen; jetzt steht er an deren Überschrift.

---

Die Attrappe kann drei Dinge mehr, sonst wäre nichts davon prüfbar:
Segmente, `parentId` bei den Neuzugängen (vorher stand in jeder Mediathek
dasselbe) und damit überhaupt eine Mediathekenauswahl, die man ansehen
kann.

iOS und tvOS bauen, 468 Tests grün.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-10-01 08:47:06 +02:00
..

Jellyfin-Attrappe

Ein Server, der so tut, als wäre er Jellyfin — gerade so viel, dass die App sich anmelden und stöbern kann. Gedacht fürs Ansehen der Oberfläche, nicht fürs Prüfen der Protokollschicht; dafür gibt es Tests mit aufgezeichneten Antworten.

python3 Tools/JellyfinStub/server.py

Dann in der App Mit Jellyfin anmelden → 127.0.0.1 eintragen. Quick Connect bestätigt sich nach drei Abfragen von selbst, damit der Bildschirm mit dem Code sichtbar wird und die Anmeldung trotzdem durchläuft.

Die Bilder sind einfarbige Flächen, deren Farbe aus der Kennung des Titels entsteht. Das ist Absicht: so lässt sich auf einen Blick erkennen, ob der Aufmacher tatsächlich weiterwandert und ob eine Kachel das Bild zeigt, das zu ihr gehört.

Abgespielt wird sample.mp4 — zehn Sekunden Farbverlauf, mit einem kleinen Swift-Programm erzeugt. Der Server beantwortet Bereichsanfragen, weil der Systemplayer eine Datei nie am Stück holt.

Was hereinkommt, steht unter http://127.0.0.1:8096/__reports: jede Wiedergabemeldung mit ihrem Anfragekörper. Damit lässt sich prüfen, ob die App den Beginn meldet, ob der Fortschritt in Ticks ankommt und ob am Ende abgeräumt wird.

Mit --unanalysed melden die Quellen keine Spuren. Dann entscheidet die App wie bei einem Server, der eine Datei noch nicht untersucht hat.

Mit --vlc melden sie DTS-Ton. AVFoundation kann das nicht, also läuft die Wiedergabe über VLCKit — der einzige Weg, diesen Zweig mit der Beispieldatei überhaupt zu erreichen. Die Datei bleibt dieselbe; VLC spielt sie ebenso, und geprüft wird der Weg, nicht der Ton.

Kein echter Server wird dabei angefasst, und es gehen keine Zugangsdaten über die Leitung.