mirror of
https://github.com/aclist/dztui.git
synced 2026-08-27 18:27:07 +02:00
feat: use StoredFunc for query funcs
This commit is contained in:
parent
987a4f51ab
commit
45700e7a4a
@ -94,7 +94,7 @@ class AppNavigation:
|
||||
filters: "FilterPanel"
|
||||
|
||||
|
||||
class CleanupFunc:
|
||||
class StoredFunc:
|
||||
def __init__(self, func: Callable, *args, **kwargs) -> None:
|
||||
sig = inspect.signature(func)
|
||||
self.func = func
|
||||
@ -109,7 +109,7 @@ class Controller(GObject.GObject):
|
||||
self.dist_cache: dict[str, "Haversine", "ServerTab"] = {}
|
||||
self.mediator = AppNavigation()
|
||||
self.prefs: UserPrefs
|
||||
self.cleanup_func: CleanupFunc = None
|
||||
self.cleanup_func: StoredFunc = None
|
||||
|
||||
self.model_man = ModelManager()
|
||||
self.emitter = Emitter()
|
||||
@ -325,7 +325,7 @@ class Controller(GObject.GObject):
|
||||
mod.append(None)
|
||||
model.append(mod)
|
||||
|
||||
self.cleanup_func = CleanupFunc(self.load_mods_cleanup, model)
|
||||
self.cleanup_func = StoredFunc(self.load_mods_cleanup, model)
|
||||
|
||||
def toggle_config(self, context: Preferences) -> None:
|
||||
config = self.prefs.paths.config
|
||||
@ -399,13 +399,13 @@ class Controller(GObject.GObject):
|
||||
GLib.idle_add(lambda: self.wait_dialog.increment())
|
||||
res = future.result(timeout=3)
|
||||
if res.status != 200 or not res.parsed:
|
||||
self.cleanup_func = CleanupFunc(self.cleanup_on_failure)
|
||||
self.cleanup_func = StoredFunc(self.cleanup_on_failure)
|
||||
return
|
||||
j = res.json
|
||||
serv += j["response"]["servers"]
|
||||
except Exception as e:
|
||||
logger.critical(e)
|
||||
self.cleanup_func = CleanupFunc(self.cleanup_on_failure)
|
||||
self.cleanup_func = StoredFunc(self.cleanup_on_failure)
|
||||
|
||||
# NOTE: This step is allowed to fail, since this metadata is incidental
|
||||
res = Servers.query_api(key, APPID_DAYZ_EXP, "")
|
||||
@ -506,7 +506,7 @@ class Controller(GObject.GObject):
|
||||
except PeFile.AppNotInstalledError:
|
||||
pass
|
||||
|
||||
self.cleanup_func = CleanupFunc(self.delete_single_mod_cleanup, _iter)
|
||||
self.cleanup_func = StoredFunc(self.delete_single_mod_cleanup, _iter)
|
||||
|
||||
def get_mod_store(self) -> Gtk.ListStore:
|
||||
return self.mediator.modtreeview.get_model()
|
||||
@ -877,7 +877,7 @@ class Controller(GObject.GObject):
|
||||
self.new_maps = sorted(u_maps)
|
||||
|
||||
treeview.set_loaded(True)
|
||||
self.cleanup_func = CleanupFunc(self.cleanup_on_success)
|
||||
self.cleanup_func = StoredFunc(self.cleanup_on_success)
|
||||
|
||||
def highlight_stale_cleanup(self, stale_mods: list) -> None:
|
||||
"""Manipulates attached ListStore in the main event loop"""
|
||||
@ -893,9 +893,9 @@ class Controller(GObject.GObject):
|
||||
def highlight_stale(self) -> None:
|
||||
# TODO: set progress bar for number of mods
|
||||
stale = find_stale_mods(self.prefs.paths.config)
|
||||
self.cleanup_func = CleanupFunc(self.highlight_stale_cleanup, stale)
|
||||
self.cleanup_func = StoredFunc(self.highlight_stale_cleanup, stale)
|
||||
|
||||
def get_cleanup_func(self) -> CleanupFunc:
|
||||
def get_cleanup_func(self) -> StoredFunc:
|
||||
return self.cleanup_func
|
||||
|
||||
def _destroy_on_idle(self) -> None:
|
||||
@ -926,7 +926,7 @@ class Controller(GObject.GObject):
|
||||
if res is True:
|
||||
self.update_config(key, text)
|
||||
else:
|
||||
self.cleanup_func = CleanupFunc(
|
||||
self.cleanup_func = StoredFunc(
|
||||
lambda: self.emitter.emit("api_change_failed")
|
||||
)
|
||||
|
||||
@ -975,9 +975,8 @@ class Controller(GObject.GObject):
|
||||
return self.mediator.statusbar
|
||||
|
||||
@call_on_thread(strings.dialog.fetching)
|
||||
def run_query_func(self, func: Callable) -> None:
|
||||
# TODO: use CleanupFunc -> StoredFunc
|
||||
func()
|
||||
def run_query_func(self, func: StoredFunc) -> None:
|
||||
func.call()
|
||||
|
||||
@call_on_thread(strings.dialog.filtering)
|
||||
def filter_threaded(self, mode: FilterMode, label: str) -> None:
|
||||
|
||||
@ -95,11 +95,13 @@ class RefreshButton(IconTextButton):
|
||||
self.connect("clicked", self._on_refresh_clicked)
|
||||
|
||||
def _on_refresh_clicked(self, button: Self) -> None:
|
||||
# TODO: get page enum
|
||||
print(self.controller.mediator.notebook.get_page_by_enum())
|
||||
# if .MODS, .LOG, .OPTIONS, reload in place
|
||||
# TODO: get server tab enum
|
||||
# if LAN tab, reload existing entries in place
|
||||
self.set_sensitive(False)
|
||||
self.show_time(True)
|
||||
# FIXME: do this after threaded call fully finishes
|
||||
# FIXME: other signals cause refresh button to become sensitive
|
||||
# after model is loaded
|
||||
GLib.timeout_add_seconds(1, self.decrement)
|
||||
self.controller.refresh_tree()
|
||||
|
||||
|
||||
@ -2,6 +2,7 @@ import logging
|
||||
|
||||
from typing import Self, TYPE_CHECKING
|
||||
|
||||
from dzgui.controllers.mc import StoredFunc
|
||||
from dzgui.const.enum import ContextMenuGroup, ServerTab
|
||||
from dzgui.views.trees.tree_servers import ServerTreeView
|
||||
from dzgui.util.strings import server_labels
|
||||
@ -36,10 +37,10 @@ class ServerNotebook(Gtk.ScrolledWindow):
|
||||
)
|
||||
self.lan = ServerTreeView(controller, ServerTab.LAN, ContextMenuGroup.SCAN_LAN)
|
||||
|
||||
self.recent.set_query_func(self.controller.dump_test_2)
|
||||
self.recent.set_query_func(StoredFunc(self.controller.dump_test_2))
|
||||
# TODO: number of servers will not be known a priori until reading file during query phase
|
||||
self.lan.set_query_func(self.controller.dump_test_2)
|
||||
self.browser.set_query_func(self.controller.dump_api, jobs=11)
|
||||
self.lan.set_query_func(StoredFunc(self.controller.dump_test_2))
|
||||
self.browser.set_query_func(StoredFunc(self.controller.dump_api), jobs=11)
|
||||
|
||||
tabs = [
|
||||
(self.browser, server_labels.browser),
|
||||
|
||||
@ -27,7 +27,7 @@ from gi.repository import Gtk, GLib, Gdk, GObject, Pango # noqa
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from dzgui.controllers.mc import Controller
|
||||
from dzgui.controllers.mc import Controller, StoredFunc
|
||||
from dzgui.controllers.emitter import Emitter
|
||||
|
||||
QUEUE_CHECK_DELAY = 200
|
||||
@ -100,14 +100,14 @@ class ServerTreeView(ContextMixin, TreeView):
|
||||
else:
|
||||
w = width_map[column_title]
|
||||
column.set_fixed_width(w)
|
||||
#if column_title == "Ping":
|
||||
#self.fancy_col = column
|
||||
#self.fancy_rend = renderer
|
||||
#column.set_cell_data_func(renderer, self._get_ping)
|
||||
# if column_title == "Name":
|
||||
# column.set_fixed_width(800)
|
||||
# if column_title == "Map":
|
||||
# column.set_fixed_width(300)
|
||||
# if column_title == "Ping":
|
||||
# self.fancy_col = column
|
||||
# self.fancy_rend = renderer
|
||||
# column.set_cell_data_func(renderer, self._get_ping)
|
||||
# if column_title == "Name":
|
||||
# column.set_fixed_width(800)
|
||||
# if column_title == "Map":
|
||||
# column.set_fixed_width(300)
|
||||
|
||||
# TODO: standardize widths based on column title and longest content
|
||||
# if column_title == "Name":
|
||||
@ -129,15 +129,15 @@ class ServerTreeView(ContextMixin, TreeView):
|
||||
self.connect("unmap", self._on_unmap)
|
||||
|
||||
def _get_ping(
|
||||
self,
|
||||
column: Gtk.TreeViewColumn,
|
||||
cell: Gtk.CellRendererText,
|
||||
model: Gtk.TreeModel,
|
||||
it: Gtk.TreeIter,
|
||||
data: Any,
|
||||
self,
|
||||
column: Gtk.TreeViewColumn,
|
||||
cell: Gtk.CellRendererText,
|
||||
model: Gtk.TreeModel,
|
||||
it: Gtk.TreeIter,
|
||||
data: Any,
|
||||
):
|
||||
def ping_server(model, _iter, ip: str, qport: int, ping: int):
|
||||
#res = Ping(0, model[_iter])
|
||||
# res = Ping(0, model[_iter])
|
||||
res = Ping(0, ip, qport, ping)
|
||||
ping = res.ping
|
||||
print(res)
|
||||
@ -160,13 +160,7 @@ class ServerTreeView(ContextMixin, TreeView):
|
||||
thread = threading.Thread(
|
||||
daemon=True,
|
||||
target=ping_server,
|
||||
args=(
|
||||
model,
|
||||
it,
|
||||
ip,
|
||||
qport,
|
||||
ping
|
||||
),
|
||||
args=(model, it, ip, qport, ping),
|
||||
)
|
||||
thread.start()
|
||||
|
||||
@ -223,11 +217,12 @@ class ServerTreeView(ContextMixin, TreeView):
|
||||
if self.get_enum() is ServerTab.LAN:
|
||||
self.emitter.emit("lan_tab_toggled", False)
|
||||
|
||||
def set_query_func(self, func: Callable, jobs: int = 1) -> None:
|
||||
def set_query_func(self, func: "StoredFunc", jobs: int = 1) -> None:
|
||||
self.query_func = func
|
||||
self.query_func_jobs = jobs
|
||||
|
||||
def get_query_func(self) -> Callable | None:
|
||||
# TODO: possibly split this up
|
||||
def get_query_func(self) -> tuple["StoredFunc", int]:
|
||||
return self.query_func, self.query_func_jobs
|
||||
|
||||
def _on_col_width_changed(
|
||||
|
||||
Loading…
Reference in New Issue
Block a user