diff --git a/dzgui/controllers/mc.py b/dzgui/controllers/mc.py index 8b9e7e6..daddfc5 100644 --- a/dzgui/controllers/mc.py +++ b/dzgui/controllers/mc.py @@ -152,10 +152,7 @@ class Controller(GObject.GObject): self.prefs = prefs def query_config(self, key: Preferences) -> str | bool | list: - # return self.config_man.lookup(key) return self.config_man.lookup(key) - # config = self.prefs.paths.config - # return lookup(config, key) def is_auto_install(self) -> bool: return self.query_config(Preferences.INSTALL) @@ -288,32 +285,9 @@ class Controller(GObject.GObject): def toggle_config(self, key: Preferences) -> None: self.config_man.toggle_config(key) - # 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: - # logger.critical(e) - # trace = traceback.format_exc() - # dialog = ExceptionDialog(self, trace) - # dialog.run() def update_config(self, key: Preferences, value: str) -> None: self.config_man.update_config(key, value) - # try: - # update.write_config(self.prefs.paths.config, key, value) - # except Exception as e: - # logger.critical(e) - # trace = traceback.format_exc() - # dialog = ExceptionDialog(self, trace) - # dialog.run() - # # TODO: suppress signals - # # then reenable (or it spawns dialog twice) - # # TODO: do this on demand for certain changes - # self.mediator.grid.notebook.settings.populate_settings() - # return def open_keybindings(self) -> None: notebook = self.mediator.grid.notebook diff --git a/dzgui/managers/contextmenu.py b/dzgui/managers/contextmenu.py index d79c25a..727d28a 100644 --- a/dzgui/managers/contextmenu.py +++ b/dzgui/managers/contextmenu.py @@ -4,7 +4,6 @@ from typing import TYPE_CHECKING from dzgui.const.enum import ContextMenu, Preferences from dzgui.managers.thread_man import ThreadingManager -from dzgui.model.servers import ServerModelManager from dzgui.util import strings from dzgui.util.clip import copy_clipboard from dzgui.util.open_links import open_workshop_page @@ -34,8 +33,9 @@ class ContextMenuManager: def process(self, action: ContextMenu) -> None: match action: - # NON THREADED + # UNTHREADED case ContextMenu.ADD_NOTE: + print("DEBUG: unimplemented") # spawn edit dialog and update cache, notes file pass case ContextMenu.COPY_LOG_CLIPBOARD: @@ -66,19 +66,24 @@ class ContextMenuManager: self.controller.connect_by_record(record) case ContextMenu.REFRESH_PLAYERS: + print("DEBUG: unimplemented") # get record # call a2s on thread pass case ContextMenu.REMOVE_HISTORY: + print("DEBUG: unimplemented") # update history model, update tab label, pop off of queue, write new list into file # see dq.py pass case ContextMenu.REMOVE_SERVER: + print("DEBUG: unimplemented") # reverse of ADD_SERVER pass case ContextMenu.SHOW_DETAILS: + print("DEBUG: unimplemented") pass case ContextMenu.SHOW_MODS: + print("DEBUG: unimplemented") pass def copy_server_ip(self) -> None: diff --git a/dzgui/model/proxy_model.py b/dzgui/model/proxy_model.py index bf3394f..a50708c 100644 --- a/dzgui/model/proxy_model.py +++ b/dzgui/model/proxy_model.py @@ -44,7 +44,7 @@ class ProxyModelManager: def get_proxy_model(self) -> "FastInsertListStore": return self.proxy_model - def filter(self, mode: FilterMode, *args, **kwargs) -> None: + def filter(self, mode: FilterMode) -> None: # TODO: proxy model can fetch args directly from filter man, no need to process extra input """ Native Gtk.TreeView.refilter() method was not performant enough diff --git a/dzgui/model/servers.py b/dzgui/model/servers.py index 42efe8a..d87d664 100644 --- a/dzgui/model/servers.py +++ b/dzgui/model/servers.py @@ -133,7 +133,7 @@ class ServerModelManager: try: res = future.result(timeout=LAN_TIMEOUT) if res is not None and early_abort is True: - # NOTE: first non-empty hit, flag pending threads to close + # NOTE: on first non-empty hit, flag pending threads to close event.set() servers.append(res) self.thread_man.set_cleanup_func( @@ -215,6 +215,7 @@ class ServerModelManager: return records = Servers.parse_json([response]) + record = records[0] proxy_man = self._get_proxy_man() raw_model = proxy_man.get_control() @@ -223,21 +224,21 @@ class ServerModelManager: config_man = self.controller.get_config_man() config_man.add_saved_server(fqip) - # NOTE: if tab was not instantiated yet + # NOTE: if tab contents were not loaded yet if raw_model is None: return # NOTE: expected to only contain one item - raw_model.append(records[0]) + raw_model.append(record) # TODO: if all filters are already applied, strange behavior may occur - # -> need to insert and reupdate tre per current filters + # -> need to insert and reupdate tree per current filters # for example, non-empty will only show up in empty because it is not cached proxy_man.filter(FilterMode.INITIAL) filter_man = self.tv.get_filter_man() old_maps = filter_man.get_unique_maps() - cur_map = records[0][1] + cur_map = record[1] if cur_map not in old_maps: self._set_new_maps([cur_map]) self.thread_man.set_cleanup_func(StoredFunc(self._cleanup_single_ip)) diff --git a/dzgui/util/strings.py b/dzgui/util/strings.py index 77959c2..4ef3159 100644 --- a/dzgui/util/strings.py +++ b/dzgui/util/strings.py @@ -544,7 +544,7 @@ connect_panel = ConnectPanel( connect="Connect", add="Add", add_con="Add/connect", - placeholder="Enter IP or Battlemetrics ID", + placeholder="Enter IP (IP:Query port) or Battlemetrics ID (numerical id)", entry_tooltip=( "- IP: format as IP:Query port\ne.g. 192.168.1.1:27016\n" "- Battlemetrics: numeric server ID\ne.g. 123456" diff --git a/dzgui/views/components/filter_panel.py b/dzgui/views/components/filter_panel.py index 6508c0b..1c01885 100644 --- a/dzgui/views/components/filter_panel.py +++ b/dzgui/views/components/filter_panel.py @@ -212,6 +212,7 @@ class FilterPanel(Gtk.Box): # TODO: use same sort of signal to reinitialize keyword and checks def _on_maps_loaded(self, emitter: "Emitter", store: Gtk.ListStore) -> None: + self.is_first_run = True self.maps_combo.set_model(store) tv = self.controller.get_active_treeview() ind, name = tv.filter_man.get_active_map() @@ -312,4 +313,9 @@ class FilterPanel(Gtk.Box): filter_man.set_prior_map(name) filter_man.set_active_map(ind, name) + # TODO: 2026-03-29 + # don't signal controller to refilter if we are switching pages + if self.is_first_run: + self.is_first_run = False + return self.emitter.emit("map_selection_changed", name) diff --git a/dzgui/views/trees/tree_servers.py b/dzgui/views/trees/tree_servers.py index bc6568c..e9ba1f8 100644 --- a/dzgui/views/trees/tree_servers.py +++ b/dzgui/views/trees/tree_servers.py @@ -166,6 +166,7 @@ class ServerTreeView(ContextMixin, TreeView): store = self.filter_man.get_map_store() # FIXME: if model is none, wipe maps + # distinguish this signal from changing map combo in-situ self.emitter.emit("load_maps", store) self.handler_id = self.emitter.connect("statusbar_loaded", self.start_distcalc) self.start_queue_checker()