fix: do not refilter on page map

This commit is contained in:
aclist 2026-03-29 19:50:09 +09:00
parent 5391cdde1e
commit ae291eff41
7 changed files with 22 additions and 35 deletions

View File

@ -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

View File

@ -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:

View File

@ -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

View File

@ -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))

View File

@ -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"

View File

@ -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)

View File

@ -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()