diff --git a/lib/tfw/components/history_monitor.py b/lib/tfw/components/history_monitor.py new file mode 100644 index 0000000..f0c2873 --- /dev/null +++ b/lib/tfw/components/history_monitor.py @@ -0,0 +1,37 @@ +from watchdog.observers import Observer +from watchdog.events import FileSystemEventHandler +from collections import deque +from os.path import dirname + + +class CallbackEventHandler(FileSystemEventHandler): + def __init__(self, *callbacks): + super().__init__() + self.callbacks = callbacks + + def on_modified(self, event): + for callback in self.callbacks: + callback() + + +class HistoryMonitor: + def __init__(self, histfile): + self.histfile = histfile + self._history = deque() + self.observer = Observer() + self.observer.schedule(CallbackEventHandler(self._fetch_history), dirname(self.histfile)) + + @property + def history(self): + return self._history + + def _fetch_history(self): + with open(self.histfile, 'r') as ifile: + self._history = deque(ifile.readlines()) + + def watch(self): + self.observer.start() + + def stop(self): + self.observer.stop() + self.observer.join()