Example #1
0
class FSMonitorTest(object):
    def __init__(self, fsmonitor_class=None):
        self.monitor = FSMonitorThread(self.__callback,
                                       fsmonitor_class=fsmonitor_class)
        self._lock = threading.Lock()
        self._events = []

    def __callback(self, evt):
        with self._lock:
            self._events.append(evt)

    @property
    def events(self):
        with self._lock:
            return list(self._events)

    def add_dir_watch(self, *args, **kwargs):
        return self.monitor.add_dir_watch(*args, **kwargs)

    def add_file_watch(self, *args, **kwargs):
        return self.monitor.add_file_watch(*args, **kwargs)

    def remove_watch(self, *args, **kwargs):
        self.monitor.remove_watch(*args, **kwargs)

    def event_happened(self, action=None, name=None, path=None):
        for evt in self.events:
            if (name is None or evt.name == name) \
            and (action is None or evt.action == action) \
            and (path is None or evt.path == path):
                return True
        return False
Example #2
0
    def __init__(self):
        wx.Frame.__init__(self,
                          None,
                          title="FSMonitor wxWidgets Demo",
                          size=(600, 800))

        self.list = wx.ListBox(self)
        btn_add = wx.Button(self, label="&Add")
        btn_remove = wx.Button(self, label="&Remove")
        btn_clear = wx.Button(self, label="&Clear")
        self.log = wx.TextCtrl(self,
                               style=wx.TE_MULTILINE | wx.TE_READONLY
                               | wx.TE_DONTWRAP)

        btnsizer = wx.BoxSizer(wx.HORIZONTAL)
        btnsizer.AddStretchSpacer()
        btnsizer.Add(btn_add, 0, wx.ALL, 5)
        btnsizer.Add(btn_remove, 0, wx.RIGHT | wx.TOP | wx.BOTTOM, 5)
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(wx.StaticText(self, label="Directories to monitor:"), 0,
                  wx.LEFT | wx.RIGHT | wx.TOP, 5)
        sizer.Add(self.list, 1, wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM, 5)
        sizer.Add(btnsizer, 0, wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM, 5)
        sizer.Add(wx.StaticText(self, label="Monitor log:"), 0,
                  wx.LEFT | wx.RIGHT, 5)
        sizer.Add(self.log, 2, wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM, 5)
        sizer.Add(btn_clear, 0,
                  wx.ALIGN_RIGHT | wx.LEFT | wx.RIGHT | wx.BOTTOM, 5)
        self.SetSizer(sizer)

        self.Bind(wx.EVT_CLOSE, self.OnClose)
        self.Bind(wx.EVT_BUTTON, self.OnAdd, btn_add)
        self.Bind(wx.EVT_BUTTON, self.OnRemove, btn_remove)
        self.Bind(wx.EVT_BUTTON, self.OnClear, btn_clear)

        self.monitor = FSMonitorThread(
            callback=lambda event: wx.CallAfter(self.OnFSEvent, event))
Example #3
0
 def __init__(self, fsmonitor_class=None):
     self.monitor = FSMonitorThread(self.__callback,
                                    fsmonitor_class=fsmonitor_class)
     self._lock = threading.Lock()
     self._events = []
Example #4
0
 def __init__(self):
     self.monitor = FSMonitorThread(self.__callback)
     self._lock = threading.Lock()
     self._events = []
Example #5
0
class DemoFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self,
                          None,
                          title="FSMonitor wxWidgets Demo",
                          size=(600, 800))

        self.list = wx.ListBox(self)
        btn_add = wx.Button(self, label="&Add")
        btn_remove = wx.Button(self, label="&Remove")
        btn_clear = wx.Button(self, label="&Clear")
        self.log = wx.TextCtrl(self,
                               style=wx.TE_MULTILINE | wx.TE_READONLY
                               | wx.TE_DONTWRAP)

        btnsizer = wx.BoxSizer(wx.HORIZONTAL)
        btnsizer.AddStretchSpacer()
        btnsizer.Add(btn_add, 0, wx.ALL, 5)
        btnsizer.Add(btn_remove, 0, wx.RIGHT | wx.TOP | wx.BOTTOM, 5)
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(wx.StaticText(self, label="Directories to monitor:"), 0,
                  wx.LEFT | wx.RIGHT | wx.TOP, 5)
        sizer.Add(self.list, 1, wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM, 5)
        sizer.Add(btnsizer, 0, wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM, 5)
        sizer.Add(wx.StaticText(self, label="Monitor log:"), 0,
                  wx.LEFT | wx.RIGHT, 5)
        sizer.Add(self.log, 2, wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM, 5)
        sizer.Add(btn_clear, 0,
                  wx.ALIGN_RIGHT | wx.LEFT | wx.RIGHT | wx.BOTTOM, 5)
        self.SetSizer(sizer)

        self.Bind(wx.EVT_CLOSE, self.OnClose)
        self.Bind(wx.EVT_BUTTON, self.OnAdd, btn_add)
        self.Bind(wx.EVT_BUTTON, self.OnRemove, btn_remove)
        self.Bind(wx.EVT_BUTTON, self.OnClear, btn_clear)

        self.monitor = FSMonitorThread(
            callback=lambda event: wx.CallAfter(self.OnFSEvent, event))

    def OnClose(self, evt):
        self.Hide()
        self.monitor.stop()
        self.Destroy()

    def AddPath(self, path):
        try:
            watch = self.monitor.add_dir_watch(path)
        except OSError as e:
            dlg = wx.MessageDialog(self, str(e), "Error",
                                   wx.OK | wx.ICON_ERROR)
            dlg.ShowModal()
            dlg.Destroy()
        else:
            self.list.Append(path, watch)

    def OnAdd(self, evt):
        dlg = wx.DirDialog(self)
        try:
            if dlg.ShowModal() == wx.ID_OK:
                self.AddPath(dlg.GetPath())
        finally:
            dlg.Destroy()

    def OnRemove(self, evt):
        selection = self.list.GetSelection()
        if selection != wx.NOT_FOUND:
            watch = self.list.GetClientData(selection)
            self.monitor.remove_watch(watch)
            self.list.Delete(selection)

    def OnClear(self, evt):
        self.log.Clear()

    def OnFSEvent(self, evt):
        path = os.path.join(evt.watch.path, evt.name)
        message = "%s %s\n" % (evt.action_name, path)
        self.log.AppendText(message)
Example #6
0
from pathlib import Path
from time import sleep

from fsmonitor import FSMonitorThread

a = Path("home/ark/shared/config/GameUserSettings-coliseum.ini")


def cb(event):
    if event.action_name == "modify":
        if event.name == a.name:
            print("YES!")
    # print(event.action_name)
    # print(event.name)


m = FSMonitorThread(callback=cb)
watch = m.add_dir_watch("/home/ark/shared/config")

while True:
    sleep(1)
    print(".")