diff --git a/dzgui/controllers/mc.py b/dzgui/controllers/mc.py index eebabf9..fef5184 100644 --- a/dzgui/controllers/mc.py +++ b/dzgui/controllers/mc.py @@ -389,7 +389,13 @@ class Controller(GObject.GObject): saved_tree = self.get_servers().get_saved() ServerModelManager(self, saved_tree).remove_by_record(record) + def add_to_history(self, record: dict[str, Any]) -> None: + tv = self.get_servers().get_recent() + ServerModelManager(self, tv).add_to_history(record) + def remove_from_history(self, record: "Record") -> None: + # NOTE: remove action is only possible from history tree context menu, + # i.e., the active tree tv = self.get_active_treeview() ServerModelManager(self, tv).remove_from_history(record) diff --git a/dzgui/managers/connection.py b/dzgui/managers/connection.py index 04214bf..37a2508 100644 --- a/dzgui/managers/connection.py +++ b/dzgui/managers/connection.py @@ -114,6 +114,7 @@ class ConnectionManager: self.thread_man.set_cleanup_func(failure_func, destroy_first=True) return + self.history = res.as_row() record = res.get_record() # NOTE: store metadata for later connection @@ -263,11 +264,14 @@ class ConnectionManager: if is_dayz_running(): break time.sleep(1) - # TODO: add self.record to history file and list store - # proxy_model.append_to_history() - func = StoredFunc(self.controller.open_page, NotebookPage.SERVERS) + + func = StoredFunc(self._add_to_history_and_return) self.thread_man.set_cleanup_func(func) + def _add_to_history_and_return(self) -> None: + self.controller.add_to_history(self.history) + self.controller.open_page(NotebookPage.SERVERS) + def _update_mods(self, raise_window: bool) -> None: # NOTE: fast enqueue all mods in auto mode prefs = self.controller.get_prefs() diff --git a/dzgui/model/proxy_model.py b/dzgui/model/proxy_model.py index 623590e..9927019 100644 --- a/dzgui/model/proxy_model.py +++ b/dzgui/model/proxy_model.py @@ -55,10 +55,27 @@ class ProxyModelManager: self.proxy_model[treeiter][4] = playercount.players self.proxy_model[treeiter][6] = playercount.queue - # def append_to_history(self, row: list) -> None: - # if len(self.control_model) == 10: - # del self.control_model[0] - # self.control_model.append(row) + def append_row_to_history( + self, history: list[str, str, str, str, int, int, int, str, int, int, str, bool] + ) -> None: + addr = history[7] + qport = history[8] + + found = False + for i, row in enumerate(self.control_model): + if addr == row[7] and qport == row[8]: + print("record exists in history") + item = self.control_model.pop(i) + self.control_model.append(item) + found = True + break + + if found is False: + self.control_model.append(history) + if len(self.control_model) == 11: + del self.control_model[0] + + self.filter(FilterMode.INITIAL, skip_cache=True) def remove_row_from_control(self, record: "Record") -> None: if self.control_model is None: diff --git a/dzgui/model/servers.py b/dzgui/model/servers.py index 1cc6206..1174f3c 100644 --- a/dzgui/model/servers.py +++ b/dzgui/model/servers.py @@ -214,22 +214,9 @@ class ServerModelManager: res = Servers.query_by_record(record) self._parse_single_record(res, delete=True) - # TODO: - # def add_to_history(self, record: Servers.Record) -> None: - # functionally similar to remove action - # # needs to be called from controller against history tree, not current tree - # proxy_man = self._get_proxy_man() - # # proxy_man.append_row_to_history - # control_model = proxy_man.get_control() - # config_man = self.controller.get_config_man() - # config_man.update_history_file(control_model) - - def remove_from_history(self, record: Servers.Record) -> None: - """Fully unthreaded, just removes a row""" + def update_history(self) -> None: proxy_man = self._get_proxy_man() - proxy_man.remove_row_from_control(record) control_model = proxy_man.get_control() - config_man = self.controller.get_config_man() config_man.update_history_file(control_model) @@ -246,6 +233,17 @@ class ServerModelManager: self.first_iteration = False self.emitter.emit("servers_loaded_init") + def add_to_history(self, record: dict[str, Any]) -> None: + proxy_man = self._get_proxy_man() + row = Servers.parse_json([record]) + proxy_man.append_row_to_history(row[0]) + self.update_history() + + def remove_from_history(self, record: Servers.Record) -> None: + proxy_man = self._get_proxy_man() + proxy_man.remove_row_from_control(record) + self.update_history() + def add_by_str(self, addr: str) -> None: if addr.isdigit(): self.add_by_id(addr) diff --git a/dzgui/util/strings.py b/dzgui/util/strings.py index 22027cb..176d259 100644 --- a/dzgui/util/strings.py +++ b/dzgui/util/strings.py @@ -134,6 +134,7 @@ servers = { "Ctrl-m": "jump to maps field", "Ctrl-d": "select default LAN port", "Ctrl-n": "select custom LAN port", + "Ctrl-u": "connect to server from preconnect dialog", "Ctrl-i": "jump to IP insert field", "n": "navigate to next tab", "p": "navigate to previous tab",