From 596d3a59ac1cd6c4fde8dc038b1e50410fedf99c Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Wed, 4 Nov 2026 17:50:45 +0900 Subject: [PATCH] fix: handle query timeout on add/remove actions --- dzgui/model/servers.py | 37 ++++++++++++++++++++++++++++++------- 1 file changed, 30 insertions(+), 7 deletions(-) diff --git a/dzgui/model/servers.py b/dzgui/model/servers.py index 4b278d5..a1d3082 100644 --- a/dzgui/model/servers.py +++ b/dzgui/model/servers.py @@ -201,19 +201,43 @@ class ServerModelManager: @call_on_thread(dialog.querying) def add_by_ip(self, addr: str) -> None: - res = Servers.query_by_ip(addr) - self._parse_single_record(res) + self.preserve_on_fail = True + try: + res = Servers.query_by_ip(addr) + self._parse_single_record(res) + except Exception as e: + logger.warning(e) + self.thread_man.set_cleanup_func( + StoredFunc(self._cleanup_on_failure), destroy_first=True + ) + return @call_on_thread(dialog.querying) def add_by_record(self, record: Servers.Record) -> None: + self.preserve_on_fail = True # NOTE: rationale: a raw Record as shown in server browser may resolve to a different IP - res = Servers.query_by_record(record) - self._parse_single_record(res) + try: + res = Servers.query_by_record(record) + self._parse_single_record(res) + except Exception as e: + logger.warning(e) + self.thread_man.set_cleanup_func( + StoredFunc(self._cleanup_on_failure), destroy_first=True + ) + return @call_on_thread(dialog.querying) def remove_by_record(self, record: Servers.Record) -> None: - res = Servers.query_by_record(record) - self._parse_single_record(res, delete=True) + self.preserve_on_fail = True + try: + res = Servers.query_by_record(record) + self._parse_single_record(res, delete=True) + except Exception as e: + logger.warning(e) + self.thread_man.set_cleanup_func( + StoredFunc(self._cleanup_on_failure), destroy_first=True + ) + return def update_history( self, @@ -280,7 +304,6 @@ class ServerModelManager: proxy_man.update_playercount(self.playercount) def _parse_single_record(self, response: "A2SInfo", delete: bool = False) -> None: - self.preserve_on_fail = True try: row = response.as_row() except Exception as e: