From 8ddd8208f588d2be44c0aaa02a6e69cdfcd2bf05 Mon Sep 17 00:00:00 2001 From: team3 Date: Wed, 30 Sep 2026 19:53:27 +0200 Subject: [PATCH] update --- frontend/src/composables/useMeins.js | 7 +++---- frontend/src/live.js | 27 +++++++++++++++++++-------- 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/frontend/src/composables/useMeins.js b/frontend/src/composables/useMeins.js index 34f2f5e..a61cced 100644 --- a/frontend/src/composables/useMeins.js +++ b/frontend/src/composables/useMeins.js @@ -2,7 +2,7 @@ // Vorschlag, die gesehenen Filme und die Wünsche. Alles wird beim Start // geladen und über den Live-Kanal frisch gehalten. import { computed, onMounted, onUnmounted, ref } from 'vue' -import { abonnieren } from '../live' +import { abonnieren, neuVerbinden } from '../live' async function hole(url) { try { @@ -35,6 +35,7 @@ export function useMeins({ host }) { body: JSON.stringify({ user_id: id ?? null, movie_id: movieId }), }) if (!resp.ok) return false + neuVerbinden() // Sammlung, Vorschlag, Wertungen und Wünsche gehören zum Namen. Ohne // Nachladen zeigt die Seite weiter die des vorigen Benutzers. await ladeRunde() @@ -57,9 +58,7 @@ export function useMeins({ host }) { const gesehenIds = computed(() => new Set(gesehen.value.map((e) => e.movie_id))) // Ausgeblendete Filme zählen für Gäste nicht mit - const gesehenZahl = computed( - () => gesehen.value.filter((e) => host.value || !e.hidden).length - ) + const gesehenZahl = computed(() => gesehen.value.filter((e) => host.value || !e.hidden).length) // Wer schon vorgeschlagen hat, soll das in der Detailansicht sehen — // und alle Filme auf der Bahn, damit die Karten es zeigen können diff --git a/frontend/src/live.js b/frontend/src/live.js index 13640ab..7acc904 100644 --- a/frontend/src/live.js +++ b/frontend/src/live.js @@ -4,15 +4,26 @@ let quelle = null const hoerer = new Set() +function oeffnen() { + quelle = new EventSource('/api/events') + quelle.onmessage = (ereignis) => { + const nachricht = JSON.parse(ereignis.data) + hoerer.forEach((h) => h(nachricht)) + } + // Der Browser verbindet nach einem Abbruch von selbst neu +} + export function abonnieren(fn) { hoerer.add(fn) - if (!quelle) { - quelle = new EventSource('/api/events') - quelle.onmessage = (ereignis) => { - const nachricht = JSON.parse(ereignis.data) - hoerer.forEach((h) => h(nachricht)) - } - // Der Browser verbindet nach einem Abbruch von selbst neu - } + if (!quelle) oeffnen() return () => hoerer.delete(fn) } + +// Der Server merkt sich je Verbindung die Sitzung — daran hängt der +// grüne Punkt. In einem frischen Browser steht die Verbindung, bevor +// das Cookie da ist. Nach dem Namenswechsel darum einmal neu verbinden. +export function neuVerbinden() { + if (!quelle) return + quelle.close() + oeffnen() +}