first commit
This commit is contained in:
commit
865786f210
16 files changed
+743
No files matched your search
+36
@@ -0,0 +1,36 @@
|
||||
"""Сканирует 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)
|
||||
Reference in new issue
Block a user