diff --git a/web/frontend/index.html b/web/frontend/index.html
index 21b0f97..3002ea9 100644
--- a/web/frontend/index.html
+++ b/web/frontend/index.html
@@ -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;