def METHOD_NAME(self, reindex: bool = False) -> Dict:
    watched_files: Dict[str, float] = {}
    watched_files_crc: Dict[str, str] = {}
    if not self.watched_files or reindex:
        for r in self.root:
            for root, dirs, files in os.walk(r, topdown=True):
                dirs[:] = [d for d in dirs if d not in self.ignored_dirs]
                for file in files:
                    file_path = os.path.join(root, file)
                    _dir = os.path.dirname(file_path)
                    if (
                        _dir not in self.ignored_dirs
                        and not any(
                            [
                                os.path.join(root, _dir).endswith("/{}".format(ignored_dir))
                                or "/{}/".format(ignored_dir) in os.path.join(root, _dir)
                                for ignored_dir in self.ignored_dirs
                            ]
                        )
                        and any([file.endswith(ending) for ending in self.watched_file_endings])
                        and "/." not in file_path
                    ):
                        watched_files[file_path] = os.path.getmtime(file_path)
                        watched_files_crc[file_path] = (
                            crc(file_path)
                            if watched_files[file_path] != self.watched_files.get(file_path)
                            else self.watched_files_crc.get(file_path, "")
                        )
    else:
        for file_path, mtime in self.watched_files.items():
            try:
                watched_files[file_path] = os.path.getmtime(file_path)
                watched_files_crc[file_path] = (
                    crc(file_path)
                    if watched_files[file_path] != self.watched_files.get(file_path)
                    else self.watched_files_crc.get(file_path, "")
                )
            except FileNotFoundError:
                pass
    if self.watched_files and self.watched_files != watched_files and self.watched_files_crc == watched_files_crc:
        self.watched_files = watched_files
    if self.watched_files and self.watched_files != watched_files:
        added = [
            k[((len(self.root[0]) if k.startswith(self.root[0]) else -1) + 1) :]
            for k in watched_files
            if k not in self.watched_files
        ]
        removed = [
            k[((len(self.root[0]) if k.startswith(self.root[0]) else -1) + 1) :]
            for k in self.watched_files
            if k not in watched_files
        ]
        updated = [
            k[((len(self.root[0]) if k.startswith(self.root[0]) else -1) + 1) :]
            for k in watched_files
            if k in self.watched_files and self.watched_files[k] != watched_files[k]
        ]
        self.watched_files = watched_files
        self.watched_files_crc = watched_files_crc
        return {"added": added, "removed": removed, "updated": updated}
    self.watched_files = watched_files
    self.watched_files_crc = watched_files_crc
    return {}