X-Git-Url: http://git.treefish.org/~alex/photosort.git/blobdiff_plain/67fcc94b4fc560c01c877aa48c11fc327c2772f8..e7b340f1a05c4ef9a28a427d34ff12f14113c95c:/src/dirtrigger.py diff --git a/src/dirtrigger.py b/src/dirtrigger.py index f8f67cf..7978df3 100644 --- a/src/dirtrigger.py +++ b/src/dirtrigger.py @@ -1,6 +1,43 @@ -class DirTrigger: +import threading +import time +from watchdog.events import FileSystemEventHandler +from watchdog.observers import Observer + +class DirTrigger(FileSystemEventHandler): + COOL_TIME = 10 + MAX_TIME = 86400 + def __init__(self, dir_path): - pass + self._got_event = False + self._last_event_time = 0.0 + self._last_reset_time = 0.0 + self._lock = threading.Lock() + self._observer = Observer() + self._observer.schedule(self, path=dir_path, recursive=True) + + def start(self): + self._observer.start() + + def stop(self): + self._observer.stop() def is_triggering(self): - return False + self._lock.acquire() + try: + return ( self._got_event and + (time.time() - self._last_event_time > DirTrigger.COOL_TIME) ) or \ + time.time() - self._last_reset_time > DirTrigger.MAX_TIME + finally: + self._lock.release() + + def reset(self): + self._got_event = False + self._last_reset_time = time.time() + + def on_any_event(self, event): + self._lock.acquire() + try: + self._got_event = True + self._last_event_time = time.time() + finally: + self._lock.release()