Die Fortschrittsmeldungen waren stumm

Sie hingen an einem verschluckten catch. Beim Suchen nach dem verlorenen
Fortschritt war deshalb nirgends zu sehen, ob sie überhaupt ankommen —
ohne await zu senden ist richtig, ohne Hinsehen nicht.

Jetzt steht in der Konsole, was angenommen und was abgelehnt wurde.

Dazu ein Hinweis auf die Regel des Servers, die den eigentlichen Fall
erklärt: Jellyfin merkt sich eine Fortsetzposition nur zwischen fünf und
neunzig Prozent der Laufzeit. Eine halbe Minute von einem Film liegt
darunter, und der Server verwirft sie bewusst — "kurz reingeschaut" ist
kein Weiterschauen. Wer das nicht weiß, sucht den Fehler bei sich.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-09-14 19:02:01 +02:00
co-authored by Claude Opus 5
parent b51bb16de0
commit 87b9fae94b
+26 -7
View File
@@ -1768,6 +1768,19 @@ function openPlayer(item) {
document.body.style.overflow = '';
// Die Startseite kennt den neuen Fortschritt noch nicht.
if (current === 'home') renderHome();
// Jellyfin merkt sich eine Fortsetzposition nur zwischen fünf und
// neunzig Prozent der Laufzeit (MinResumePct/MaxResumePct). Wer früher
// abbricht, findet den Titel nicht unter „Weiterschauen" — das ist keine
// Panne, sondern die Regel des Servers. Gesagt wird es trotzdem, sonst
// sucht man den Fehler bei sich.
const anteil = lauf.sitzung?.stelle && v.duration
? lauf.sitzung.stelle / v.duration : 0;
if (anteil > 0 && anteil < 0.05) {
console.info(`[Flixy] Bei ${(anteil * 100).toFixed(1)} % beendet — `
+ 'Jellyfin merkt sich das erst ab 5 %. Einstellbar im Dashboard unter '
+ 'Wiedergabe → Fortsetzen.');
}
}
/* **Zurück aus dem Hintergrund.**
@@ -2052,21 +2065,27 @@ function wireProgress(video, session) {
session.stelle = 0;
const send = (path, stelle = session.stelle, extra = {}) => {
// Absichtlich ohne await: eine verlorene Meldung kostet ein paar Sekunden
// Fortschritt. Dafür mitten im Film einen Fehler zu zeigen wäre die
// schlechtere Hälfte des Tauschs.
const ticks = Math.round(stelle * 10_000_000);
// Ohne await, aber **nicht** ohne Hinsehen: mitten im Film einen Fehler
// anzuzeigen wäre die schlechtere Hälfte des Tauschs — ihn gar nicht
// erst zu bemerken aber auch. Ein verschlucktes `catch` hat genau das
// getan, und deshalb war beim Suchen nach dem verlorenen Fortschritt
// nirgends zu sehen, ob die Meldungen überhaupt ankamen.
api(path, {
method: 'POST',
body: JSON.stringify({
ItemId: session.itemID, PlaySessionId: session.id,
MediaSourceId: session.sourceID,
PositionTicks: Math.round(stelle * 10_000_000),
// Jellyfin ordnet die Meldung sonst keiner Art von Wiedergabe zu und
// verwirft sie stillschweigend.
PositionTicks: ticks,
// Ohne die ordnet Jellyfin die Meldung keiner Art von Wiedergabe zu.
PlayMethod: 'Transcode', CanSeek: true,
...extra,
}),
}).catch(() => {});
}).then(() => {
console.debug(`[Flixy] ${path} → ${(stelle / 60).toFixed(1)} min angenommen`);
}).catch((e) => {
console.warn(`[Flixy] ${path} abgelehnt: ${e.message}`);
});
};
session.melden = send;