From f199ec8dd042303c6da6671e25026f5eb50c25ff Mon Sep 17 00:00:00 2001 From: Billy Date: Sun, 23 Jun 2024 22:07:22 +0900 Subject: [PATCH] fix: Bugs with directory tree watcher fixed --- src/biscuit/common/ui/tree.py | 5 ++- src/biscuit/events.py | 17 ++++--- src/biscuit/views/explorer/directorytree.py | 50 ++++++++++++--------- 3 files changed, 41 insertions(+), 31 deletions(-) diff --git a/src/biscuit/common/ui/tree.py b/src/biscuit/common/ui/tree.py index f498b162..f1f982b4 100644 --- a/src/biscuit/common/ui/tree.py +++ b/src/biscuit/common/ui/tree.py @@ -115,7 +115,10 @@ def identify_row(self, y) -> str: return self.tree.identify_row(y) def insert(self, *args, **kwargs): - return self.tree.insert(*args, **kwargs) + try: + return self.tree.insert(*args, **kwargs) + except tk.TclError: + return None def add(self, *a, **kw): return self.tree.insert("", "end", *a, **kw) diff --git a/src/biscuit/events.py b/src/biscuit/events.py index 9b969f8a..919c5f1a 100644 --- a/src/biscuit/events.py +++ b/src/biscuit/events.py @@ -65,8 +65,7 @@ def open(self, path: str, warn_for_directory=False) -> None: return if os.path.isdir(path): - self.open_directory(path) - return self.explorer.directory.refresh_root() + return self.open_directory(path) if os.path.isfile(path): return self.open_editor(path) @@ -79,13 +78,6 @@ def open_directory(self, dir: str) -> None: self.active_directory = dir - try: - self.git.check_git() - self.update_git() - except Exception as e: - self.logger.error(f"Checking git failed: {e}") - self.notifications.error("Checking git failed: see logs") - self.explorer.directory.change_path(dir) self.set_title(os.path.basename(self.active_directory)) @@ -93,6 +85,13 @@ def open_directory(self, dir: str) -> None: self.terminalmanager.delete_all_terminals() self.terminalmanager.open_terminal() + try: + self.git.check_git() + self.update_git() + except Exception as e: + self.logger.error(f"Checking git failed: {e}") + self.notifications.error("Checking git failed: see logs") + self.event_generate("<>", data=dir) def update_git(self) -> None: diff --git a/src/biscuit/views/explorer/directorytree.py b/src/biscuit/views/explorer/directorytree.py index 885f877b..2a9e6da6 100644 --- a/src/biscuit/views/explorer/directorytree.py +++ b/src/biscuit/views/explorer/directorytree.py @@ -219,17 +219,21 @@ def update_treeview(self, parent_path: str, parent="") -> None: if name in self.hide_dirs: continue - node = self.tree.insert( - parent or "", - "end", - text=f" {name}", - values=[path, "directory"], - # image="foldericon", - open=False, - tags="ignored" if unixlike in ignored else "", - ) - self.nodes[os.path.abspath(path)] = node - self.tree.insert(node, "end", text="loading...", tags="ignored") + try: + node = self.tree.insert( + parent or "", + "end", + text=f" {name}", + values=[path, "directory"], + # image="foldericon", + open=False, + tags="ignored" if unixlike in ignored else "", + ) + self.nodes[os.path.abspath(path)] = node + self.tree.insert(node, "end", text="loading...", tags="ignored") + except: + self.refresh_root() + break # NOTE: recursive mode loading (not good for large projects) # self.update_treeview(path, node) @@ -237,16 +241,20 @@ def update_treeview(self, parent_path: str, parent="") -> None: if name.split(".")[-1] in self.ignore_exts: continue - # TODO check filetype and get matching icon, cases - node = self.tree.insert( - parent, - "end", - text=f" {name}", - values=[path, "file"], - image="document", - tags="ignored" if unixlike in ignored else "", - ) - self.nodes[os.path.abspath(path)] = node + try: + # TODO check filetype and get matching icon, cases + node = self.tree.insert( + parent, + "end", + text=f" {name}", + values=[path, "file"], + image="document", + tags="ignored" if unixlike in ignored else "", + ) + self.nodes[os.path.abspath(path)] = node + except: + self.refresh_root() + break def selected_directory(self) -> str: """Returns the selected directory path, or the current path if no directory is selected."""