fix: wipe cache and redraw when filtering ServerTab.BROWSER

This commit is contained in:
aclist committed 2026-09-02 00:45:44 +09:00
1 parent 2f4606ede0
commit 72e3054afb
2 files changed
+18 -11

No files matched your search

+3 -1
View File
@@ -21,7 +21,7 @@ from dzgui.views.dialogs.generic import ExceptionDialog
import gi import gi
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
from gi.repository import Gtk # noqa E402 from gi.repository import Gtk, GLib # noqa E402
if TYPE_CHECKING: if TYPE_CHECKING:
from dzgui.api.servers import A2SInfo, Record from dzgui.api.servers import A2SInfo, Record
@@ -390,6 +390,8 @@ class ServerModelManager:
def _cleanup_on_success(self) -> None: def _cleanup_on_success(self) -> None:
proxy = self.proxy_man.get_proxy_model() proxy = self.proxy_man.get_proxy_model()
self.tv.set_model(proxy) 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: if self.preserve_on_fail is True:
self.proxy_man.wipe_cache() self.proxy_man.wipe_cache()
+15 -10
View File
@@ -341,16 +341,22 @@ class ServerTreeView(ContextMixin, TreeView): # type: ignore
control = self.proxy_man.get_control() control = self.proxy_man.get_control()
return model, control return model, control
@staticmethod
def ping_server( def ping_server(
self,
model: "FastInsertListStore", model: "FastInsertListStore",
_iter: Gtk.TreeIter, _iter: Gtk.TreeIter,
ip: str, record: Record,
qport: int,
ping_column: int,
) -> None: ) -> None:
_ping = ping(ip, qport) _ping = ping(record.ip, record.qport)
GLib.idle_add(lambda: model.set(_iter, ping_column, _ping)) 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( def _get_ping(
self, self,
@@ -363,13 +369,12 @@ class ServerTreeView(ContextMixin, TreeView): # type: ignore
addr_column = 7 addr_column = 7
qport_column = 8 qport_column = 8
ping_column = 9
addr = model.get_value(_iter, addr_column).split(":") addr = model.get_value(_iter, addr_column).split(":")
ip = addr[0] ip = addr[0]
gameport = addr[1] gameport = int(addr[1])
qport = model.get_value(_iter, qport_column) qport = model.get_value(_iter, qport_column)
record = f"{addr}:{gameport}:{qport}" record = Record(ip, gameport, qport)
if record in self.seen_cache: if record in self.seen_cache:
return return
@@ -378,7 +383,7 @@ class ServerTreeView(ContextMixin, TreeView): # type: ignore
thread = threading.Thread( thread = threading.Thread(
daemon=True, daemon=True,
target=self.ping_server, target=self.ping_server,
args=(model, _iter, ip, qport, ping_column), args=(model, _iter, record),
) )
thread.start() thread.start()