"""Сканирует VIDEO_DIR, добавляет новые .mp4/.webm в БД. Удаляет из БД пропавшие файлы.""" from __future__ import annotations import os import sys from db import connect, init_db ALLOWED_EXT = {".mp4", ".webm", ".mov", ".m4v"} def scan_directory(video_dir: str) -> tuple[int, int]: init_db() if not os.path.isdir(video_dir): print(f"Нет папки: {video_dir}", file=sys.stderr) return 0, 0 on_disk = { f for f in os.listdir(video_dir) if os.path.isfile(os.path.join(video_dir, f)) and os.path.splitext(f)[1].lower() in ALLOWED_EXT } with connect() as con: in_db = {r["filename"] for r in con.execute("SELECT filename FROM videos")} new = sorted(on_disk - in_db) gone = sorted(in_db - on_disk) con.executemany("INSERT OR IGNORE INTO videos(filename) VALUES (?)", [(f,) for f in new]) if gone: ph = ",".join("?" * len(gone)) con.execute(f"DELETE FROM videos WHERE filename IN ({ph})", gone) print(f"Видео на диске: {len(on_disk)}, добавлено: {len(new)}, удалено: {len(gone)}") return len(new), len(on_disk) if __name__ == "__main__": video_dir = sys.argv[1] if len(sys.argv) > 1 else os.environ.get("VIDEO_DIR", "./videos") scan_directory(video_dir)