From b7b84927682bcab362ccc7cdf7a9abf70b6fb677 Mon Sep 17 00:00:00 2001 From: Arity-T Date: Thu, 12 Feb 2026 09:20:12 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9D=D0=B5=D0=B7=D0=B0=D0=B2=D0=B5=D1=80?= =?UTF-8?q?=D1=88=D1=91=D0=BD=D0=BD=D1=8B=D0=B5=20=D0=B4=D0=BE=D1=80=D0=BE?= =?UTF-8?q?=D0=B6=D0=BA=D0=B8=20=D0=B2=20=D0=BF=D0=B5=D1=80=D0=B2=D1=83?= =?UTF-8?q?=D1=8E=20=D0=BE=D1=87=D0=B5=D1=80=D0=B5=D0=B4=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/scenarios.py | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) 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: