Scan directory on directory creation (used on directory rename)

This commit is contained in:
Zoe Roux 2024-04-29 01:42:32 +02:00
parent d9d7fd5000
commit fccc5b6ad9
No known key found for this signature in database
3 changed files with 19 additions and 12 deletions

View File

@ -14,7 +14,7 @@ async def main():
async with Publisher() as publisher, KyooClient() as client: async with Publisher() as publisher, KyooClient() as client:
path = os.environ.get("SCANNER_LIBRARY_ROOT", "/video") path = os.environ.get("SCANNER_LIBRARY_ROOT", "/video")
await asyncio.gather( await asyncio.gather(
monitor(path, publisher), monitor(path, publisher, client),
scan(path, publisher, client), scan(path, publisher, client, remove_deleted=True),
refresh(publisher, client), refresh(publisher, client),
) )

View File

@ -1,16 +1,21 @@
from logging import getLogger from logging import getLogger
from os.path import isdir
from watchfiles import awatch, Change from watchfiles import awatch, Change
from .publisher import Publisher from .publisher import Publisher
from .scanner import scan
from providers.kyoo_client import KyooClient
logger = getLogger(__name__) logger = getLogger(__name__)
async def monitor(path: str, publisher: Publisher): async def monitor(path: str, publisher: Publisher, client: KyooClient):
async for changes in awatch(path, ignore_permission_denied=True): async for changes in awatch(path, ignore_permission_denied=True):
for event, file in changes: for event, file in changes:
if event == Change.added: if event == Change.added:
await publisher.add(file) if isdir(file):
await scan(file, publisher, client)
else:
await publisher.add(file)
elif event == Change.deleted: elif event == Change.deleted:
await publisher.delete(file) await publisher.delete(file)
elif event == Change.modified: elif event == Change.modified:

View File

@ -9,7 +9,7 @@ from providers.kyoo_client import KyooClient
logger = getLogger(__name__) logger = getLogger(__name__)
async def scan(path: str, publisher: Publisher, client: KyooClient): async def scan(path: str, publisher: Publisher, client: KyooClient, remove_deleted = False):
logger.info("Starting the scan. It can take some times...") logger.info("Starting the scan. It can take some times...")
ignore_pattern = None ignore_pattern = None
try: try:
@ -25,12 +25,14 @@ async def scan(path: str, publisher: Publisher, client: KyooClient):
to_register = [ to_register = [
p for p in videos if p not in registered and not ignore_pattern.match(p) 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): if remove_deleted:
await asyncio.gather(*map(publisher.delete, deleted)) deleted = [x for x in registered if x not in videos]
elif len(deleted) > 0: if len(deleted) != len(registered):
logger.warning("All video files are unavailable. Check your disks.") 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)) await asyncio.gather(*map(publisher.add, to_register))
logger.info("Scan finished.") logger.info(f"Scan finished for {path}.")