From f86e37dbe117a52a76086396295c9421b6452b7e Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Tue, 24 Feb 2026 20:30:38 +0900 Subject: [PATCH] fix: separate id/ip methods --- dzgui/api/servers.py | 24 ++++++++++++++---------- dzgui/managers/connection.py | 5 ++--- dzgui/managers/contextmenu.py | 15 +++++---------- dzgui/model/servers.py | 15 +++++++++++++-- dzgui/views/components/connect_panel.py | 13 +++++++++---- 5 files changed, 43 insertions(+), 29 deletions(-) diff --git a/dzgui/api/servers.py b/dzgui/api/servers.py index 82d5fd2..923ddfe 100644 --- a/dzgui/api/servers.py +++ b/dzgui/api/servers.py @@ -460,18 +460,22 @@ def response_to_fq_ip(res: dict) -> str: return f"{ip}:{gameport}:{qport}" -def query_id_or_ip(addr: str, key: str) -> Optional[dict]: - # NOTE: Battlemetrics - if addr.isdigit(): - try: - resolved = map_id_to_record(key, addr) - res = query_direct(resolved.ip, resolved.qport) - except Exception as e: - logger.critical(e) - return None - else: +# NOTE: Battlemetrics +def query_by_id(addr: str, key: str) -> Optional[dict]: + try: + resolved = map_id_to_record(key, addr) + res = query_direct(resolved.ip, resolved.qport) + except Exception as e: + logger.critical(e) + return None + +def query_by_ip(addr: str) -> Optional[dict]: + try: record = addr.split(":") # TODO: create a Record object ip, qport = record[0], record[2] res = query_direct(ip, int(qport)) + except Exception as e: + logger.critical(e) + return None return res diff --git a/dzgui/managers/connection.py b/dzgui/managers/connection.py index 5787375..e597047 100644 --- a/dzgui/managers/connection.py +++ b/dzgui/managers/connection.py @@ -22,9 +22,8 @@ class ConnectionManager: self.thread_man = ThreadingManager(parent=controller) @call_on_thread(dialog.querying) - def connect_by_id_or_ip(self, addr: str, key: str) -> None: - res = Servers.query_id_or_ip(addr, key) - print(res) + def connect_by_ip(self, addr: str) -> None: + res = Servers.query_by_ip(addr) if res is None: self.thread_man.set_cleanup_func(StoredFunc(self._connection_failure)) # TODO: add to history if successful diff --git a/dzgui/managers/contextmenu.py b/dzgui/managers/contextmenu.py index 33c9198..ccace96 100644 --- a/dzgui/managers/contextmenu.py +++ b/dzgui/managers/contextmenu.py @@ -59,20 +59,15 @@ class ContextMenuManager: self.controller.set_fav() # THREADED + case ContextMenu.ADD_SERVER: + record = self.treeview.get_record_string() + ServerModelManager(self.controller, self.treeview).add_by_ip(record) + # TODO: update tab with ! case ContextMenu.CONNECT: record = self.treeview.get_record_string() # FIXME: context menu connections do not require BM key key = self.controller.get_config_man().lookup(Preferences.BM) - ConnectionManager(self.controller).connect_by_id_or_ip(record, key) - case ContextMenu.ADD_SERVER: - record = self.treeview.get_record_string() - ServerModelManager(self.controller, self.treeview).add_by_id_or_ip( - record - ) - # add to saved servers model verbatim and sort in place - # update tab with ! - # update config file with IP - pass + ConnectionManager(self.controller).connect_ip(record, key) case ContextMenu.REFRESH_PLAYERS: # get record # call a2s on thread diff --git a/dzgui/model/servers.py b/dzgui/model/servers.py index f5e9ddc..c947718 100644 --- a/dzgui/model/servers.py +++ b/dzgui/model/servers.py @@ -187,8 +187,19 @@ class ServerModelManager: self._push_data(parsed) @call_on_thread(dialog.querying) - def add_by_id_or_ip(self, addr: str) -> None: - res = Servers.query_id_or_ip(addr) + def add_by_id(self, addr: str) -> None: + # KEY + config_man = self.controller.get_config_man() + key = config_man.lookup(Preferences.BM) + res = Servers.query_by_id(addr, key) + self.parse_single_record(res) + + @call_on_thread(dialog.querying) + def add_by_ip(self, addr: str) -> None: + res = Servers.query_by_ip(addr) + self.parse_single_record(res) + + def parse_single_record(self, record: dict) -> None: if res is None: self.thread_man.set_cleanup_func(StoredFunc(self._cleanup_on_failure)) return diff --git a/dzgui/views/components/connect_panel.py b/dzgui/views/components/connect_panel.py index d51834c..31cf3c6 100644 --- a/dzgui/views/components/connect_panel.py +++ b/dzgui/views/components/connect_panel.py @@ -123,7 +123,9 @@ class FavPanel(Gtk.Frame): emitter = self.controller.get_emitter() emitter.connect("fav_server_changed", self._on_fav_server_changed) - self.server_name, self.server_ip = self.controller.get_config_man().get_favorite() #self.controller.get_favorite() + self.server_name, self.server_ip = ( + self.controller.get_config_man().get_favorite() + ) # self.controller.get_favorite() server_name = ( f"{self.server_name} ({self.server_ip})" if self.server_name is not None @@ -206,10 +208,13 @@ class AddPanel(Gtk.Frame): ConnectionManager(self.controller).connect_by_id_or_ip(text) def _submit_query(self) -> None: - text = self.entry.get_text() + addr = self.entry.get_text() # TODO: grabs ServerTab.SAVED ServerTreeView - saved = self.controller.get_servers().get_saved() - ServerModelManager(self.controller, saved)._add_by_id_or_ip(text) + tree = self.controller.get_servers().get_saved() + if addr.isdigit(): + ServerModelManager(self.controller, tree).add_by_id(addr) + else: + ServerModelManager(self.controller, tree).add_by_ip(addr) def _on_activate(self, entry: Gtk.Entry) -> None: if not self.add_server.is_sensitive():