Незавершённые дорожки в первую очередь
This commit is contained in:
@@ -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)
|
||||
|
||||
# Пропускаем сценарии, где пользователь уже записывает другую дорожку
|
||||
if scenario_id in user_scenario_ids:
|
||||
# Проверяем, записывает ли он именно эту дорожку
|
||||
if key in track_recordings and user_id in track_recordings[key]:
|
||||
# Пользователь уже записывает эту дорожку — пропускаем
|
||||
# Проверяем, есть ли у пользователя записи для этой дорожки
|
||||
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:
|
||||
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:
|
||||
|
||||
Reference in New Issue
Block a user