mirror of
https://github.com/zoriya/Kyoo.git
synced 2025-06-06 07:04:12 -04:00
49 lines
1.5 KiB
Python
49 lines
1.5 KiB
Python
from logging import getLogger
|
|
from os.path import isdir, dirname, exists, join
|
|
from watchfiles import awatch, Change
|
|
from .publisher import Publisher
|
|
from .scanner import scan, get_ignore_pattern
|
|
from providers.kyoo_client import KyooClient
|
|
|
|
logger = getLogger(__name__)
|
|
|
|
|
|
def is_ignored_path(path: str) -> bool:
|
|
"""Check if the path is within a directory that contains a `.ignore` file."""
|
|
current_path = path
|
|
while current_path != "/": # Traverse up to the root directory
|
|
if exists(join(current_path, ".ignore")):
|
|
return True
|
|
current_path = dirname(current_path)
|
|
return False
|
|
|
|
|
|
async def monitor(path: str, publisher: Publisher, client: KyooClient):
|
|
ignore_pattern = get_ignore_pattern()
|
|
async for changes in awatch(path, ignore_permission_denied=True):
|
|
for event, file in changes:
|
|
# Check for ignore conditions
|
|
if is_ignored_path(file):
|
|
logger.info(
|
|
"Ignoring event %s for file %s (due to .ignore file)", event, file
|
|
)
|
|
continue
|
|
if ignore_pattern and ignore_pattern.match(file):
|
|
logger.info(
|
|
"Ignoring event %s for file %s (due to IGNORE_PATTERN)", event, file
|
|
)
|
|
continue
|
|
|
|
logger.info("Change %s occurred for file %s", event, file)
|
|
match event:
|
|
case Change.added if isdir(file):
|
|
await scan(file, publisher, client)
|
|
case Change.added:
|
|
await publisher.add(file)
|
|
case Change.deleted:
|
|
await publisher.delete(file)
|
|
case Change.modified:
|
|
pass
|
|
case _:
|
|
logger.warning("Unknown file event %s (for file %s)", event, file)
|