Files
ScarriffleandClaude Opus 5 19c9dc843c „Aus Weiterschauen entfernen" tut jetzt etwas — und man kann es sehen
Der Knopf war wirkungslos, und zwar aus zwei Gründen, die beide auf
dasselbe hinauslaufen: er war nie geprüft worden.

**Der Weg war falsch.** Die Methode las erst ein Benutzerdatenblatt über
`GET /Users/{id}/Items/{id}/UserData`, änderte es und schrieb es zurück.
Diese Stelle war die **einzige im ganzen Projekt**, die ein solches Blatt
eigens liest — überall sonst kommt es am Titel mit. Es gab also kein
zweites Beispiel, an dem der Weg je funktioniert hätte, und ein 404
beendete die Sache, bevor überhaupt etwas geschrieben wurde.

Jetzt wird das Blatt **gebaut**, nicht erfragt: „gesehen", „Favorit" und
die Zählung stehen am Titel, den der Aufrufer ohnehin in der Hand hat —
deshalb nimmt `removeFromContinueWatching` jetzt den Titel statt nur
seiner Kennung. Gelesen wird trotzdem noch, aber unverbindlich: gelingt
es, bleiben auch Felder erhalten, die diese App gar nicht kennt. Und
geschrieben wird über beide Wege — erst der gebündelte
`/UserItems/{id}/UserData`, bei einem 404 der ältere. Welcher gilt, hängt
an der Serverfassung.

**Und man konnte es nicht sehen.** Die Attrappe kannte die Route nicht;
ihr Auffangzweig antwortete auf jeden Schreibversuch mit Status 200, und
die Weiterschauen-Reihe war fest verdrahtet. Der Aufruf gelang also immer
und änderte nie etwas — genau das Bild eines kaputten Knopfes, nur aus
einem anderen Grund. Genau deshalb ist der Fehler durchgerutscht.

Sie führt jetzt echte Benutzerdatenblätter, beantwortet beide Wege und
liefert unter „Weiterschauen" nur noch, was eine gemerkte Stelle grösser
null hat. Unter `/__userdata` steht, was geschrieben wurde und wohin.

Gemessen im Simulator, nach einem Tipp auf den Eintrag:

    /UserItems/m2/UserData
    {"Played":false,"IsFavorite":false,"PlaybackPositionTicks":0,…}

Danach ist „Weiterschauen" leer und die Reihe verschwindet von der
Startseite.

**Zwei Dinge, die danach trotzdem auffallen können**, und beide sind
keine Fehler: Jellyfins „Als Nächstes" führt angefangene Folgen mit, eine
entfernte Folge kann dort wieder auftauchen. Und bei zusammengelegten
Reihen stehen auch Folgen ohne gemerkte Stelle — dort gibt es nichts zu
entfernen, und der Eintrag fehlt.

Plex bleibt unberührt: der Weg dort war in Ordnung und bekommt nur die
neue Form.

iOS und tvOS bauen, 469 Tests grün.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-10-01 09:30:20 +02:00

2.1 KiB

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.

Die Benutzerdaten sind echt: /UserItems/{id}/UserData und der ältere Weg /Users/{id}/Items/{id}/UserData lesen und schreiben ein Blatt je Titel, und „Weiterschauen" führt nur, was eine gemerkte Stelle grösser null hat. Unter http://127.0.0.1:8096/__userdata steht, was geschrieben wurde und über welchen der beiden Pfade — daran ist ablesbar, ob „Aus Weiterschauen entfernen" wirklich etwas tut.

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.