diff --git a/dzgui/controllers/mc.py b/dzgui/controllers/mc.py index 4281931..9191cdb 100644 --- a/dzgui/controllers/mc.py +++ b/dzgui/controllers/mc.py @@ -95,6 +95,15 @@ class Controller(GObject.GObject): # NOTE: suppress requests until entire UI is loaded self.loaded = False + def call_on_thread(func: Callable) -> Callable: + def wrapper(*args, **kwargs): + self = args[0] + self.wait_dialog = WaitDialog(self, strings.dialog.fetching) + self.wait_dialog.show_all() + thread = threading.Thread(target=func, args=args) + thread.start() + return wrapper + def register_widget(self, attr: str, widget: Gtk.Widget) -> None: try: setattr(self.mediator, attr, widget) @@ -613,14 +622,15 @@ class Controller(GObject.GObject): treeview.set_loaded(True) GLib.idle_add(cleanup) + @call_on_thread def highlight_stale(self) -> None: - self.call_on_thread(self.colorize_mods) + self.colorize_mods() - def call_on_thread(self, func: Callable, *args) -> None: - self.wait_dialog = WaitDialog(self, strings.dialog.fetching) - self.wait_dialog.show_all() - thread = threading.Thread(target=func, args=args) - thread.start() + # def call_on_thread(self, func: Callable, *args) -> None: + # self.wait_dialog = WaitDialog(self, strings.dialog.fetching) + # self.wait_dialog.show_all() + # thread = threading.Thread(target=func, args=args) + # thread.start() def get_callback(self) -> Callable | None: return self.callback["func"] @@ -670,8 +680,9 @@ class Controller(GObject.GObject): dialog = ExceptionDialog(self, strings.api_error) dialog.run() + @call_on_thread def update_api_key(self, text: str, key: Preferences) -> None: - self.call_on_thread(self.test_api_response, text, key) + self.test_api_response(text, key) def set_resolution(self, window: "OuterWindow") -> None: if self.prefs.is_game_mode: @@ -715,6 +726,10 @@ class Controller(GObject.GObject): def get_statusbar(self) -> None: return self.mediator.statusbar + @call_on_thread + def thread_data_func(self, func: Callable) -> None: + func() + def populate_model(self) -> None: treeview = self.get_active_treeview() if treeview.get_loaded() is True: @@ -729,7 +744,8 @@ class Controller(GObject.GObject): manager = treeview.get_filter_man() manager.clear_model() self.set_callback(None, None) - self.call_on_thread(func) + self.thread_data_func(func) + #self.call_on_thread(func) def focus_button_box(self) -> None: self.mediator.right_panel.focus_button_box() diff --git a/dzgui/model/filtered_model.py b/dzgui/model/filtered_model.py index c807b75..10c4e88 100644 --- a/dzgui/model/filtered_model.py +++ b/dzgui/model/filtered_model.py @@ -115,7 +115,7 @@ class FilteredModelManager: row[9] = self.ping_cache[row[7]] if len(rows) > 0: - clone = self.new_model() + clone = self.new_model_from_class(ServerColumns) rows = self.sort_rows(rows) for row in rows: clone.append(row) @@ -243,7 +243,7 @@ class FilteredModelManager: if row[7] == addr and row[8] == qport: self.control_model.remove(row) - self.wipe_cache() + # self.wipe_cache() filters = self.controller.get_filters() refiltered = self.filter_toggle_on(filters) self.set_filtered(refiltered) @@ -276,10 +276,10 @@ class FilteredModelManager: def get_success(self) -> bool: return self.success - def wipe_cache(self, full=False) -> None: - self.success = True - self.filtered = None - self.filter_cache = {} - self.ping_cache = {} - if full: - self.control_model = None + # def wipe_cache(self, full=False) -> None: + # self.success = True + # self.filtered = None + # self.filter_cache = {} + # self.ping_cache = {} + # if full: + # self.control_model = None diff --git a/dzgui/views/components/mod_panel.py b/dzgui/views/components/mod_panel.py index 109969a..e961759 100644 --- a/dzgui/views/components/mod_panel.py +++ b/dzgui/views/components/mod_panel.py @@ -6,12 +6,14 @@ from dzgui.util.strings import mod_panel from dzgui.views.components.labels import BoldLabel import gi + gi.require_version("Gtk", "3.0") -from gi.repository import Gtk # noqa E402 +from gi.repository import Gtk # noqa E402 if TYPE_CHECKING: from dzgui.controllers.mc import Controller + class EnumeratedModButton(Gtk.Button): def __init__(self, enum: ModButton) -> None: super().__init__(margin_start=10, margin_end=10) @@ -61,7 +63,7 @@ class ModSelectionPanel(Gtk.Box): self.swap_sensitive(True) def swap_sensitive(self, state: bool) -> None: - for child in self.extra_panel.get_children(): + for child in self.stale_panel.get_children(): child.set_sensitive(state) for child in self.main_panel.get_children(): if child.enum == ModButton.HIGHLIGHT_STALE: @@ -84,4 +86,3 @@ class ModSelectionPanel(Gtk.Box): self.swap_sensitive(False) case ModButton.SELECT_STALE: self.controller.select_colorized() - diff --git a/dzgui/views/pages/servers.py b/dzgui/views/pages/servers.py index 55589e9..b55b2c5 100644 --- a/dzgui/views/pages/servers.py +++ b/dzgui/views/pages/servers.py @@ -35,7 +35,7 @@ class ServerNotebook(Gtk.ScrolledWindow): self.lan = ServerTreeView(controller, ServerTab.LAN, ContextMenuGroup.SCAN_LAN) self.lan.set_query_func(self.controller.dump_test_2) - self.browser.set_query_func(self.controller.dump_api) + self.browser.set_query_func(self.controller.dump_test_2) tabs = [ (self.browser, server_labels.browser), diff --git a/dzgui/views/trees/tree_servers.py b/dzgui/views/trees/tree_servers.py index a8ee840..b17be9f 100644 --- a/dzgui/views/trees/tree_servers.py +++ b/dzgui/views/trees/tree_servers.py @@ -378,7 +378,8 @@ class ServerTreeView(TreeView): ) -> Any: """ Lazy load contents from model manager into visible CellRenderers on demand - N.B., all row data will be stringified + N.B., all row data types will be stringified and must be fetched + from separate model manager, not internally from TreeView cf. Gtk.TreeViewColumn.set_cell_data_func() """ path = model.get_path(it) @@ -391,5 +392,3 @@ class ServerTreeView(TreeView): real_model = self.filter_man.get_real_model() value = real_model[row_index][col_index] cell.set_property("text", str(value)) - else: - return