Незавершённые дорожки в первую очередь

This commit is contained in:
2026-02-12 09:20:12 +03:00
parent f45fd66562
commit b7b8492768

View File

@@ -89,6 +89,7 @@ def find_available_track(user_id: int) -> tuple[str, int] | None:
""" """
Находит доступную дорожку для пользователя с учётом пола. Находит доступную дорожку для пользователя с учётом пола.
Приоритет: Приоритет:
0. Незавершенные дорожки самого пользователя (высший приоритет!)
1. Дорожки, которые никто не начал озвучивать 1. Дорожки, которые никто не начал озвучивать
2. Дорожки, которые кто-то начал, но не закончил 2. Дорожки, которые кто-то начал, но не закончил
3. Дорожки с готовой озвучкой (для дополнительных записей) 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]] = [] # никто не начал untouched: list[tuple[str, int]] = [] # никто не начал
in_progress: list[tuple[str, int]] = [] # начато, не закончено in_progress: list[tuple[str, int]] = [] # начато другими
completed: list[tuple[str, int]] = [] # есть готовая запись completed: list[tuple[str, int]] = [] # есть готовая запись
for row in all_tracks: for row in all_tracks:
scenario_id, speaker_id, replica_count = row[0], row[1], row[2] scenario_id, speaker_id, replica_count = row[0], row[1], row[2]
key = (scenario_id, speaker_id) key = (scenario_id, speaker_id)
# Пропускаем сценарии, где пользователь уже записывает другую дорожку # Проверяем, есть ли у пользователя записи для этой дорожки
if scenario_id in user_scenario_ids: user_has_recordings = (
# Проверяем, записывает ли он именно эту дорожку key in track_recordings and user_id in track_recordings[key]
if 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 continue
# Пользователь записывает другую дорожку в этом сценарии
# Пользователь не записывает эту дорожку
# Пропускаем, если он записывает другую дорожку в этом сценарии
if scenario_id in user_scenario_ids:
continue continue
if key not in track_recordings: 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) in_progress.append(key)
# Выбираем по приоритету # Выбираем по приоритету
if user_incomplete:
return user_incomplete[0]
if untouched: if untouched:
return untouched[0] return untouched[0]
if in_progress: if in_progress: