fix: refresh increment overwriting when changing tabs

This commit is contained in:
aclist 2026-05-25 00:03:21 +09:00
parent 26ee560cb4
commit 72024c5d43
4 changed files with 24 additions and 24 deletions

View File

@ -84,7 +84,6 @@ class Controller(GObject.GObject):
self.emitter = Emitter() self.emitter = Emitter()
self.emitter.connect("map_selection_changed", self._on_map_selection_changed) self.emitter.connect("map_selection_changed", self._on_map_selection_changed)
self.emitter.connect("check_toggled", self._on_check_toggled) self.emitter.connect("check_toggled", self._on_check_toggled)
self.emitter.connect("servers_loaded_init", self._on_servers_loaded_init)
# NOTE: suppress requests until entire UI is loaded # NOTE: suppress requests until entire UI is loaded
self.loaded = False self.loaded = False
@ -321,6 +320,7 @@ class Controller(GObject.GObject):
self.mediator.filters.button_grid.block_toggles(True) self.mediator.filters.button_grid.block_toggles(True)
self.populate_filter_prefs() self.populate_filter_prefs()
self.mediator.filters.button_grid.block_toggles(False) self.mediator.filters.button_grid.block_toggles(False)
self.emitter.emit("lan_page_initialized")
ServerModelManager(self, tv).load() ServerModelManager(self, tv).load()
def populate_filter_prefs(self) -> None: def populate_filter_prefs(self) -> None:
@ -347,16 +347,7 @@ class Controller(GObject.GObject):
filter_man = self.get_filter_man() filter_man = self.get_filter_man()
return filter_man.get_filters() return filter_man.get_filters()
# TODO: rename # FIXME: wipe maps store when changing tabs if model is 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
# e.g. select recent, toggle map, then select lan -> not wiped
tv = self.get_active_treeview()
if tv.loaded is False:
return
store = self.get_map_store()
self.emitter.emit("load_maps", store)
def has_server_model(self) -> bool: def has_server_model(self) -> bool:
treeview = self.get_active_treeview() treeview = self.get_active_treeview()

View File

@ -243,9 +243,11 @@ class ServerModelManager:
filter_man = self.tv.get_filter_man() filter_man = self.tv.get_filter_man()
maps = self._get_new_maps() maps = self._get_new_maps()
filter_man.set_unique_maps(maps) filter_man.set_unique_maps(maps)
store = filter_man.get_map_store()
self.first_iteration = False self.first_iteration = False
self.emitter.emit("servers_loaded_init") self.emitter.emit("load_maps", store)
# self.emitter.emit("servers_loaded_init")
def add_to_history(self, record: dict[str, Any]) -> None: def add_to_history(self, record: dict[str, Any]) -> None:
proxy_man = self._get_proxy_man() proxy_man = self._get_proxy_man()
@ -378,24 +380,24 @@ class ServerModelManager:
# NOTE: maps are set outside of thread because it triggers map changed signals # NOTE: maps are set outside of thread because it triggers map changed signals
maps = self._get_new_maps() maps = self._get_new_maps()
filter_man.set_unique_maps(maps) filter_man.set_unique_maps(maps)
store = filter_man.get_map_store()
self.emitter.emit("load_maps", store)
self.first_iteration = False self.first_iteration = False
self.emitter.emit("servers_loaded_init")
self.emitter.emit("saved_servers_changed") self.emitter.emit("saved_servers_changed")
def _update_maps(self) -> None: def _update_maps(self) -> None:
filter_man = self.tv.get_filter_man() filter_man = self.tv.get_filter_man()
filter_man.set_unique_maps(self._get_new_maps()) filter_man.set_unique_maps(self._get_new_maps())
self.emitter.emit("servers_loaded_init") store = filter_man.get_map_store()
self.emitter.emit("load_maps", store)
self.first_iteration = False self.first_iteration = False
def _cleanup_on_success(self) -> None: def _cleanup_on_success(self) -> None:
proxy = self._get_proxy_man().get_proxy_model() proxy = self._get_proxy_man().get_proxy_model()
self.tv.set_model(proxy) self.tv.set_model(proxy)
# TODO: servers_loaded vs servers_reloaded
self.emitter.emit("servers_loaded", self.enum) self.emitter.emit("servers_loaded", self.enum)
if self.first_iteration: if self.first_iteration:
self._update_maps() self._update_maps()

View File

@ -94,9 +94,11 @@ class RefreshButton(IconTextButton):
icon=REFRESH_ICON, icon=REFRESH_ICON,
label=atomic_buttons.refresh, label=atomic_buttons.refresh,
) )
self.controller = controller self.controller = controller
emitter = self.controller.get_emitter() emitter = self.controller.get_emitter()
self.loading = False self.loading = False
self.clicked = False
self.time = 30 self.time = 30
@ -110,17 +112,21 @@ class RefreshButton(IconTextButton):
def _on_refresh_clicked(self, button: Self) -> None: def _on_refresh_clicked(self, button: Self) -> None:
"""Spawned in a thread""" """Spawned in a thread"""
self.loading = True self.clicked = True
self.controller.refresh_tree() 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
def start_decrement(self, emitter: "Emitter", tab: "ServerTab") -> None: def start_decrement(self, emitter: "Emitter", tab: "ServerTab") -> None:
if self.clicked is False:
return
if self.loading: if self.loading:
self.set_sensitive(False) return
self.loading = False self.set_sensitive(False)
self.show_time(True) self.loading = True
GLib.timeout_add_seconds(1, self.decrement) self.clicked = False
self.show_time(True)
GLib.timeout_add_seconds(1, self.decrement)
def decrement(self) -> bool: def decrement(self) -> bool:
self.time -= 1 self.time -= 1
@ -128,6 +134,7 @@ class RefreshButton(IconTextButton):
self.time = 30 self.time = 30
self.show_time(False) self.show_time(False)
self.set_sensitive(True) self.set_sensitive(True)
self.loading = False
return False return False
self.show_time(True) self.show_time(True)
return True return True

View File

@ -107,16 +107,16 @@ class RightPanel(Gtk.Box):
if page.loaded is True: if page.loaded is True:
return return
self.filters_vbox.set_sensitive(False) self.filters_vbox.set_sensitive(False)
# TODO: unless it is lan page
#self.refresh_button.set_sensitive(False)
def _on_lan_page_init(self, emitter: "Emitter") -> None: def _on_lan_page_init(self, emitter: "Emitter") -> None:
self.filters_vbox.set_sensitive(False) self.filters_vbox.set_sensitive(False)
#self.refresh_button.set_sensitive(False)
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
state = self.controller.has_server_model() state = self.controller.has_server_model()
for el in self.filters_vbox, self.refresh_button: self.filters_vbox.set_sensitive(state)
el.set_sensitive(state)
def _on_version_clicked(self, widget: Gtk.EventBox, event: Gdk.EventButton) -> None: def _on_version_clicked(self, widget: Gtk.EventBox, event: Gdk.EventButton) -> None:
def revert() -> Literal[False]: def revert() -> Literal[False]: