mirror of
https://github.com/aclist/dztui.git
synced 2026-08-26 09:47:36 +02:00
feat: threading decorator
This commit is contained in:
parent
e8e78ee6a1
commit
5d6a7c9775
@ -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()
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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()
|
||||
|
||||
|
||||
@ -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),
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user