def on_inotify_event(self, ev) -> None: try: logger.debug( "inotify-event: name: '%s' mask: %s", ev.name, ", ".join([str(x) for x in inotify_flags.from_mask(ev.mask)])) location = Location.join(self.location, ev.name) if ev.mask & inotify_flags.CREATE: self.sig_file_added.emit(self.vfs.get_fileinfo(location)) elif ev.mask & inotify_flags.DELETE: self.sig_file_removed.emit(location) elif ev.mask & inotify_flags.DELETE_SELF: pass # directory itself has disappeared elif ev.mask & inotify_flags.MOVE_SELF: pass # directory itself has moved elif ev.mask & inotify_flags.MODIFY or ev.mask & inotify_flags.ATTRIB: self.sig_file_modified.emit(self.vfs.get_fileinfo(location)) elif ev.mask & inotify_flags.MOVED_FROM: self.sig_file_removed.emit(location) elif ev.mask & inotify_flags.MOVED_TO: self.sig_file_added.emit(self.vfs.get_fileinfo(location)) elif ev.mask & inotify_flags.CLOSE_WRITE: self.sig_file_closed.emit(self.vfs.get_fileinfo(location)) else: # unhandled event print("ERROR: Unhandled flags:") for flag in inotify_flags.from_mask(ev.mask): print(' ' + str(flag)) except Exception as err: print(traceback.format_exc()) print("DirectoryWatcher:", err)
def process(self) -> None: fileinfos = [] logger.debug("DirectoryWatcher.process: gather directory content") for entry in os.listdir(self.path): location = Location.join(self.location, entry) fileinfo = self.vfs.get_fileinfo(location) fileinfos.append(fileinfo) if self._close: return self.sig_scandir_finished.emit(fileinfos)
def test_location_join(self): join_texts = [ ("file:///home/juser/test.rar//rar", "foobar", ("file", "/home/juser/test.rar", [Payload("rar", "foobar")])), ("file:///home/juser/test.rar//rar:foo.rar//rar", "foobar.png", ("file", "/home/juser/test.rar", [Payload("rar", "foo.rar"), Payload("rar", "foobar.png")])), ("file:///home/juser/test.rar//rar:foo.rar//rar:foobar", "bar.png", ("file", "/home/juser/test.rar", [Payload("rar", "foo.rar"), Payload("rar", "foobar/bar.png")])), ] for base_text, join_text, (protocol, abspath, payloads) in join_texts: base = Location.from_url(base_text) result = Location.join(base, join_text) self.assertEqual(result._protocol, protocol, base_text) self.assertEqual(result._path, abspath, base_text) self.assertEqual(result._payloads, payloads, base_text)