feat: restore map selection

This commit is contained in:
aclist 2026-02-11 21:35:51 +09:00
parent 25f19cfd10
commit 38883626f5
4 changed files with 58 additions and 45 deletions

View File

@ -377,6 +377,7 @@ class Controller(GObject.GObject):
if res.status != 200 or not res.parsed: if res.status != 200 or not res.parsed:
# TODO: pop warning dialog, create enum around various failure states # TODO: pop warning dialog, create enum around various failure states
print("failed to parse/timeout error") print("failed to parse/timeout error")
self.new_maps = None
self.push_data(None, FilterMode.INITIAL, success=False) self.push_data(None, FilterMode.INITIAL, success=False)
return return
j = res.json j = res.json
@ -387,21 +388,12 @@ class Controller(GObject.GObject):
j = res.json j = res.json
serv += j["response"]["servers"] serv += j["response"]["servers"]
# TODO: ping column pass # TODO: additional ping column pass, collated
parsed = Servers.parse_json(serv) parsed = Servers.parse_json(serv)
self.mediator.filters.set_unique_maps(parsed) self.first_iteration = True
self.new_maps = parsed
self.push_data(parsed, FilterMode.INITIAL, success=True) self.push_data(parsed, FilterMode.INITIAL, success=True)
#def set_unique_maps(self, records: list) -> None:
# if len(records) < 1:
# return
# u_maps = set([row[1] for row in records])
# u_maps = sorted(u_maps)
# for m in u_maps:
# print(m)
# #map_store.append([m])
# #self.maps_hr.append(m)
def get_help_row(self) -> str: def get_help_row(self) -> str:
tv = self.mediator.menu tv = self.mediator.menu
model = self.get_help_store() model = self.get_help_store()
@ -620,8 +612,17 @@ class Controller(GObject.GObject):
self.push_data(data, FilterMode.INITIAL, success=True) self.push_data(data, FilterMode.INITIAL, success=True)
def cleanup(self) -> None: def cleanup(self) -> None:
# TODO: if success failed, throw popup
treeview = self.get_active_treeview() treeview = self.get_active_treeview()
# TODO: signals or other approach to deferring model insertion
# after thread closes
# cf. servers_loaded signal
treeview.set_model(self.to_insert)
# CHORE: this is placeholder logic
if self.first_iteration:
self.mediator.filters.set_unique_maps(self.new_maps)
self.first_iteration = False
context = self.get_active_context() context = self.get_active_context()
self.emitter.emit("servers_loaded", context) self.emitter.emit("servers_loaded", context)
@ -638,20 +639,21 @@ class Controller(GObject.GObject):
treeview = self.get_active_treeview() treeview = self.get_active_treeview()
manager = treeview.get_filter_man() manager = treeview.get_filter_man()
self.to_insert = None
# TODO: # TODO:
self.success = success self.success = success
if success: if success:
if data is None: if data is None:
insert = None self.to_insert = None
else: else:
# TODO: consolidate into filter manager # TODO: consolidate into filter manager
if mode == FilterMode.INITIAL: if mode == FilterMode.INITIAL:
manager.set_control(data) manager.set_control(data)
# TODO: init maps here
manager.filter(mode) manager.filter(mode)
insert = manager.get_model() self.to_insert = manager.get_model()
# TODO: should list store be set outside of this thread? # TODO: should list store be set outside of this thread?
treeview.set_model(insert) # treeview.set_model(self.to_insert)
treeview.set_loaded(True) treeview.set_loaded(True)
GLib.idle_add(self.cleanup) GLib.idle_add(self.cleanup)

View File

