Kyoo/scanner/monitor/scanner.py
2024-04-09 23:58:48 +02:00

36 lines
1.1 KiB
Python

import os
import re
import asyncio
from logging import getLogger
from pathlib import Path
from monitor.publisher import Publisher
from providers.kyoo_client import KyooClient
logger = getLogger(__name__)
async def scan(path: str, publisher: Publisher, client: KyooClient):
logger.info("Starting the scan. It can take some times...")
ignore_pattern = None
try:
ignore_pattern = re.compile(os.environ.get("LIBRARY_IGNORE_PATTERN", ""))
except Exception as e:
ignore_pattern = re.compile("")
logger.error(f"Invalid ignore pattern. Ignoring. Error: {e}")
registered = await client.get_registered_paths()
videos = [str(p) for p in Path(path).rglob("*") if p.is_file()]
to_register = [
p for p in videos if p not in registered and not ignore_pattern.match(p)
]
deleted = [x for x in registered if x not in videos]
if len(deleted) != len(registered):
await asyncio.gather(*map(publisher.delete, deleted))
elif len(deleted) > 0:
logger.warning("All video files are unavailable. Check your disks.")
await asyncio.gather(*map(publisher.add, to_register))
logger.info("Scan finished.")