diff --git a/dzgui/api/servers.py b/dzgui/api/servers.py index 918aa01..568ae75 100644 --- a/dzgui/api/servers.py +++ b/dzgui/api/servers.py @@ -464,11 +464,12 @@ def response_to_fq_ip(res: dict) -> str: 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) + return 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(":") diff --git a/dzgui/controllers/mc.py b/dzgui/controllers/mc.py index e34d050..3453abc 100644 --- a/dzgui/controllers/mc.py +++ b/dzgui/controllers/mc.py @@ -12,6 +12,7 @@ from warnings import deprecated import dzgui.api.pefile as PeFile import dzgui.util._json as JSON # noqa + from dzgui.api.mods import ( get_delimited_mods, get_local_mod_path, @@ -40,6 +41,7 @@ from dzgui.config.query import lookup from dzgui.config.userprefs import UserPrefs from dzgui.controllers.emitter import Emitter from dzgui.managers.config import ConfigManager +from dzgui.managers.connection import ConnectionManager from dzgui.managers.contextmenu import ContextMenuManager from dzgui.model.proxy_model import ProxyModelManager from dzgui.model.servers import ServerModelManager @@ -290,13 +292,13 @@ class Controller(GObject.GObject): def toggle_config(self, key: Preferences) -> None: self.config_man.toggle_config(key) - #config = self.prefs.paths.config - #try: + # config = self.prefs.paths.config + # try: # update.toggle_config(config, context) # # NOTE: 'use_miles' key is updated dynamically for statusbar unit # if context == Preferences.DIST: # self.prefs.use_miles = not self.prefs.use_miles - #except Exception as e: + # except Exception as e: # logger.critical(e) # trace = traceback.format_exc() # dialog = ExceptionDialog(self, trace) @@ -304,9 +306,9 @@ class Controller(GObject.GObject): def update_config(self, key: Preferences, value: str) -> None: self.config_man.update_config(key, value) - #try: + # try: # update.write_config(self.prefs.paths.config, key, value) - #except Exception as e: + # except Exception as e: # logger.critical(e) # trace = traceback.format_exc() # dialog = ExceptionDialog(self, trace) @@ -588,6 +590,7 @@ class Controller(GObject.GObject): return treeview.get_model() is not None def _on_check_toggled(self, emitter: Emitter, label: str, state: bool) -> None: + print('check toggled, refiltering') filter_man = self.get_filter_man() filter_man.set_filter(label, state) @@ -595,6 +598,7 @@ class Controller(GObject.GObject): ServerModelManager(self, self.get_active_treeview()).refilter(mode, label) def _on_map_selection_changed(self, emitter: Emitter, selection: str) -> None: + print("map sel changed, refiltering") smm = ServerModelManager(self, self.get_active_treeview()) smm.refilter(FilterMode.MAP, selection) @@ -615,3 +619,18 @@ class Controller(GObject.GObject): def get_config_man(self) -> ConfigManager: return self.config_man + + def add_server(self, addr: str) -> None: + saved_tree = self.get_servers().get_saved() + if addr.isdigit(): + ServerModelManager(self, saved).add_by_id(addr) + else: + ServerModelManager(self, saved).add_by_ip(addr) + + def connect_server(self, addr: str) -> None: + if addr.isdigit(): + config_man = self.get_config_man() + key = config_man.lookup(Preferences.BM) + ConnectionManager(self).connect_by_id(addr, key) + else: + ConnectionManager(self).connect_by_ip(addr) diff --git a/dzgui/managers/connection.py b/dzgui/managers/connection.py index aa82622..b66ee8e 100644 --- a/dzgui/managers/connection.py +++ b/dzgui/managers/connection.py @@ -21,12 +21,22 @@ class ConnectionManager: self.controller = controller self.thread_man = ThreadingManager(parent=controller) + @call_on_thread(dialog.querying) + def connect_by_id(self, addr: str, key: str) -> None: + res = Servers.query_by_id(addr, key) + if res is None: + self.thread_man.set_cleanup_func(StoredFunc(self._connection_failure)) + # TODO: add to history if successful + print("CONNECT") + print(res) + @call_on_thread(dialog.querying) 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 + print("CONNECT") print(res) def _connection_failure(self) -> None: diff --git a/dzgui/model/proxy_model.py b/dzgui/model/proxy_model.py index 21f3e32..82bbd26 100644 --- a/dzgui/model/proxy_model.py +++ b/dzgui/model/proxy_model.py @@ -67,6 +67,7 @@ class ProxyModelManager: # return store # def filter(self, mode: FilterMode, *args, **kwargs) -> None: + print("proxy model filtering now") """ Native Gtk.TreeView.refilter() method was not performant enough when running in the main loop with 40k+ records diff --git a/dzgui/views/components/connect_panel.py b/dzgui/views/components/connect_panel.py index 2530c27..391e938 100644 --- a/dzgui/views/components/connect_panel.py +++ b/dzgui/views/components/connect_panel.py @@ -1,6 +1,5 @@ from typing import TYPE_CHECKING -from dzgui.managers.connection import ConnectionManager from dzgui.model.servers import ServerModelManager from dzgui.util.strings import connect_panel, fav_panel, lan_panel from dzgui.views.components.buttons import ( @@ -125,7 +124,7 @@ class FavPanel(Gtk.Frame): 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 @@ -204,26 +203,21 @@ class AddPanel(Gtk.Frame): self.add(self.grid) def _on_connect_clicked(self, button: Gtk.Button) -> None: - text = self.entry.get_text() - ConnectionManager(self.controller).connect_by_id_or_ip(text) - - def _submit_query(self) -> None: addr = self.entry.get_text() - # TODO: grabs ServerTab.SAVED ServerTreeView - 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) + self.controller.connect_server(addr) + + def _add_server(self) -> None: + addr = self.entry.get_text() + self.controller.add_server(addr) def _on_activate(self, entry: Gtk.Entry) -> None: # NOTE: default action is to add a record, not connect if not self.add_server.is_sensitive(): return - self._submit_query() + self._add_server() def _on_add_clicked(self, button: Gtk.Button) -> None: - self._submit_query() + self._add_server() def _on_ip_validated(self, entry: Gtk.Entry, state: bool) -> None: self.conn_server.set_sensitive(state)