@ -49,8 +49,8 @@ class FilteredModelManager:
self.ephemeral_model = self.new_model_from_class(ServerColumns) self.ephemeral_model = self.new_model_from_class(ServerColumns)
self.control_model = None self.control_model: list = None
self.filtered = None self.filtered: list = None
self.success = True self.success = True
def append_row(self, row: list) -> None: def append_row(self, row: list) -> None:
@ -86,7 +86,7 @@ class FilteredModelManager:
case FilterMode.MAP: case FilterMode.MAP:
prior_map = self.controller.get_prior_map() prior_map = self.controller.get_prior_map()
if prior_map == "All maps": if prior_map == strings.all_maps:
rows = self.filter_map(filters) rows = self.filter_map(filters)
else: else:
rows = self.filter_toggle_on(filters, *args) rows = self.filter_toggle_on(filters, *args)
@ -138,7 +138,7 @@ class FilteredModelManager:
rows = self.filtered rows = self.filtered
sel_map = self.controller.get_map() sel_map = self.controller.get_map()
if sel_map == "All maps": if sel_map == strings.all_maps:
return rows return rows
rows = [row for row in rows if row[1] == sel_map] rows = [row for row in rows if row[1] == sel_map]
@ -234,7 +234,7 @@ class FilteredModelManager:
if row[7] == addr and row[8] == qport: if row[7] == addr and row[8] == qport:
self.control_model.remove(row) self.control_model.remove(row)
# self.wipe_cache() self.wipe_cache()
filters = self.controller.get_filters() filters = self.controller.get_filters()
refiltered = self.filter_toggle_on(filters) refiltered = self.filter_toggle_on(filters)
self.set_filtered(refiltered) self.set_filtered(refiltered)
@ -272,10 +272,14 @@ class FilteredModelManager:
def get_success(self) -> bool: def get_success(self) -> bool:
return self.success return self.success
# def wipe_cache(self, full=False) -> None: # NOTE: used when adding/removing rows in-situ in the ephemeral model
# self.success = True # and syncing changes to control model, but ignored for player count/ping updates
# self.filtered = None # cf. remove_from_history(), remove_server()
# self.filter_cache = {} # NOTE: this can most likely be simplified for v7
# self.ping_cache = {} def wipe_cache(self, full=False) -> None:
# if full: self.success = True
# self.control_model = None self.filtered = None
self.filter_cache = {}
self.ping_cache = {}
if full:
self.control_model = None

View File

@ -127,13 +127,18 @@ class FilterPanel(Gtk.Box):
self.pack_start(el, NO_EXPAND, NO_FILL, NO_PADDING) self.pack_start(el, NO_EXPAND, NO_FILL, NO_PADDING)
def set_unique_maps(self, maps: list) -> None: def set_unique_maps(self, maps: list) -> None:
if maps is None:
return
if len(maps) < 1: if len(maps) < 1:
return return
u_maps = set([row[1] for row in maps]) u_maps = set([row[1] for row in maps])
u_maps = sorted(u_maps) u_maps = sorted(u_maps)
self.controller.append_map([strings.all_maps])
self.selected_map = strings.all_maps
for m in u_maps: for m in u_maps:
self.controller.append_map([m]) self.controller.append_map([m])
self.maps_hr.append(m) self.maps_hr.append(m)
self.maps_combo.set_active(0)
def get_filters(self) -> tuple: def get_filters(self) -> tuple:
filters = [] filters = []
@ -144,16 +149,17 @@ class FilterPanel(Gtk.Box):
filters.append(k) filters.append(k)
return tuple(filters) return tuple(filters)
def reinit_panel(self) -> None: # TODO: currently unused
self.keyword_entry.set_text("") # def reinit_panel(self) -> None:
self.keyword_filter = "" # self.keyword_entry.set_text("")
self.reinit_filters() # self.keyword_filter = ""
self.set_visible(False) # self.reinit_filters()
# TODO: # self.set_visible(False)
sel_panel = self.controller.mediator.grid.sel_panel # sel_panel = self.controller.mediator.grid.sel_panel
if sel_panel.is_visible(): # if sel_panel.is_visible():
sel_panel.set_visible(False) # sel_panel.set_visible(False)
# TODO: change filters on a per-tab basis
def reinit_filters(self) -> None: def reinit_filters(self) -> None:
self.enabled_filters = dict(self.default_filters) self.enabled_filters = dict(self.default_filters)
for check in self.checks: for check in self.checks:
@ -162,6 +168,7 @@ class FilterPanel(Gtk.Box):
check.set_active(state) check.set_active(state)
def _on_map_entry_keypress(self, entry: Gtk.Entry, event: Gdk.EventKey) -> None: def _on_map_entry_keypress(self, entry: Gtk.Entry, event: Gdk.EventKey) -> None:
# TODO: use activated() signal
match event.keyval: match event.keyval:
case Gdk.KEY_Return: case Gdk.KEY_Return:
text = entry.get_text() text = entry.get_text()

View File

@ -50,13 +50,13 @@ class RightPanel(Gtk.Box):
self.refresh_button.set_sensitive(False) self.refresh_button.set_sensitive(False)
# TODO: move to filter panel # TODO: move to filter panel
def reinit_maps(self, rows: list) -> None: # def reinit_maps(self, rows: list) -> None:
self.controller.reinit_map_store() # self.controller.reinit_map_store()
# TODO: communicate with controller # # TODO: communicate with controller
# self.controller.clear_map_store() # # self.controller.clear_map_store()
# map_store.append(["All maps"]) # # map_store.append(["All maps"])
self.selected = "All maps" # self.selected = "All maps"
self.filters_vbox.set_unique_maps(rows) # self.filters_vbox.set_unique_maps(rows)
# TODO: reference # TODO: reference
# def _on_ping_clicked(self, button: Gtk.Button) -> None: # def _on_ping_clicked(self, button: Gtk.Button) -> None: