modified: app.py

modified:   templates/quiz.html
This commit is contained in:
Simon
2025-05-17 11:27:08 +02:00
parent 0e5140dc3d
commit e65c08e7b8
2 changed files with 27 additions and 20 deletions

27
app.py
View File

@@ -78,30 +78,25 @@ def quiz(playlist_id):
if not tracks: if not tracks:
return "Keine Tracks verfügbar!" return "Keine Tracks verfügbar!"
# Gespielte Tracks aus der Session holen
played_tracks = session.get(f'played_tracks_{playlist_id}', []) played_tracks = session.get(f'played_tracks_{playlist_id}', [])
score = session.get(f'score_{playlist_id}', 0)
# Filtere bereits gespielte Tracks heraus
available_tracks = [t for t in tracks if t["id"] not in played_tracks] available_tracks = [t for t in tracks if t["id"] not in played_tracks]
# Wenn alle gespielt wurden, zurücksetzen
if not available_tracks: if not available_tracks:
played_tracks = [] played_tracks = []
available_tracks = tracks available_tracks = tracks
score = 0 # Score zurücksetzen, wenn alle gespielt
track = random.choice(available_tracks) track = random.choice(available_tracks)
played_tracks.append(track["id"]) played_tracks.append(track["id"])
session[f'played_tracks_{playlist_id}'] = played_tracks session[f'played_tracks_{playlist_id}'] = played_tracks
session[f'score_{playlist_id}'] = score
# Token aus der Sitzung holen für das Web Playback SDK
token_info = session.get('token_info', None) token_info = session.get('token_info', None)
if not token_info: if not token_info:
return redirect('/login') return redirect('/login')
# Zugriff auf access_token
access_token = token_info['access_token'] access_token = token_info['access_token']
# Alle Tracks für die Suchfunktion (für title und artist mode)
all_tracks = [] all_tracks = []
for item in tracks: for item in tracks:
track_info = { track_info = {
@@ -109,7 +104,7 @@ def quiz(playlist_id):
"name": item["name"], "name": item["name"],
"artist": item["artists"][0]["name"], "artist": item["artists"][0]["name"],
"uri": item["uri"], "uri": item["uri"],
"release_date": item.get("album", {}).get("release_date", "Unbekannt")[:4] # Nur das Jahr "release_date": item.get("album", {}).get("release_date", "Unbekannt")[:4]
} }
all_tracks.append(track_info) all_tracks.append(track_info)
@@ -119,7 +114,10 @@ def quiz(playlist_id):
access_token=access_token, access_token=access_token,
playlist_id=playlist_id, playlist_id=playlist_id,
game_mode=game_mode, game_mode=game_mode,
all_tracks=all_tracks all_tracks=all_tracks,
question_number=len(played_tracks),
total_questions=len(tracks),
score=score
) )
@app.route("/search_track", methods=["POST"]) @app.route("/search_track", methods=["POST"])
@@ -160,19 +158,22 @@ def check_answer():
guess = data.get('guess', '').lower() guess = data.get('guess', '').lower()
correct_answer = data.get('correct_answer', '').lower() correct_answer = data.get('correct_answer', '').lower()
game_mode = data.get('game_mode', 'artist') game_mode = data.get('game_mode', 'artist')
playlist_id = data.get('playlist_id')
# Beim Titelmodus Klammerzusätze entfernen
if game_mode == 'title': if game_mode == 'title':
guess = clean_title(guess) guess = clean_title(guess)
correct_answer = clean_title(correct_answer) correct_answer = clean_title(correct_answer)
# Bei Jahr-Modus: Exakte Übereinstimmung prüfen
if game_mode == 'year': if game_mode == 'year':
is_correct = guess == correct_answer is_correct = guess == correct_answer
else: else:
# Bei anderen Modi: Ähnlichkeitsprüfung (90% Übereinstimmung gilt als korrekt)
is_correct = similarity(guess, correct_answer) >= 0.9 is_correct = similarity(guess, correct_answer) >= 0.9
# Score erhöhen, wenn richtig
if is_correct and playlist_id:
key = f'score_{playlist_id}'
session[key] = session.get(key, 0) + 1
return { return {
"correct": is_correct, "correct": is_correct,
"correct_answer": correct_answer "correct_answer": correct_answer

View File

@@ -245,7 +245,8 @@
body: JSON.stringify({ body: JSON.stringify({
guess: guess, guess: guess,
correct_answer: correctAnswer, correct_answer: correctAnswer,
game_mode: currentGameMode game_mode: currentGameMode,
playlist_id: "{{ playlist_id }}"
}) })
}) })
.then(response => response.json()) .then(response => response.json())
@@ -283,10 +284,15 @@
window.location.href = `/quiz/{{ playlist_id }}?mode=${mode}`; window.location.href = `/quiz/{{ playlist_id }}?mode=${mode}`;
} }
</script> </script>
<meta name="viewport" content="width=device-width, initial-scale=1">
</head> </head>
<body> <body>
<div style="text-align:center; margin-bottom: 10px;">
<span id="progressInfo">Frage {{ question_number }} von {{ total_questions }}</span>
<span id="scoreInfo" style="margin-left:20px;">Punkte: {{ score }}</span>
</div>
<div style="text-align:center; margin-bottom: 20px;"> <div style="text-align:center; margin-bottom: 20px;">
<a href="/playlists" class="btn btn-secondary" style="text-decoration:none;">⬅️ Zurück zur Playlist-Auswahl</a> <a href="/playlists" class="btn btn-danger" style="margin-top:10px;">Quiz beenden</a>
</div> </div>
<h2 id="question-text">Wer ist der Künstler dieses Songs?</h2> <h2 id="question-text">Wer ist der Künstler dieses Songs?</h2>