Незавершённые дорожки в первую очередь
This commit is contained in:
@@ -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:
|
||||||
|
|||||||
Reference in New Issue
Block a user