From 141f96fb9ff9b96ebc7b0cd502dc517d2ef03ea2 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Thu, 22 Oct 2026 15:59:05 +0900 Subject: [PATCH] fix: allow using refresh button after timeout events (#484) --- dzgui/controllers/emitter.py | 4 ++++ dzgui/model/servers.py | 3 +++ dzgui/views/components/buttons.py | 14 ++++++++++---- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/dzgui/controllers/emitter.py b/dzgui/controllers/emitter.py index 28016ca..82b0e91 100644 --- a/dzgui/controllers/emitter.py +++ b/dzgui/controllers/emitter.py @@ -111,6 +111,10 @@ class Emitter(GObject.GObject): def check_toggled(self, label: str, state: bool) -> None: pass + @GObject.Signal(flags=GObject.SignalFlags.RUN_LAST, arg_types=()) + def servers_timed_out(self) -> None: + pass + @GObject.Signal(flags=GObject.SignalFlags.RUN_LAST, arg_types=(object,)) def servers_loaded(self, tag: "ServerTab") -> None: pass diff --git a/dzgui/model/servers.py b/dzgui/model/servers.py index e3ef6c9..4b278d5 100644 --- a/dzgui/model/servers.py +++ b/dzgui/model/servers.py @@ -92,6 +92,7 @@ class ServerModelManager: job = Servers.query_api params = Servers.params servers = [] + with ThreadPoolExecutor() as executor: futures = [executor.submit(job, key, APPID_DAYZ, param) for param in params] for future in as_completed(futures): @@ -414,6 +415,8 @@ class ServerModelManager: # TODO: disable map, keyword, and filter widgets if model is None # signal driven (servers_empty, servers_failed_to_load) + self.emitter.emit("servers_timed_out") + if self.preserve_on_fail is False: self.tv.set_model(None) filter_man = self.tv.get_filter_man() diff --git a/dzgui/views/components/buttons.py b/dzgui/views/components/buttons.py index 54f5097..bb3d45d 100644 --- a/dzgui/views/components/buttons.py +++ b/dzgui/views/components/buttons.py @@ -163,18 +163,24 @@ class RefreshButton(IconTextButton): self.set_tooltip_text(atomic_buttons.refresh_tooltip) self.connect("clicked", self._on_refresh_clicked) - emitter.connect("servers_loaded", self.start_decrement) + emitter.connect("servers_loaded", self._on_load) + emitter.connect("servers_timed_out", self._on_timeout) + + def _on_timeout(self, emitter: "Emitter") -> None: + self.is_clicked = True + self.start_decrement() + + def _on_load(self, emitter: "Emitter", tab: "ServerTab") -> None: + self.start_decrement() def _on_refresh_clicked(self, button: Self) -> None: """Spawned in a thread""" - if self.controller.get_active_treeview().is_loaded() is False: - return self.is_clicked = True self.controller.refresh_tree() # TODO: get server tab enum # if LAN tab, reload existing entries in place - def start_decrement(self, emitter: "Emitter", tab: "ServerTab") -> None: + def start_decrement(self) -> None: if self.is_clicked is False: return if self.loading: