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)
Exemple #3
0
    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)
Exemple #4
0
    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)