This commit is contained in:
team3
2026-09-30 19:53:27 +02:00
parent 09ae21c4b2
commit 8ddd8208f5
2 changed files with 22 additions and 12 deletions

View File

@@ -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

View File

@@ -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()
}