diff --git a/dzgui/controllers/mc.py b/dzgui/controllers/mc.py index 8c7e533..f22d1f8 100644 --- a/dzgui/controllers/mc.py +++ b/dzgui/controllers/mc.py @@ -597,6 +597,10 @@ class Controller(GObject.GObject): saved_tree = self.get_servers().get_saved() ServerModelManager(self, saved_tree).remove_by_record(record) + def remove_from_history(self, record: "Record") -> None: + tv = self.get_active_treeview() + ServerModelManager(self, tv).remove_from_history(record) + def connect_by_str(self, addr: str) -> None: if addr.isdigit(): config_man = self.get_config_man() diff --git a/dzgui/managers/config.py b/dzgui/managers/config.py index 679a39d..2dfa6d1 100644 --- a/dzgui/managers/config.py +++ b/dzgui/managers/config.py @@ -48,6 +48,10 @@ class ConfigManager: ips.append(record) self.update_config(Preferences.IP_LIST, ips) + def remove_history_server(self, record: str) -> None: + print(record) + pass + def remove_saved_server(self, record: str) -> None: ips = self.lookup(Preferences.IP_LIST) ips.remove(record) diff --git a/dzgui/managers/contextmenu.py b/dzgui/managers/contextmenu.py index 4c92a9f..a062c6d 100644 --- a/dzgui/managers/contextmenu.py +++ b/dzgui/managers/contextmenu.py @@ -68,10 +68,8 @@ class ContextMenuManager: record = self.treeview.get_record() self.controller.refresh_players(record) case ContextMenu.REMOVE_HISTORY: - print("DEBUG: unimplemented") - # update history model, update tab label, pop off of queue, write new list into file - # see dq.py - pass + record = self.treeview.get_record() + self.controller.remove_from_history(record) case ContextMenu.REMOVE_SERVER: record = self.treeview.get_record() self.controller.remove_by_record(record) diff --git a/dzgui/model/proxy_model.py b/dzgui/model/proxy_model.py index d7cea56..4334768 100644 --- a/dzgui/model/proxy_model.py +++ b/dzgui/model/proxy_model.py @@ -1,5 +1,6 @@ import re +from collections import deque from typing import Any, Optional, TYPE_CHECKING from warnings import deprecated @@ -51,6 +52,7 @@ class ProxyModelManager: for record in self.control_model: if row[7] == record[7] and row[8] == record[8]: self.control_model.remove(record) + break self.wipe_cache() self.filter(FilterMode.INITIAL, skip_cache=True) @@ -59,6 +61,23 @@ 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) + + # TODO: consolidate with remove_row_from_control() + def remove_from_history(self, record: "Record") -> None: + print(record) + addr = f"{record.ip}:{record.gameport}" + qport = record.qport + for record in self.control_model: + if addr == record[7] and qport == record[8]: + self.control_model.remove(record) + break + self.wipe_cache() + self.filter(FilterMode.INITIAL, skip_cache=True) + def clear_proxy_model(self) -> None: self.proxy_model.clear() diff --git a/dzgui/model/servers.py b/dzgui/model/servers.py index 1149a0d..8be2c2b 100644 --- a/dzgui/model/servers.py +++ b/dzgui/model/servers.py @@ -211,6 +211,33 @@ class ServerModelManager: res = Servers.query_by_record(record) self._parse_single_record(res, delete=True) + def remove_from_history(self, record: Servers.Record) -> None: + """Fully unthreaded, just removes a row""" + port = record.ip + gport = record.gameport + qport = record.qport + + fqip = f"{port}:{gport}:{qport}" + config_man = self.controller.get_config_man() + config_man.remove_history_server(fqip) + + proxy_man = self._get_proxy_man() + proxy_man.remove_from_history(record) + control_model = proxy_man.get_control() + + self._sort_unique_maps(control_model) + proxy = proxy_man.get_proxy_model() + self.tv.set_model(proxy) + + self.emitter.emit("servers_loaded", self.enum) + + filter_man = self.tv.get_filter_man() + maps = self._get_new_maps() + filter_man.set_unique_maps(maps) + + self.first_iteration = False + self.emitter.emit("servers_loaded_init") + def add_by_str(self, addr: str) -> None: if addr.isdigit(): self.add_by_id(addr)