feat: threading WIP

This commit is contained in:
aclist 2026-01-13 02:56:56 +09:00
parent fdb6b342f7
commit 00ca59698c
6 changed files with 66 additions and 32 deletions

View File

@ -91,8 +91,9 @@ class Controller:
self.crumbs_cache = ""
self.mediator = AppNavigation()
self.prefs: UserPrefs
self.model_manager = ModelManager()
# TODO: poc
self.loaded = False
def register_widget(self, attr: str, widget: Gtk.Widget) -> None:
try:
@ -483,6 +484,8 @@ class Controller:
# NOTE: manipulates mod store
case ContextMenu.DELETE_MOD:
self.delete_single_mod(path)
# TODO: hook treeview changed signal
# Gtk.TreeModel, row-inserted/row-deleted
self.update_mod_statusbar()
remove_stale_signatures(
self.prefs.paths.config,
@ -545,11 +548,31 @@ class Controller:
def unselect_all_mods(self) -> None:
self.mediator.modtreeview.get_selection().unselect_all()
def dump_test(self) -> None:
import time
time.sleep(1)
# TODO: use model managers, etc.
self.data = (["BAR", "a", "a", "a", 1, 1, 1, "185.207.214.16:2302", 0, 0, "a", False])
# TODO: refer to prior implementation--should need to load data into model while in thread
self.get_func_data()
self.destroy_on_idle()
def get_func_data(self) -> tuple:
# TODO: use model manager
treeview = self.get_active_treeview()
model = treeview.get_model()
data = self.data
model.append(data)
treeview.set_loaded(True)
self.update_server_status()
treeview.grab_focus()
def highlight_stale(self) -> None:
self.call_on_thread(self.colorize_mods)
def call_on_thread(self, func: Callable, *args) -> None:
self.wait_dialog = GenericDialog(self, strings.dialog.fetching, Popup.WAIT)
from dzgui.views.dialogs.generic import WaitDialog
self.wait_dialog = WaitDialog(self, strings.dialog.fetching)
self.wait_dialog.show_all()
thread = threading.Thread(target=func, args=args)
thread.start()
@ -644,21 +667,21 @@ class Controller:
self.populate_model()
def populate_model(self) -> None:
print("POPULATING MODEL")
# TODO: always use same server model, store in servertreeview class
treeview = self.get_active_treeview()
if treeview.get_loaded() is False:
new_model = self.model_manager.new_model()
# NOTE: set_query_func()
func = treeview.get_query_func()
print(func)
if func is not None:
model = treeview.get_model()
print(model)
# TODO: this may lag?
model.clear()
data = func()
# TODO: threading
model.append(data)
treeview.set_loaded(True)
self.update_server_status()
treeview.grab_focus()
self.set_callback(None, None)#self.get_func_data)
self.call_on_thread(func)
def focus_button_box(self) -> None:
self.mediator.right_panel.focus_button_box()

View File

@ -549,6 +549,7 @@ class LanPanel:
scan_button: str
placeholder: str
entry_tooltip: str
scan_tooltip: str
lan_panel = LanPanel(
heading="LAN query port",
@ -556,11 +557,10 @@ lan_panel = LanPanel(
custom_button="Custom port",
scan_button="Scan",
placeholder="Enter the query port (1-65535)",
entry_tooltip="Specify the port to search for DayZ servers on the local network"
entry_tooltip="Specify the port to search for DayZ servers on the local network",
scan_tooltip="Scan for servers"
)
distance_suffix = "Distance: calculating..."
dialog_error = "ERROR"

View File

@ -216,10 +216,12 @@ class OuterWindow(Gtk.Window):
self.show_all()
css.load_css()
MainController.open_page(NotebookPage.SERVERS)
# TODO: first run
MainController.open_page(NotebookPage.SERVERS)
MainController.mediator.grid.conpan.lan.set_visible(False)
self.grid.right_panel.sel_panel.hide()
# TODO: POC, trigger page change here
MainController.loaded = True
def _on_delete_event(
self, window: "OuterWindow", event: Gdk.EventKey

View File

@ -12,10 +12,11 @@ gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, GLib # noqa E402
if TYPE_CHECKING:
from dzgui.controllers.mc import Controller
from GLib import SOURCE_REMOVE
class RightPanel(Gtk.Box):
def __init__(self, controller):
def __init__(self, controller: "Controller"):
super().__init__(spacing=6, orientation=Gtk.Orientation.VERTICAL)
self.controller = controller

View File

@ -100,7 +100,8 @@ class WaitDialog(GenericDialog):
content.pack_end(spinner, NO_EXPAND, NO_FILL, 0)
spinner.start()
self.show_all()
# FIXME: center on parent window
#self.show_all()
def _on_dialog_delete(
self, response_id: Gtk.ResponseType, event: Gdk.Event

View File

@ -29,6 +29,7 @@ class ServerNotebook(Gtk.ScrolledWindow):
self.recent = ServerTreeView(controller, ServerTab.RECENT)
self.lan = ServerTreeView(controller, ServerTab.LAN)
self.browser.set_query_func(self.query_test2)
self.lan.set_query_func(self.query_test)
# TODO: set context menu on init
self.browser.set_context_menu(ContextMenuGroup.SERVER_BROWSER)
@ -51,23 +52,24 @@ class ServerNotebook(Gtk.ScrolledWindow):
if label == "LAN":
pass
else:
store.append(["BAR", "a", "a", "a", 0, 0, 0, "189.127.165.207:2302", 0, 0, "a", False])
store.append(["BAR", "a", "a", "a", 0, 0, 0, "189.127.165.207:2302", 0, 0, "a", False])
store.append(["BAR", "a", "a", "a", 0, 0, 0, "189.127.165.207:2302", 0, 0, "a", False])
store.append(["BAR", "a", "a", "a", 0, 0, 0, "189.127.165.207:2302", 0, 0, "a", False])
store.append(["BAR", "a", "a", "a", 0, 0, 0, "189.127.165.207:2302", 0, 0, "a", False])
store.append(["BAR", "a", "a", "a", 0, 0, 0, "189.127.165.207:2302", 0, 0, "a", False])
store.append(["BAR", "a", "a", "a", 0, 0, 0, "189.127.165.207:2302", 0, 0, "a", False])
store.append(["BAR", "a", "a", "a", 0, 0, 0, "189.127.165.207:2302", 0, 0, "a", False])
store.append(["BAR", "a", "a", "a", 0, 0, 0, "189.127.165.207:2302", 0, 0, "a", False])
store.append(["BAR", "a", "a", "a", 0, 0, 0, "189.127.165.207:2302", 0, 0, "a", False])
store.append(["BAR", "a", "a", "a", 0, 0, 0, "189.127.165.207:2302", 0, 0, "a", False])
store.append(["BAR", "a", "a", "a", 0, 0, 0, "189.127.165.207:2302", 0, 0, "a", False])
store.append(["BAR", "a", "a", "a", 0, 0, 0, "189.127.165.207:2302", 0, 0, "a", False])
store.append(["BAR", "a", "a", "a", 0, 0, 0, "189.127.165.207:2302", 0, 0, "a", False])
store.append(["BAR", "a", "a", "a", 0, 0, 0, "189.127.165.207:2302", 0, 0, "a", False])
store.append(["BAR", "a", "a", "a", 0, 0, 0, "189.127.165.207:2302", 0, 0, "a", False])
tree.loaded = True
pass
#store.append(["BAR", "a", "a", "a", 0, 0, 0, "189.127.165.207:2302", 0, 0, "a", False])
#store.append(["BAR", "a", "a", "a", 0, 0, 0, "189.127.165.207:2302", 0, 0, "a", False])
#store.append(["BAR", "a", "a", "a", 0, 0, 0, "189.127.165.207:2302", 0, 0, "a", False])
#store.append(["BAR", "a", "a", "a", 0, 0, 0, "189.127.165.207:2302", 0, 0, "a", False])
#store.append(["BAR", "a", "a", "a", 0, 0, 0, "189.127.165.207:2302", 0, 0, "a", False])
#store.append(["BAR", "a", "a", "a", 0, 0, 0, "189.127.165.207:2302", 0, 0, "a", False])
#store.append(["BAR", "a", "a", "a", 0, 0, 0, "189.127.165.207:2302", 0, 0, "a", False])
#store.append(["BAR", "a", "a", "a", 0, 0, 0, "189.127.165.207:2302", 0, 0, "a", False])
#store.append(["BAR", "a", "a", "a", 0, 0, 0, "189.127.165.207:2302", 0, 0, "a", False])
#store.append(["BAR", "a", "a", "a", 0, 0, 0, "189.127.165.207:2302", 0, 0, "a", False])
#store.append(["BAR", "a", "a", "a", 0, 0, 0, "189.127.165.207:2302", 0, 0, "a", False])
#store.append(["BAR", "a", "a", "a", 0, 0, 0, "189.127.165.207:2302", 0, 0, "a", False])
#store.append(["BAR", "a", "a", "a", 0, 0, 0, "189.127.165.207:2302", 0, 0, "a", False])
#store.append(["BAR", "a", "a", "a", 0, 0, 0, "189.127.165.207:2302", 0, 0, "a", False])
#store.append(["BAR", "a", "a", "a", 0, 0, 0, "189.127.165.207:2302", 0, 0, "a", False])
#store.append(["BAR", "a", "a", "a", 0, 0, 0, "189.127.165.207:2302", 0, 0, "a", False])
#tree.loaded = True
# TODO: set model on init of servertreeview
tree.set_model(store)
@ -98,8 +100,9 @@ class ServerNotebook(Gtk.ScrolledWindow):
return
self.get_active_treeview().grab_focus()
def _on_page_changed(self, notebook: Gtk.Notebook, child: Gtk.Widget, index: int) -> None:
if self.controller.loaded is False:
return
# TODO: abstract
label = self.notebook.get_tab_label_text(child)
if label is None:
@ -126,6 +129,10 @@ class ServerNotebook(Gtk.ScrolledWindow):
# self.controller.mediator.grid.conpan.lan.set_visible(False)
# TODO: put in controller
def query_test2(self) -> None:
# TODO: should trigger first page action after entire UI is loaded
self.controller.dump_test()
def query_test(self) -> None:
data = (["BAR", "a", "a", "a", 1, 1, 1, "185.207.214.16:2302", 0, 0, "a", False])
return data