diff --git a/backend/app/suggestions.py b/backend/app/suggestions.py index 124de96..042c349 100644 --- a/backend/app/suggestions.py +++ b/backend/app/suggestions.py @@ -122,7 +122,14 @@ def ziehen(): if not eintraege: return None - treffer = random.randrange(len(eintraege)) + # Schon gelaufene Filme überspringen. Sind alle Vorschläge gesehen, + # bleibt es bei der vollen Auswahl — sonst gäbe es keinen Gewinner. + with connect() as conn: + gesehen = { + r["movie_id"] for r in conn.execute("SELECT movie_id FROM watched") + } + frisch = [i for i, e in enumerate(eintraege) if e["movie_id"] not in gesehen] + treffer = random.choice(frisch) if frisch else random.randrange(len(eintraege)) schritt = 360 / len(eintraege) runden = 5 + random.randrange(3) # Der Zeiger steht oben, also muss die Mitte des Zielsegments dorthin diff --git a/frontend/src/App.vue b/frontend/src/App.vue index 5d955ef..1292667 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -331,6 +331,11 @@ async function ladeGesehen() { } } +// Für die Karten: nur die Kennungen, als Menge zum schnellen Nachschlagen +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 @@ -659,12 +664,14 @@ onUnmounted(() => {
{ :host="host" :merkliste="merkliste" :mine="meinVorschlag?.id ?? null" + :gesehen-ids="gesehenIds" @open="selected = $event" @reset="meinVorschlag = null" /> @@ -709,6 +717,7 @@ onUnmounted(() => { { { ({}) }, ansicht: { type: String, default: 'kompakt' }, + gesehenIds: { type: Set, default: () => new Set() }, // Kommt aus der Filmansicht: von diesem Film soll es losgehen start: { type: Object, default: null }, }) @@ -177,6 +178,7 @@ async function oeffnen(movie) { :key="film.id" :movie="film" :ansicht="ansicht" + :gesehen="gesehenIds.has(film.id)" @open="waehlen" />
@@ -203,6 +205,7 @@ async function oeffnen(movie) { :key="film.id" :movie="film" :ansicht="ansicht" + :gesehen="gesehenIds.has(film.id)" @open="oeffnen" /> diff --git a/frontend/src/components/MerklisteTab.vue b/frontend/src/components/MerklisteTab.vue index 41be788..8980a93 100644 --- a/frontend/src/components/MerklisteTab.vue +++ b/frontend/src/components/MerklisteTab.vue @@ -5,6 +5,7 @@ import { posterUrl } from '../images' const props = defineProps({ items: { type: Array, default: () => [] }, ich: { type: Object, default: null }, + gesehenIds: { type: Set, default: () => new Set() }, }) // Nach Person gruppiert, die eigene Sammlung zuerst @@ -87,7 +88,12 @@ async function oeffnen(item) {
-
+