feat: skip_cache arg on FilterMan.filter()

This commit is contained in:
aclist 2026-04-17 22:27:59 +09:00
parent a323c4fc75
commit e8fca22419
4 changed files with 36 additions and 33 deletions

View File

@ -12,6 +12,7 @@ from dzgui.init.prefix import is_prefix_writeable
logger = logging.getLogger(__name__)
def get_latest_release() -> str | None:
tag = None
# TODO: check order; github often has gateway errors
@ -26,18 +27,20 @@ def get_latest_release() -> str | None:
continue
return tag
def allow_updates(allow: bool) -> bool:
if allow is False:
return False
if allow is True:
return is_prefix_writeable()
def check_updates(version: str) -> None:
latest = get_latest_release()
prefix = sys.prefix
if latest is None:
return
try:
latest = get_latest_release()
prefix = sys.prefix
if latest is None:
return
if Version(version) >= Version(latest):
return
@ -51,5 +54,5 @@ def check_updates(version: str) -> None:
# TODO: pop a dialog
pass
sys.exit(proc)
except InvalidVersion:
except Exception:
return

View File

@ -13,7 +13,7 @@ class FilterManager:
self.map_store = ModelFactory().make_map_store()
# TODO: namespace under strings.filters
# TODO: namespace under own file: strings.filters
self.default_filters = {
strings.filter_1pp: True,
strings.filter_day: True,
@ -36,9 +36,6 @@ class FilterManager:
self.filters: list
self.enabled_filters = dict(self.default_filters)
# def reinit_filters(self) -> None:
# self.enabled_filters = dict(self.default_filters)
def set_prior_map(self, name: str) -> None:
self.prior_map = name
@ -86,11 +83,14 @@ class FilterManager:
return
self.reinit_map_store()
maps.sort()
for m in maps:
if m == "All maps":
continue
self.append_map([m])
def get_unique_maps(self) -> list[str]:
return [row[0] for row in self.map_store]
return [row[0] for row in self.map_store if row != "All maps"]
def get_all_filters(self) -> tuple:
map_name = self.get_active_map_name()

View File

@ -44,21 +44,25 @@ class ProxyModelManager:
def get_proxy_model(self) -> "FastInsertListStore":
return self.proxy_model
def filter(self, mode: FilterMode) -> None:
def filter(self, mode: FilterMode, skip_cache: bool = False) -> 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
when running in the main loop with 40k+ records
skip_cache: used when updating a record on Saved Servers/History and forcing a refilter
"""
# TODO: return a dataclass object with clearly enumerated map, keyword, and filter values
# TODO: filter cache: return a dataclass object with clearly enumerated map, keyword, and filter values
# instead of just a serial list of strings
filters = self.filter_man.get_all_filters()
if filters in self.filter_cache:
cache = self.filter_cache[filters]
self.set_proxy_model(cache[0])
self.set_filtered(cache[1])
return
if skip_cache is False:
if filters in self.filter_cache:
print("already in cache, not updating proxy model")
cache = self.filter_cache[filters]
self.set_proxy_model(cache[0])
self.set_filtered(cache[1])
return
match mode:
case FilterMode.INITIAL:

View File

@ -235,7 +235,7 @@ class ServerModelManager:
config_man = self.controller.get_config_man()
config_man.add_saved_server(fqip)
# NOTE: if tab contents were not loaded yet
# NOTE: abort early if Saved Servers tab was not loaded yet
if raw_model is None:
return
@ -245,13 +245,16 @@ class ServerModelManager:
# TODO: if all filters are already applied, strange behavior may occur
# -> 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)
# FIXME: new results are not being shown when tabbing over to Saved Servers
proxy_man.filter(FilterMode.INITIAL, skip_cache=True)
filter_man = self.tv.get_filter_man()
old_maps = filter_man.get_unique_maps()
cur_map = record[1]
if cur_map not in old_maps:
self._set_new_maps([cur_map])
old_maps.append(cur_map)
self._set_new_maps(old_maps)
self.thread_man.set_cleanup_func(StoredFunc(self._cleanup_single_ip))
def _dump_history(self) -> None:
@ -293,12 +296,14 @@ class ServerModelManager:
proxy = self._get_proxy_man().get_proxy_model()
self.tv.set_model(proxy)
# TODO: if current tab != self.saved, add label
# TODO: animate saved servers tab if we are on other tab
self.emitter.emit("servers_loaded", self.enum)
# TODO: consolidate methods and handle multi/single map addition
filter_man = self.tv.get_filter_man()
filter_man.append_map(self._get_new_maps())
maps = self._get_new_maps()
filter_man.set_unique_maps(maps)
self.emitter.emit("servers_loaded_init")
self.first_iteration = False
@ -311,8 +316,6 @@ class ServerModelManager:
def _cleanup_on_success(self) -> None:
proxy = self._get_proxy_man().get_proxy_model()
self.tv.set_model(proxy)
# self.tv.set_model(None)
# self.tv.set_model(self.to_insert)
# TODO: make sure control model len is N + 1
# inserting a row serializes file on disk, updates control model for that tab, and updates model
@ -348,16 +351,11 @@ class ServerModelManager:
dialog.run()
def _push_data(self, data: list) -> None:
# if data is None:
# self.to_insert = None
# else:
manager = self._get_proxy_man()
# TODO: consolidate these methods
manager = self._get_proxy_man()
manager.wipe_cache()
manager.set_control(data)
manager.filter(FilterMode.INITIAL)
self.to_insert = manager.get_proxy_model()
# TODO: abstract for all methods
self._sort_unique_maps(data)
@ -369,7 +367,7 @@ class ServerModelManager:
self._set_new_maps(sorted(u_maps))
def _set_new_maps(self, maps: list[str]) -> None:
self.new_maps = maps
self.new_maps: list[str] = maps
def _get_new_maps(self) -> list[str]:
return self.new_maps
@ -383,6 +381,4 @@ class ServerModelManager:
self.first_iteration = False
proxy_man = self._get_proxy_man()
proxy_man.filter(mode)
# proxy_man.filter(mode, label)
self.to_insert = proxy_man.get_proxy_model()
self.thread_man.set_cleanup_func(StoredFunc(self._cleanup_on_success))