diff --git a/app.py b/app.py index ec8a1d7..8c9616e 100644 --- a/app.py +++ b/app.py @@ -137,8 +137,10 @@ def quiz(playlist_id): if not tracks: return "Keine Tracks verfügbar!" + # Verwende einen Ring-Buffer: nur die letzten 50 Songs merken (verhindert Session-Overflow) played_tracks = session.get(f'played_tracks_{playlist_id}', []) score = session.get(f'score_{playlist_id}', 0) + total_played = session.get(f'total_played_{playlist_id}', 0) # Zähler für alle gespielten Songs # Wenn alle Songs gespielt wurden, played_tracks zurücksetzen, Score bleibt! available_tracks = [t for t in tracks if t["id"] not in played_tracks] @@ -149,11 +151,18 @@ def quiz(playlist_id): track = random.choice(available_tracks) played_tracks.append(track["id"]) + + # Ring-Buffer: Halte nur die letzten 75 gespielten Track-IDs (verhindert Session-Overflow bei großen Playlists) + if len(played_tracks) > 75: + played_tracks = played_tracks[-75:] + + total_played += 1 session[f'played_tracks_{playlist_id}'] = played_tracks session[f'score_{playlist_id}'] = score + session[f'total_played_{playlist_id}'] = total_played - # Für die Anzeige der beantworteten Fragen - answered = len(played_tracks) - 1 if len(played_tracks) > 0 else 0 + # Für die Anzeige der beantworteten Fragen (nutze total_played statt len(played_tracks)) + answered = total_played - 1 if total_played > 0 else 0 token_info = session.get('token_info', None) if not token_info: @@ -307,6 +316,7 @@ def index(): def reset_quiz(playlist_id): session.pop(f'played_tracks_{playlist_id}', None) session.pop(f'score_{playlist_id}', None) + session.pop(f'total_played_{playlist_id}', None) # Auch den Zähler zurücksetzen next_mode = request.args.get('next_mode') if next_mode: return redirect(url_for('quiz', playlist_id=playlist_id, mode=next_mode))