mirror of
https://github.com/aclist/dztui.git
synced 2026-08-29 03:06:56 +02:00
feat: threading WIP
This commit is contained in:
parent
fdb6b342f7
commit
00ca59698c
@ -91,8 +91,9 @@ class Controller:
|
|||||||
self.crumbs_cache = ""
|
self.crumbs_cache = ""
|
||||||
self.mediator = AppNavigation()
|
self.mediator = AppNavigation()
|
||||||
self.prefs: UserPrefs
|
self.prefs: UserPrefs
|
||||||
|
|
||||||
self.model_manager = ModelManager()
|
self.model_manager = ModelManager()
|
||||||
|
# TODO: poc
|
||||||
|
self.loaded = False
|
||||||
|
|
||||||
def register_widget(self, attr: str, widget: Gtk.Widget) -> None:
|
def register_widget(self, attr: str, widget: Gtk.Widget) -> None:
|
||||||
try:
|
try:
|
||||||
@ -483,6 +484,8 @@ class Controller:
|
|||||||
# NOTE: manipulates mod store
|
# NOTE: manipulates mod store
|
||||||
case ContextMenu.DELETE_MOD:
|
case ContextMenu.DELETE_MOD:
|
||||||
self.delete_single_mod(path)
|
self.delete_single_mod(path)
|
||||||
|
# TODO: hook treeview changed signal
|
||||||
|
# Gtk.TreeModel, row-inserted/row-deleted
|
||||||
self.update_mod_statusbar()
|
self.update_mod_statusbar()
|
||||||
remove_stale_signatures(
|
remove_stale_signatures(
|
||||||
self.prefs.paths.config,
|
self.prefs.paths.config,
|
||||||
@ -545,11 +548,31 @@ class Controller:
|
|||||||
def unselect_all_mods(self) -> None:
|
def unselect_all_mods(self) -> None:
|
||||||
self.mediator.modtreeview.get_selection().unselect_all()
|
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:
|
def highlight_stale(self) -> None:
|
||||||
self.call_on_thread(self.colorize_mods)
|
self.call_on_thread(self.colorize_mods)
|
||||||
|
|
||||||
def call_on_thread(self, func: Callable, *args) -> None:
|
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()
|
self.wait_dialog.show_all()
|
||||||
thread = threading.Thread(target=func, args=args)
|
thread = threading.Thread(target=func, args=args)
|
||||||
thread.start()
|
thread.start()
|
||||||
@ -644,21 +667,21 @@ class Controller:
|
|||||||
self.populate_model()
|
self.populate_model()
|
||||||
|
|
||||||
def populate_model(self) -> None:
|
def populate_model(self) -> None:
|
||||||
|
print("POPULATING MODEL")
|
||||||
# TODO: always use same server model, store in servertreeview class
|
# TODO: always use same server model, store in servertreeview class
|
||||||
treeview = self.get_active_treeview()
|
treeview = self.get_active_treeview()
|
||||||
if treeview.get_loaded() is False:
|
if treeview.get_loaded() is False:
|
||||||
new_model = self.model_manager.new_model()
|
new_model = self.model_manager.new_model()
|
||||||
# NOTE: set_query_func()
|
# NOTE: set_query_func()
|
||||||
func = treeview.get_query_func()
|
func = treeview.get_query_func()
|
||||||
|
print(func)
|
||||||
if func is not None:
|
if func is not None:
|
||||||
model = treeview.get_model()
|
model = treeview.get_model()
|
||||||
|
print(model)
|
||||||
|
# TODO: this may lag?
|
||||||
model.clear()
|
model.clear()
|
||||||
data = func()
|
self.set_callback(None, None)#self.get_func_data)
|
||||||
# TODO: threading
|
self.call_on_thread(func)
|
||||||
model.append(data)
|
|
||||||
treeview.set_loaded(True)
|
|
||||||
self.update_server_status()
|
|
||||||
treeview.grab_focus()
|
|
||||||
|
|
||||||
def focus_button_box(self) -> None:
|
def focus_button_box(self) -> None:
|
||||||
self.mediator.right_panel.focus_button_box()
|
self.mediator.right_panel.focus_button_box()
|
||||||
|
|||||||
@ -549,6 +549,7 @@ class LanPanel:
|
|||||||
scan_button: str
|
scan_button: str
|
||||||
placeholder: str
|
placeholder: str
|
||||||
entry_tooltip: str
|
entry_tooltip: str
|
||||||
|
scan_tooltip: str
|
||||||
|
|
||||||
lan_panel = LanPanel(
|
lan_panel = LanPanel(
|
||||||
heading="LAN query port",
|
heading="LAN query port",
|
||||||
@ -556,11 +557,10 @@ lan_panel = LanPanel(
|
|||||||
custom_button="Custom port",
|
custom_button="Custom port",
|
||||||
scan_button="Scan",
|
scan_button="Scan",
|
||||||
placeholder="Enter the query port (1-65535)",
|
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..."
|
distance_suffix = "Distance: calculating..."
|
||||||
dialog_error = "ERROR"
|
dialog_error = "ERROR"
|
||||||
|
|
||||||
|
|||||||
@ -216,10 +216,12 @@ class OuterWindow(Gtk.Window):
|
|||||||
self.show_all()
|
self.show_all()
|
||||||
|
|
||||||
css.load_css()
|
css.load_css()
|
||||||
MainController.open_page(NotebookPage.SERVERS)
|
|
||||||
# TODO: first run
|
# TODO: first run
|
||||||
|
MainController.open_page(NotebookPage.SERVERS)
|
||||||
MainController.mediator.grid.conpan.lan.set_visible(False)
|
MainController.mediator.grid.conpan.lan.set_visible(False)
|
||||||
self.grid.right_panel.sel_panel.hide()
|
self.grid.right_panel.sel_panel.hide()
|
||||||
|
# TODO: POC, trigger page change here
|
||||||
|
MainController.loaded = True
|
||||||
|
|
||||||
def _on_delete_event(
|
def _on_delete_event(
|
||||||
self, window: "OuterWindow", event: Gdk.EventKey
|
self, window: "OuterWindow", event: Gdk.EventKey
|
||||||
|
|||||||
@ -12,10 +12,11 @@ gi.require_version("Gtk", "3.0")
|
|||||||
from gi.repository import Gtk, GLib # noqa E402
|
from gi.repository import Gtk, GLib # noqa E402
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
|
from dzgui.controllers.mc import Controller
|
||||||
from GLib import SOURCE_REMOVE
|
from GLib import SOURCE_REMOVE
|
||||||
|
|
||||||
class RightPanel(Gtk.Box):
|
class RightPanel(Gtk.Box):
|
||||||
def __init__(self, controller):
|
def __init__(self, controller: "Controller"):
|
||||||
super().__init__(spacing=6, orientation=Gtk.Orientation.VERTICAL)
|
super().__init__(spacing=6, orientation=Gtk.Orientation.VERTICAL)
|
||||||
|
|
||||||
self.controller = controller
|
self.controller = controller
|
||||||
|
|||||||
@ -100,7 +100,8 @@ class WaitDialog(GenericDialog):
|
|||||||
content.pack_end(spinner, NO_EXPAND, NO_FILL, 0)
|
content.pack_end(spinner, NO_EXPAND, NO_FILL, 0)
|
||||||
|
|
||||||
spinner.start()
|
spinner.start()
|
||||||
self.show_all()
|
# FIXME: center on parent window
|
||||||
|
#self.show_all()
|
||||||
|
|
||||||
def _on_dialog_delete(
|
def _on_dialog_delete(
|
||||||
self, response_id: Gtk.ResponseType, event: Gdk.Event
|
self, response_id: Gtk.ResponseType, event: Gdk.Event
|
||||||
|
|||||||
@ -29,6 +29,7 @@ class ServerNotebook(Gtk.ScrolledWindow):
|
|||||||
self.recent = ServerTreeView(controller, ServerTab.RECENT)
|
self.recent = ServerTreeView(controller, ServerTab.RECENT)
|
||||||
self.lan = ServerTreeView(controller, ServerTab.LAN)
|
self.lan = ServerTreeView(controller, ServerTab.LAN)
|
||||||
|
|
||||||
|
self.browser.set_query_func(self.query_test2)
|
||||||
self.lan.set_query_func(self.query_test)
|
self.lan.set_query_func(self.query_test)
|
||||||
# TODO: set context menu on init
|
# TODO: set context menu on init
|
||||||
self.browser.set_context_menu(ContextMenuGroup.SERVER_BROWSER)
|
self.browser.set_context_menu(ContextMenuGroup.SERVER_BROWSER)
|
||||||
@ -51,23 +52,24 @@ class ServerNotebook(Gtk.ScrolledWindow):
|
|||||||
if label == "LAN":
|
if label == "LAN":
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
store.append(["BAR", "a", "a", "a", 0, 0, 0, "189.127.165.207:2302", 0, 0, "a", False])
|
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])
|
||||||
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
|
#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
|
# TODO: set model on init of servertreeview
|
||||||
tree.set_model(store)
|
tree.set_model(store)
|
||||||
|
|
||||||
@ -98,8 +100,9 @@ class ServerNotebook(Gtk.ScrolledWindow):
|
|||||||
return
|
return
|
||||||
self.get_active_treeview().grab_focus()
|
self.get_active_treeview().grab_focus()
|
||||||
|
|
||||||
|
|
||||||
def _on_page_changed(self, notebook: Gtk.Notebook, child: Gtk.Widget, index: int) -> None:
|
def _on_page_changed(self, notebook: Gtk.Notebook, child: Gtk.Widget, index: int) -> None:
|
||||||
|
if self.controller.loaded is False:
|
||||||
|
return
|
||||||
# TODO: abstract
|
# TODO: abstract
|
||||||
label = self.notebook.get_tab_label_text(child)
|
label = self.notebook.get_tab_label_text(child)
|
||||||
if label is None:
|
if label is None:
|
||||||
@ -126,6 +129,10 @@ class ServerNotebook(Gtk.ScrolledWindow):
|
|||||||
# self.controller.mediator.grid.conpan.lan.set_visible(False)
|
# self.controller.mediator.grid.conpan.lan.set_visible(False)
|
||||||
|
|
||||||
# TODO: put in controller
|
# 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:
|
def query_test(self) -> None:
|
||||||
data = (["BAR", "a", "a", "a", 1, 1, 1, "185.207.214.16:2302", 0, 0, "a", False])
|
data = (["BAR", "a", "a", "a", 1, 1, 1, "185.207.214.16:2302", 0, 0, "a", False])
|
||||||
return data
|
return data
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user