This commit is contained in:
2026-02-03 10:20:43 +03:00
parent 007d700a8e
commit 011f7be20f
4 changed files with 225 additions and 24 deletions

View File

@@ -208,6 +208,67 @@ def get_audio_filename(replica_index: int, user_id: int) -> str:
return f"{replica_index}_{user_id}.wav"
def is_scenario_complete(scenario_id: str) -> bool:
"""Проверяет, озвучены ли все дорожки сценария (у каждой есть полная запись)."""
with get_connection() as conn:
# Все дорожки с количеством реплик
all_tracks = conn.execute(
"""
SELECT speaker_id, COUNT(*) as replica_count
FROM replicas
WHERE scenario_id = ?
GROUP BY speaker_id
""",
(scenario_id,),
).fetchall()
if not all_tracks:
return False
for track in all_tracks:
speaker_id, replica_count = track[0], track[1]
# Есть ли хотя бы один пользователь, который полностью озвучил дорожку
complete_count = conn.execute(
"""
SELECT COUNT(*) FROM (
SELECT r.user_id
FROM recordings r
JOIN replicas rep ON r.scenario_id = rep.scenario_id
AND r.replica_index = rep.replica_index
WHERE r.scenario_id = ? AND rep.speaker_id = ?
GROUP BY r.user_id
HAVING COUNT(*) = ?
)
""",
(scenario_id, speaker_id, replica_count),
).fetchone()[0]
if complete_count == 0:
return False
return True
def move_scenario_to_data(scenario_id: str) -> None:
"""Переносит все файлы сценария из data_partial в data."""
partial_dir = get_partial_dir(scenario_id)
data_dir = get_data_dir(scenario_id)
if not partial_dir.exists():
return
data_dir.mkdir(parents=True, exist_ok=True)
moved_count = 0
for file in partial_dir.glob("*.wav"):
dst = data_dir / file.name
shutil.move(str(file), str(dst))
moved_count += 1
if moved_count > 0:
logger.info(f"Сценарий {scenario_id} завершён: перенесено {moved_count} файлов")
def move_track_to_data(user_id: int, scenario_id: str, speaker_id: int) -> None:
"""Переносит завершённую дорожку из data_partial в data."""
partial_dir = get_partial_dir(scenario_id)