mirror of
https://github.com/aclist/dztui.git
synced 2026-11-01 15:42:51 +01:00
feat: skip_cache arg on FilterMan.filter()
This commit is contained in:
1 parent
a323c4fc75
commit
e8fca22419
4 files changed
+36
-33
No files matched your search
@@ -12,6 +12,7 @@ from dzgui.init.prefix import is_prefix_writeable
|
|||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
def get_latest_release() -> str | None:
|
def get_latest_release() -> str | None:
|
||||||
tag = None
|
tag = None
|
||||||
# TODO: check order; github often has gateway errors
|
# TODO: check order; github often has gateway errors
|
||||||
@@ -26,18 +27,20 @@ def get_latest_release() -> str | None:
|
|||||||
continue
|
continue
|
||||||
return tag
|
return tag
|
||||||
|
|
||||||
|
|
||||||
def allow_updates(allow: bool) -> bool:
|
def allow_updates(allow: bool) -> bool:
|
||||||
if allow is False:
|
if allow is False:
|
||||||
return False
|
return False
|
||||||
if allow is True:
|
if allow is True:
|
||||||
return is_prefix_writeable()
|
return is_prefix_writeable()
|
||||||
|
|
||||||
|
|
||||||
def check_updates(version: str) -> None:
|
def check_updates(version: str) -> None:
|
||||||
latest = get_latest_release()
|
|
||||||
prefix = sys.prefix
|
|
||||||
if latest is None:
|
|
||||||
return
|
|
||||||
try:
|
try:
|
||||||
|
latest = get_latest_release()
|
||||||
|
prefix = sys.prefix
|
||||||
|
if latest is None:
|
||||||
|
return
|
||||||
if Version(version) >= Version(latest):
|
if Version(version) >= Version(latest):
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -51,5 +54,5 @@ def check_updates(version: str) -> None:
|
|||||||
# TODO: pop a dialog
|
# TODO: pop a dialog
|
||||||
pass
|
pass
|
||||||
sys.exit(proc)
|
sys.exit(proc)
|
||||||
except InvalidVersion:
|
except Exception:
|
||||||
return
|
return
|
||||||
@@ -13,7 +13,7 @@ class FilterManager:
|
|||||||
|
|
||||||
self.map_store = ModelFactory().make_map_store()
|
self.map_store = ModelFactory().make_map_store()
|
||||||
|
|
||||||
# TODO: namespace under strings.filters
|
# TODO: namespace under own file: strings.filters
|
||||||
self.default_filters = {
|
self.default_filters = {
|
||||||
strings.filter_1pp: True,
|
strings.filter_1pp: True,
|
||||||
strings.filter_day: True,
|
strings.filter_day: True,
|
||||||
@@ -36,9 +36,6 @@ class FilterManager:
|
|||||||
self.filters: list
|
self.filters: list
|
||||||
self.enabled_filters = dict(self.default_filters)
|
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:
|
def set_prior_map(self, name: str) -> None:
|
||||||
self.prior_map = name
|
self.prior_map = name
|
||||||
|
|
||||||
@@ -86,11 +83,14 @@ class FilterManager:
|
|||||||
return
|
return
|
||||||
|
|
||||||
self.reinit_map_store()
|
self.reinit_map_store()
|
||||||
|
maps.sort()
|
||||||
for m in maps:
|
for m in maps:
|
||||||
|
if m == "All maps":
|
||||||
|
continue
|
||||||
self.append_map([m])
|
self.append_map([m])
|
||||||
|
|
||||||
def get_unique_maps(self) -> list[str]:
|
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:
|
def get_all_filters(self) -> tuple:
|
||||||
map_name = self.get_active_map_name()
|
map_name = self.get_active_map_name()
|
||||||
|
|||||||
@@ -44,21 +44,25 @@ class ProxyModelManager:
|
|||||||
def get_proxy_model(self) -> "FastInsertListStore":
|
def get_proxy_model(self) -> "FastInsertListStore":
|
||||||
return self.proxy_model
|
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
|
# 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
|
Native Gtk.TreeView.refilter() method was not performant enough
|
||||||
when running in the main loop with 40k+ records
|
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
|
# instead of just a serial list of strings
|
||||||
filters = self.filter_man.get_all_filters()
|
filters = self.filter_man.get_all_filters()
|
||||||
|
|
||||||
if filters in self.filter_cache:
|
if skip_cache is False:
|
||||||
cache = self.filter_cache[filters]
|
if filters in self.filter_cache:
|
||||||
self.set_proxy_model(cache[0])
|
print("already in cache, not updating proxy model")
|
||||||
self.set_filtered(cache[1])
|
cache = self.filter_cache[filters]
|
||||||
return
|
self.set_proxy_model(cache[0])
|
||||||
|
self.set_filtered(cache[1])
|
||||||
|
return
|
||||||
|
|
||||||
match mode:
|
match mode:
|
||||||
case FilterMode.INITIAL:
|
case FilterMode.INITIAL:
|
||||||
|
|||||||
+12
-16
@@ -235,7 +235,7 @@ class ServerModelManager:
|
|||||||
config_man = self.controller.get_config_man()
|
config_man = self.controller.get_config_man()
|
||||||
config_man.add_saved_server(fqip)
|
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:
|
if raw_model is None:
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -245,13 +245,16 @@ class ServerModelManager:
|
|||||||
# TODO: if all filters are already applied, strange behavior may occur
|
# TODO: if all filters are already applied, strange behavior may occur
|
||||||
# -> need to insert and reupdate tree 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
|
# 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()
|
filter_man = self.tv.get_filter_man()
|
||||||
old_maps = filter_man.get_unique_maps()
|
old_maps = filter_man.get_unique_maps()
|
||||||
cur_map = record[1]
|
cur_map = record[1]
|
||||||
if cur_map not in old_maps:
|
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))
|
self.thread_man.set_cleanup_func(StoredFunc(self._cleanup_single_ip))
|
||||||
|
|
||||||
def _dump_history(self) -> None:
|
def _dump_history(self) -> None:
|
||||||
@@ -293,12 +296,14 @@ class ServerModelManager:
|
|||||||
proxy = self._get_proxy_man().get_proxy_model()
|
proxy = self._get_proxy_man().get_proxy_model()
|
||||||
self.tv.set_model(proxy)
|
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)
|
self.emitter.emit("servers_loaded", self.enum)
|
||||||
|
|
||||||
# TODO: consolidate methods and handle multi/single map addition
|
# TODO: consolidate methods and handle multi/single map addition
|
||||||
filter_man = self.tv.get_filter_man()
|
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.emitter.emit("servers_loaded_init")
|
||||||
self.first_iteration = False
|
self.first_iteration = False
|
||||||
|
|
||||||
@@ -311,8 +316,6 @@ class ServerModelManager:
|
|||||||
def _cleanup_on_success(self) -> None:
|
def _cleanup_on_success(self) -> None:
|
||||||
proxy = self._get_proxy_man().get_proxy_model()
|
proxy = self._get_proxy_man().get_proxy_model()
|
||||||
self.tv.set_model(proxy)
|
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
|
# 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
|
# inserting a row serializes file on disk, updates control model for that tab, and updates model
|
||||||
@@ -348,16 +351,11 @@ class ServerModelManager:
|
|||||||
dialog.run()
|
dialog.run()
|
||||||
|
|
||||||
def _push_data(self, data: list) -> None:
|
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
|
# TODO: consolidate these methods
|
||||||
|
manager = self._get_proxy_man()
|
||||||
manager.wipe_cache()
|
manager.wipe_cache()
|
||||||
manager.set_control(data)
|
manager.set_control(data)
|
||||||
manager.filter(FilterMode.INITIAL)
|
manager.filter(FilterMode.INITIAL)
|
||||||
self.to_insert = manager.get_proxy_model()
|
|
||||||
|
|
||||||
# TODO: abstract for all methods
|
# TODO: abstract for all methods
|
||||||
self._sort_unique_maps(data)
|
self._sort_unique_maps(data)
|
||||||
@@ -369,7 +367,7 @@ class ServerModelManager:
|
|||||||
self._set_new_maps(sorted(u_maps))
|
self._set_new_maps(sorted(u_maps))
|
||||||
|
|
||||||
def _set_new_maps(self, maps: list[str]) -> None:
|
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]:
|
def _get_new_maps(self) -> list[str]:
|
||||||
return self.new_maps
|
return self.new_maps
|
||||||
@@ -383,6 +381,4 @@ class ServerModelManager:
|
|||||||
self.first_iteration = False
|
self.first_iteration = False
|
||||||
proxy_man = self._get_proxy_man()
|
proxy_man = self._get_proxy_man()
|
||||||
proxy_man.filter(mode)
|
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))
|
self.thread_man.set_cleanup_func(StoredFunc(self._cleanup_on_success))
|
||||||
Reference in new issue
Block a user