]> git.treefish.org Git - photosort.git/blobdiff - src/dirtrigger.py
set exit status
[photosort.git] / src / dirtrigger.py
index f8f67cf66ed13f2d27d44a01f9df9e3ed6d142d2..67945debac96ab59950d5cb6512f4b1fa1291e7c 100644 (file)
@@ -1,6 +1,46 @@
-class DirTrigger:
-    def __init__(self, dir_path):
-        pass
+import threading
+import time
+from watchdog.events import DirDeletedEvent, FileDeletedEvent, FileSystemEventHandler
+from watchdog.observers import Observer
+
+class DirTrigger(FileSystemEventHandler):
+
+    def __init__(self, dir_path, cool_time, max_time):
+        self._got_event = False
+        self._last_event_time = 0.0
+        self._last_reset_time = 0.0
+        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)
+
+    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 > self._cool_time) ) or \
+                     time.time() - self._last_reset_time > self._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):
+        if event.event_type == FileDeletedEvent or event.event_type == DirDeletedEvent:
+            return
+
+        self._lock.acquire()
+        try:
+            self._got_event = True
+            self._last_event_time = time.time()
+        finally:
+            self._lock.release()