fixme: decrement button after thread closes

This commit is contained in:
aclist committed 2026-04-22 23:11:40 +09:00
1 parent d9ec01d9b0
commit c6f1d62c73
7 files changed
+22 -11

No files matched your search

+2
View File
@@ -139,3 +139,5 @@ class Emitter(GObject.GObject):
@GObject.Signal(flags=GObject.SignalFlags.RUN_LAST, arg_types=(str,)) @GObject.Signal(flags=GObject.SignalFlags.RUN_LAST, arg_types=(str,))
def keyword_set(self, keyword: str) -> None: def keyword_set(self, keyword: str) -> None:
pass pass
# TODO: if servers fail to load, may leave dangling widgets waiting for a signal
+1
View File
@@ -526,6 +526,7 @@ class Controller(GObject.GObject):
# TODO: rename # TODO: rename
def _on_servers_loaded_init(self, emitter: "Emitter") -> None: def _on_servers_loaded_init(self, emitter: "Emitter") -> None:
"""Triggered after servers load but prior to maps loading"""
# FIXME: wipe maps store when changing tabs if model is none # FIXME: wipe maps store when changing tabs if model is none
tv = self.get_active_treeview() tv = self.get_active_treeview()
if tv.loaded is False: if tv.loaded is False:
+1
View File
@@ -143,4 +143,5 @@ def main() -> None:
use_miles, use_miles,
) )
print("All OK. Loading UI...") print("All OK. Loading UI...")
logger.critical("TEST")
App(prefs) App(prefs)
-2
View File
@@ -87,8 +87,6 @@ class ServerModelManager:
def refresh(self) -> None: def refresh(self) -> None:
self.preserve_on_fail = True self.preserve_on_fail = True
self.load() self.load()
# TODO: if refresh is active, callback to button decrement signal
# and do not mark refresh as sensitive
@call_on_thread(dialog.fetching) @call_on_thread(dialog.fetching)
def _dump_api(self) -> None: def _dump_api(self) -> None:
+16 -8
View File
@@ -21,6 +21,8 @@ from gi.repository import Gtk, GLib # noqa E402
if TYPE_CHECKING: if TYPE_CHECKING:
from gi.repository import GLib from gi.repository import GLib
from dzgui.controllers.mc import Controller from dzgui.controllers.mc import Controller
from dzgui.controllers.emitter import Emitter
from dzgui.const.enum import ServerTab
class Icon(Gtk.Image): class Icon(Gtk.Image):
@@ -88,6 +90,9 @@ class RefreshButton(IconTextButton):
label=atomic_buttons.refresh, label=atomic_buttons.refresh,
) )
self.controller = controller self.controller = controller
emitter = self.controller.get_emitter()
self.loading = False
self.time = 30 self.time = 30
self.set_margin_top(10) self.set_margin_top(10)
@@ -96,18 +101,21 @@ class RefreshButton(IconTextButton):
self.set_tooltip_text(atomic_buttons.refresh_tooltip) self.set_tooltip_text(atomic_buttons.refresh_tooltip)
self.connect("clicked", self._on_refresh_clicked) self.connect("clicked", self._on_refresh_clicked)
emitter.connect("servers_loaded", self.start_decrement)
def _on_refresh_clicked(self, button: Self) -> None: def _on_refresh_clicked(self, button: Self) -> None:
"""Spawned in a thread"""
self.loading = True
self.controller.refresh_tree()
# TODO: get server tab enum # TODO: get server tab enum
# if LAN tab, reload existing entries in place # if LAN tab, reload existing entries in place
self.set_sensitive(False)
self.show_time(True) def start_decrement(self, emitter: "Emitter", tab: "ServerTab") -> None:
# FIXME: do this after threaded call fully finishes if self.loading:
# FIXME: other signals cause refresh button to become sensitive self.set_sensitive(False)
# after model is loaded self.loading = False
# TODO: put in smm cleanup func, use signal self.show_time(True)
GLib.timeout_add_seconds(1, self.decrement) GLib.timeout_add_seconds(1, self.decrement)
self.controller.refresh_tree()
def decrement(self) -> "GLib.SOURCE_REMOVE" | Literal[True]: def decrement(self) -> "GLib.SOURCE_REMOVE" | Literal[True]:
self.time -= 1 self.time -= 1
-1
View File
@@ -68,7 +68,6 @@ class RightPanel(Gtk.Box):
def _on_servers_loaded(self, emitter: "Emitter", context: "ServerTab") -> None: def _on_servers_loaded(self, emitter: "Emitter", context: "ServerTab") -> None:
# TODO: similar logic on notebook page change # TODO: similar logic on notebook page change
print("servers loaded")
state = self.controller.has_server_model() state = self.controller.has_server_model()
for widget in (self.refresh_button, self.filters_vbox): for widget in (self.refresh_button, self.filters_vbox):
widget.set_sensitive(state) widget.set_sensitive(state)
+2
View File
@@ -16,6 +16,8 @@ if TYPE_CHECKING:
class Log(CursorMixin, HelpMenuMixin, Gtk.Box): # type: ignore class Log(CursorMixin, HelpMenuMixin, Gtk.Box): # type: ignore
def __init__(self, controller: "Controller") -> None: def __init__(self, controller: "Controller") -> None:
super().__init__(orientation=Gtk.Orientation.VERTICAL) super().__init__(orientation=Gtk.Orientation.VERTICAL)
# NOTE: LogTreeView is kept in a separate ScrolledWindow so that
# checkboxes will be flush on bottom
self.scrolled = Gtk.ScrolledWindow() self.scrolled = Gtk.ScrolledWindow()
self.treeview = LogTreeView(controller) self.treeview = LogTreeView(controller)
self.scrolled.add(self.treeview) self.scrolled.add(self.treeview)