From 72e3054afb7b0ac073557f089121d4990455c714 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Wed, 2 Sep 2026 00:45:44 +0900 Subject: [PATCH] fix: wipe cache and redraw when filtering ServerTab.BROWSER --- dzgui/model/servers.py | 4 +++- dzgui/views/trees/tree_servers.py | 25 +++++++++++++++---------- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/dzgui/model/servers.py b/dzgui/model/servers.py index a429ffb..e3ef6c9 100644 --- a/dzgui/model/servers.py +++ b/dzgui/model/servers.py @@ -21,7 +21,7 @@ from dzgui.views.dialogs.generic import ExceptionDialog import gi gi.require_version("Gtk", "3.0") -from gi.repository import Gtk # noqa E402 +from gi.repository import Gtk, GLib # noqa E402 if TYPE_CHECKING: from dzgui.api.servers import A2SInfo, Record @@ -390,6 +390,8 @@ class ServerModelManager: def _cleanup_on_success(self) -> None: proxy = self.proxy_man.get_proxy_model() self.tv.set_model(proxy) + if self.tv.enum == ServerTab.BROWSER: + GLib.idle_add(self.tv.wipe_cache) if self.preserve_on_fail is True: self.proxy_man.wipe_cache() diff --git a/dzgui/views/trees/tree_servers.py b/dzgui/views/trees/tree_servers.py index 2ec2f32..bc54ac5 100644 --- a/dzgui/views/trees/tree_servers.py +++ b/dzgui/views/trees/tree_servers.py @@ -341,16 +341,22 @@ class ServerTreeView(ContextMixin, TreeView): # type: ignore control = self.proxy_man.get_control() return model, control - @staticmethod def ping_server( + self, model: "FastInsertListStore", _iter: Gtk.TreeIter, - ip: str, - qport: int, - ping_column: int, + record: Record, ) -> None: - _ping = ping(ip, qport) - GLib.idle_add(lambda: model.set(_iter, ping_column, _ping)) + _ping = ping(record.ip, record.qport) + GLib.idle_add(self._redraw, model, _iter, _ping) + + def _redraw(self, model: Gtk.TreeModel, _iter: Gtk.TreeIter, _ping: int) -> None: + ping_column = 9 + model.set(_iter, ping_column, _ping) + self.queue_draw() + + def wipe_cache(self) -> None: + self.seen_cache = [] def _get_ping( self, @@ -363,13 +369,12 @@ class ServerTreeView(ContextMixin, TreeView): # type: ignore addr_column = 7 qport_column = 8 - ping_column = 9 addr = model.get_value(_iter, addr_column).split(":") ip = addr[0] - gameport = addr[1] + gameport = int(addr[1]) qport = model.get_value(_iter, qport_column) - record = f"{addr}:{gameport}:{qport}" + record = Record(ip, gameport, qport) if record in self.seen_cache: return @@ -378,7 +383,7 @@ class ServerTreeView(ContextMixin, TreeView): # type: ignore thread = threading.Thread( daemon=True, target=self.ping_server, - args=(model, _iter, ip, qport, ping_column), + args=(model, _iter, record), ) thread.start()