X-Git-Url: http://git.treefish.org/~alex/photosort.git/blobdiff_plain/9abf01c0adb9b5e7b0d74da76bf7f86b49e30cb6..401e40082e476ff449e5d25a60a2bddc2d7f4345:/src/dirtrigger.py?ds=inline diff --git a/src/dirtrigger.py b/src/dirtrigger.py index 67945de..9047336 100644 --- a/src/dirtrigger.py +++ b/src/dirtrigger.py @@ -1,3 +1,4 @@ +import logging import threading import time from watchdog.events import DirDeletedEvent, FileDeletedEvent, FileSystemEventHandler @@ -12,8 +13,13 @@ class DirTrigger(FileSystemEventHandler): self._cool_time = cool_time self._max_time = max_time self._lock = threading.Lock() - self._observer = Observer() - self._observer.schedule(self, path=dir_path, recursive=True) + + try: + self._observer = Observer() + self._observer.schedule(self, path=dir_path, recursive=True) + except Exception as e: + logging.error("Error creating file observer for %s: %s", dir_path, str(e)) + raise e def start(self): self._observer.start() @@ -24,15 +30,20 @@ class DirTrigger(FileSystemEventHandler): def is_triggering(self): self._lock.acquire() try: + now = time.time() return ( self._got_event and - (time.time() - self._last_event_time > self._cool_time) ) or \ - time.time() - self._last_reset_time > self._max_time + (now - self._last_event_time > self._cool_time) ) or \ + now - self._last_reset_time > self._max_time finally: self._lock.release() def reset(self): - self._got_event = False - self._last_reset_time = time.time() + self._lock.acquire() + try: + self._got_event = False + self._last_reset_time = time.time() + finally: + self._lock.release() def on_any_event(self, event): if event.event_type == FileDeletedEvent or event.event_type == DirDeletedEvent: