fixme: decrement button after thread closes

This commit is contained in:
aclist 2026-04-22 23:11:40 +09:00
parent d9ec01d9b0
commit c6f1d62c73
7 changed files with 22 additions and 11 deletions

View File

@ -139,3 +139,5 @@ class Emitter(GObject.GObject):
@GObject.Signal(flags=GObject.SignalFlags.RUN_LAST, arg_types=(str,))
def keyword_set(self, keyword: str) -> None:
pass
# TODO: if servers fail to load, may leave dangling widgets waiting for a signal

View File

@ -526,6 +526,7 @@ class Controller(GObject.GObject):
# TODO: rename
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
tv = self.get_active_treeview()
if tv.loaded is False:

View File

@ -143,4 +143,5 @@ def main() -> None:
use_miles,
)
print("All OK. Loading UI...")
logger.critical("TEST")
App(prefs)

View File

@ -87,8 +87,6 @@ class ServerModelManager:
def refresh(self) -> None:
self.preserve_on_fail = True
self.load()
# TODO: if refresh is active, callback to button decrement signal
# and do not mark refresh as sensitive
@call_on_thread(dialog.fetching)
def _dump_api(self) -> None:

View File

@ -21,6 +21,8 @@ from gi.repository import Gtk, GLib # noqa E402
if TYPE_CHECKING:
from gi.repository import GLib
from dzgui.controllers.mc import Controller
from dzgui.controllers.emitter import Emitter
from dzgui.const.enum import ServerTab
class Icon(Gtk.Image):
@ -88,6 +90,9 @@ class RefreshButton(IconTextButton):
label=atomic_buttons.refresh,
)
self.controller = controller
emitter = self.controller.get_emitter()
self.loading = False
self.time = 30
self.set_margin_top(10)
@ -96,18 +101,21 @@ class RefreshButton(IconTextButton):
self.set_tooltip_text(atomic_buttons.refresh_tooltip)
self.connect("clicked", self._on_refresh_clicked)
emitter.connect("servers_loaded", self.start_decrement)
def _on_refresh_clicked(self, button: Self) -> None:
"""Spawned in a thread"""
self.loading = True
self.controller.refresh_tree()
# TODO: get server tab enum
# if LAN tab, reload existing entries in place
self.set_sensitive(False)
self.show_time(True)
# FIXME: do this after threaded call fully finishes
# FIXME: other signals cause refresh button to become sensitive
# after model is loaded
# TODO: put in smm cleanup func, use signal
GLib.timeout_add_seconds(1, self.decrement)
self.controller.refresh_tree()
def start_decrement(self, emitter: "Emitter", tab: "ServerTab") -> None:
if self.loading:
self.set_sensitive(False)
self.loading = False
self.show_time(True)
GLib.timeout_add_seconds(1, self.decrement)
def decrement(self) -> "GLib.SOURCE_REMOVE" | Literal[True]:
self.time -= 1

View File

@ -68,7 +68,6 @@ class RightPanel(Gtk.Box):
def _on_servers_loaded(self, emitter: "Emitter", context: "ServerTab") -> None:
# TODO: similar logic on notebook page change
print("servers loaded")
state = self.controller.has_server_model()
for widget in (self.refresh_button, self.filters_vbox):
widget.set_sensitive(state)

View File

@ -16,6 +16,8 @@ if TYPE_CHECKING:
class Log(CursorMixin, HelpMenuMixin, Gtk.Box): # type: ignore
def __init__(self, controller: "Controller") -> None:
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.treeview = LogTreeView(controller)
self.scrolled.add(self.treeview)