diff --git a/src/scenarios.py b/src/scenarios.py index e1d338f..1e62b59 100644 --- a/src/scenarios.py +++ b/src/scenarios.py @@ -89,6 +89,7 @@ def find_available_track(user_id: int) -> tuple[str, int] | None: """ Находит доступную дорожку для пользователя с учётом пола. Приоритет: + 0. Незавершенные дорожки самого пользователя (высший приоритет!) 1. Дорожки, которые никто не начал озвучивать 2. Дорожки, которые кто-то начал, но не закончил 3. Дорожки с готовой озвучкой (для дополнительных записей) @@ -163,21 +164,35 @@ def find_available_track(user_id: int) -> tuple[str, int] | None: } # Категоризация дорожек + # Незавершенные дорожки пользователя + user_incomplete: list[tuple[str, int]] = [] untouched: list[tuple[str, int]] = [] # никто не начал - in_progress: list[tuple[str, int]] = [] # начато, не закончено + in_progress: list[tuple[str, int]] = [] # начато другими completed: list[tuple[str, int]] = [] # есть готовая запись for row in all_tracks: scenario_id, speaker_id, replica_count = row[0], row[1], row[2] key = (scenario_id, speaker_id) - # Пропускаем сценарии, где пользователь уже записывает другую дорожку + # Проверяем, есть ли у пользователя записи для этой дорожки + user_has_recordings = ( + key in track_recordings and user_id in track_recordings[key] + ) + + if user_has_recordings: + # Пользователь уже озвучивает эту дорожку + user_recorded_count = track_recordings[key][user_id] + if user_recorded_count < replica_count: + # Дорожка не завершена - высший приоритет + user_incomplete.append(key) + else: + # Дорожка завершена пользователем - низкий приоритет + completed.append(key) + continue + + # Пользователь не записывает эту дорожку + # Пропускаем, если он записывает другую дорожку в этом сценарии if scenario_id in user_scenario_ids: - # Проверяем, записывает ли он именно эту дорожку - if key in track_recordings and user_id in track_recordings[key]: - # Пользователь уже записывает эту дорожку — пропускаем - continue - # Пользователь записывает другую дорожку в этом сценарии continue if key not in track_recordings: @@ -195,6 +210,8 @@ def find_available_track(user_id: int) -> tuple[str, int] | None: in_progress.append(key) # Выбираем по приоритету + if user_incomplete: + return user_incomplete[0] if untouched: return untouched[0] if in_progress: