diff --git a/dzgui/api/servers.py b/dzgui/api/servers.py index 7debbf3..ea30a95 100644 --- a/dzgui/api/servers.py +++ b/dzgui/api/servers.py @@ -9,7 +9,7 @@ import subprocess import threading from dataclasses import dataclass -from typing import Optional, Union +from typing import Optional, TYPE_CHECKING, Union from dzgui.api.bm import map_id_to_record from dzgui.const.constants import REQUEST_TIMEOUT @@ -19,6 +19,8 @@ from dzgui.util import strings import a2s import dayzquery +if TYPE_CHECKING: + from dayzquery import DayzMod logger = logging.getLogger(__name__) logging.getLogger("a2s").setLevel(logging.ERROR) @@ -425,7 +427,7 @@ def validate_ip(addr: str) -> Record: return record -def get_rules(record: Record) -> list[int]: +def get_rules(record: Record) -> list["DayzMod"]: ip = record.ip qport = record.qport try: diff --git a/dzgui/controllers/mc.py b/dzgui/controllers/mc.py index a63166c..52ebc5a 100644 --- a/dzgui/controllers/mc.py +++ b/dzgui/controllers/mc.py @@ -104,7 +104,7 @@ class StoredFunc: class Controller(GObject.GObject): def __init__(self) -> None: - self.dist_cache: dict[str, "Haversine", "ServerTab"] = {} + self.dist_cache: dict[str, "Haversine"] = {} self.mediator = AppNavigation() self.prefs: UserPrefs @@ -154,7 +154,7 @@ class Controller(GObject.GObject): self.notes_man = NoteManager(self, prefs.paths.notes) self.prefs = prefs - def query_config(self, key: Preferences) -> str | bool | list: + def query_config(self, key: Preferences) -> Any: return self.config_man.lookup(key) def is_auto_install(self) -> bool: @@ -286,7 +286,8 @@ class Controller(GObject.GObject): it = mod.iter path = model.get_path(it) model[path][4] = None - self.mediator.modtreeview.set_cursor(0) + path = Gtk.TreePath.new_from_indices([0]) + self.mediator.modtreeview.set_cursor(path) def highlight_stale_cleanup(self, stale_mods: list) -> None: """Manipulates attached ListStore in the main event loop""" @@ -401,7 +402,7 @@ class Controller(GObject.GObject): ### END LOAD MODS LOGIC - def get_mod_store(self) -> Gtk.ListStore: + def get_mod_store(self) -> Gtk.TreeModel | None: return self.mediator.modtreeview.get_model() # TODO: delegate to configman @@ -483,8 +484,8 @@ class Controller(GObject.GObject): def get_statusbar(self) -> "Statusbar": return self.mediator.statusbar - def get_proxy_man(self) -> "ProxyModelManager": - return self.proxy_man + #def get_proxy_man(self) -> "ProxyModelManager": + # return self.proxy_man def populate_model(self, tv: "ServerTreeView") -> None: # NOTE: skip on previously loaded tabs @@ -495,19 +496,16 @@ class Controller(GObject.GObject): self.mediator.statusbar.set_text("", "") ServerModelManager(self, tv).load() - def get_dist_cache(self) -> dict[str, "Haversine", "ServerTab"]: + def get_dist_cache(self) -> dict[str, "Haversine"]: return self.dist_cache - def get_filters(self) -> list: - return self.mediator.filters.get_filters() - def get_map_store(self) -> Gtk.ListStore: filter_man = self.get_filter_man() return filter_man.get_map_store() - def get_selected_map(self) -> str: - filter_man = self.get_filter_man() - return filter_man.get_selected_map() + #def get_selected_map(self) -> str: + # filter_man = self.get_filter_man() + # return filter_man.get_selected_map() def get_enabled_filters(self) -> dict: filter_man = self.get_filter_man() @@ -553,7 +551,7 @@ class Controller(GObject.GObject): def get_servers(self) -> "ServerNotebook": return self.mediator.servers - def get_server_notebook(self) -> "Notebook": + def get_server_notebook(self) -> Gtk.Notebook: return self.mediator.servers.notebook def get_window(self) -> "OuterWindow": @@ -568,8 +566,8 @@ class Controller(GObject.GObject): return False return True - def is_in_favs(self) -> bool: - return self.config_man.is_in_favs() + #def is_in_favs(self) -> bool: + # return self.config_man.is_in_favs() def get_config_man(self) -> ConfigManager: return self.config_man diff --git a/dzgui/managers/config.py b/dzgui/managers/config.py index 7437391..7c39d2b 100644 --- a/dzgui/managers/config.py +++ b/dzgui/managers/config.py @@ -88,9 +88,9 @@ class ConfigManager: if res is True: self.update_config(key, text) else: - self.thread_man.set_cleanup_func(StoredFunc( - lambda: self.emitter.emit("api_change_failed") - )) + self.thread_man.set_cleanup_func( + StoredFunc(lambda: self.emitter.emit("api_change_failed")) + ) return def get_favorites(self) -> list[str]: @@ -113,7 +113,7 @@ class ConfigManager: def enum_to_key(self, enum: Preferences) -> str: return enum.dict["key"] - def get_client_index(client: str) -> int: + def get_client_index(self, client: str) -> int: if client == STEAM_CMD: return 0 if client == FLATPAK_RUN_CMD: diff --git a/dzgui/managers/contextmenu.py b/dzgui/managers/contextmenu.py index 0e9de69..1e2a8eb 100644 --- a/dzgui/managers/contextmenu.py +++ b/dzgui/managers/contextmenu.py @@ -19,12 +19,13 @@ logger = logging.getLogger(__name__) if TYPE_CHECKING: from dzgui.controllers.mc import Controller + from dzgui.views.trees.tree_servers import ServerTreeView class ContextMenuManager: def __init__( self, - treeview: Gtk.TreeView, + treeview: "ServerTreeView", controller: "Controller", ) -> None: self.controller = controller diff --git a/dzgui/model/model_factory.py b/dzgui/model/model_factory.py index 163116c..75e45e8 100644 --- a/dzgui/model/model_factory.py +++ b/dzgui/model/model_factory.py @@ -1,5 +1,5 @@ from dataclasses import dataclass -from typing import Any, Sequence +from typing import Any, Sequence, TYPE_CHECKING from dzgui.const.enum import HELP_MENU_ROWS from dzgui.util.redact import redact_log @@ -17,6 +17,10 @@ GTYPE_TO_PYTHON = { } +if TYPE_CHECKING: + from pathlib import Path + + @dataclass(slots=True, frozen=True) class ServerCols: name: str @@ -120,7 +124,7 @@ class ModelFactory: def __init__(self) -> None: pass - def new_model_from_logfile(self, path: str) -> FastInsertListStore: + def new_model_from_logfile(self, path: "Path") -> FastInsertListStore: store = self.make_log_store() with open(path, "r") as f: lines = [line.split(delimiter) for line in f.read().splitlines()] diff --git a/dzgui/model/proxy_model.py b/dzgui/model/proxy_model.py index 053f15e..9cbc7da 100644 --- a/dzgui/model/proxy_model.py +++ b/dzgui/model/proxy_model.py @@ -246,7 +246,7 @@ class ProxyModelManager: def get_control(self) -> list: return self.control_model - def wipe_cache(self, full=False) -> None: + def wipe_cache(self, full: bool = False) -> None: self.filtered = None self.filter_cache = {} diff --git a/dzgui/model/servers.py b/dzgui/model/servers.py index 61bd96c..2a1ba42 100644 --- a/dzgui/model/servers.py +++ b/dzgui/model/servers.py @@ -251,7 +251,9 @@ class ServerModelManager: proxy_man = self._get_proxy_man() proxy_man.update_playercount(self.playercount) - def _parse_single_record(self, response: dict, delete: bool = False) -> None: + def _parse_single_record( + self, response: dict[Any, Any] | None, delete: bool = False + ) -> None: self.preserve_on_fail = True if response is None: self.thread_man.set_cleanup_func(StoredFunc(self._cleanup_on_failure)) diff --git a/dzgui/views/components/buttons.py b/dzgui/views/components/buttons.py index bf85c21..390c0dc 100644 --- a/dzgui/views/components/buttons.py +++ b/dzgui/views/components/buttons.py @@ -117,7 +117,7 @@ class RefreshButton(IconTextButton): self.show_time(True) GLib.timeout_add_seconds(1, self.decrement) - def decrement(self) -> "GLib.SOURCE_REMOVE" | Literal[True]: + def decrement(self) -> type[GLib.SOURCE_REMOVE] | Literal[True]: self.time -= 1 if self.time == 0: self.time = 30 diff --git a/dzgui/views/components/connect_panel.py b/dzgui/views/components/connect_panel.py index e75c45c..1e9dd56 100644 --- a/dzgui/views/components/connect_panel.py +++ b/dzgui/views/components/connect_panel.py @@ -102,10 +102,10 @@ class LanPanel(Gtk.Frame): if self.default_radio.get_active(): port = 27016 else: - port = self.entry.get_text() + port = int(self.entry.get_text()) abort = self.early_abort.get_active() smm = ServerModelManager(self.controller, self.controller.get_active_treeview()) - smm.dump_lan(int(port), abort) + smm.dump_lan(port, abort) def _on_radio_toggled(self, button: Gtk.RadioButton) -> None: state = button.get_active() @@ -132,6 +132,7 @@ class FavPanel(Gtk.Frame): emitter = self.controller.get_emitter() emitter.connect("fav_server_changed", self._on_fav_server_changed) + # TODO: do not return a None, None tuple self.server_name, self.server_ip = ( self.controller.get_config_man().get_favorite() ) diff --git a/dzgui/views/components/right_panel.py b/dzgui/views/components/right_panel.py index 73610cb..79c4379 100644 --- a/dzgui/views/components/right_panel.py +++ b/dzgui/views/components/right_panel.py @@ -16,7 +16,7 @@ from gi.repository import Gtk, Gdk, GLib # noqa E402 if TYPE_CHECKING: from dzgui.controllers.mc import Controller from dzgui.controllers.emitter import Emitter - from dzgui.controllers.views.trees.tree_servers import ServerTreeView + from dzgui.views.trees.tree_servers import ServerTreeView class RightPanel(Gtk.Box): diff --git a/dzgui/views/dialogs/note.py b/dzgui/views/dialogs/note.py index 1057bf5..bda0b75 100644 --- a/dzgui/views/dialogs/note.py +++ b/dzgui/views/dialogs/note.py @@ -62,7 +62,7 @@ class NoteDialog(GenericDialog): if len(entry.get_text()) == 0: self.ok.set_sensitive(False) - def validate(self, text: str) -> None: + def validate(self, text: str) -> bool: if text.isspace(): sensitive = False else: diff --git a/dzgui/views/dialogs/servers.py b/dzgui/views/dialogs/servers.py index 7b1a883..a0382e0 100644 --- a/dzgui/views/dialogs/servers.py +++ b/dzgui/views/dialogs/servers.py @@ -47,7 +47,7 @@ class ServerDialog(GenericDialog): # def pack(self, widget: Gtk.Widget) -> None: # self.content.pack_start(widget, EXPAND, FILL, NO_PADDING) - def _on_keypress(self, view: Gtk.TreeView, event: Gdk.EventKey) -> None: + def _on_keypress(self, view: Gtk.TreeView, event: Gdk.EventKey) -> bool: # NOTE: ESC normally unfocuses treeview instead of destroying dialog if event.keyval == Gdk.KEY_Escape: self.destroy() diff --git a/dzgui/views/trees/tree_log.py b/dzgui/views/trees/tree_log.py index 0cd093f..89a240f 100644 --- a/dzgui/views/trees/tree_log.py +++ b/dzgui/views/trees/tree_log.py @@ -14,6 +14,7 @@ gi.require_version("Gtk", "3.0") from gi.repository import Gtk, GLib, Gdk, GObject, Pango # noqa E402 if TYPE_CHECKING: + from pathlib import Path from dzgui.controllers.mc import Controller logger = logging.getLogger(__name__) @@ -49,7 +50,7 @@ class LogTreeView(ContextMixin, TreeView): self.connect("button-press-event", self._on_log_buttonpress) self.connect("key-press-event", self._on_log_keypress) - def populate_log(self, filepath: str) -> None: + def populate_log(self, filepath: "Path") -> None: model = ModelFactory().new_model_from_logfile(filepath) _filter = model.filter_new() _filter.set_visible_func(self._filter_rows) diff --git a/dzgui/views/trees/tree_servers.py b/dzgui/views/trees/tree_servers.py index 1bd2f84..6b96586 100644 --- a/dzgui/views/trees/tree_servers.py +++ b/dzgui/views/trees/tree_servers.py @@ -113,7 +113,7 @@ class ServerTreeView(ContextMixin, TreeView): self.connect("query-tooltip", self._on_tooltip) # TODO: why is this being saved? - self.thread = None + # self.thread = None def _on_tooltip( self, @@ -153,7 +153,7 @@ class ServerTreeView(ContextMixin, TreeView): def get_proxy_man(self) -> ProxyModelManager: return self.proxy_man - def get_enum(self) -> None: + def get_enum(self) -> ServerTab: return self.enum def _on_map(self, widget: Self) -> None: @@ -202,12 +202,12 @@ class ServerTreeView(ContextMixin, TreeView): return enum = self.get_enum() - self.thread = threading.Thread( + thread = threading.Thread( daemon=True, target=CalcDist, args=(record.ip, enum, self.queue, self.controller), ) - self.thread.start() + thread.start() def _check_result_queue(self) -> Literal[True]: latest_result = None @@ -281,7 +281,7 @@ class ServerTreeView(ContextMixin, TreeView): record = self.get_record() self.controller.connect_by_record(record) - def _parent_selection_changed(self, base_class: TreeView, sel: Gtk.TreeSelection): + def _parent_selection_changed(self, base_class: TreeView, sel: Gtk.TreeSelection) -> None: if self.loaded is False: return self.start_distcalc() @@ -315,7 +315,7 @@ class ServerTreeView(ContextMixin, TreeView): self.loaded = status @staticmethod - def ping_server(model, _iter: Gtk.TreeIter, ip: str, qport: int, ping_column: int): + def ping_server(model, _iter: Gtk.TreeIter, ip: str, qport: int, ping_column: int) -> None: _ping = ping(ip, qport) GLib.idle_add(lambda: model.set(_iter, ping_column, _ping)) @@ -326,7 +326,7 @@ class ServerTreeView(ContextMixin, TreeView): model: Gtk.TreeModel, _iter: Gtk.TreeIter, data: Any, - ): + ) -> None: addr_column = 7 qport_column = 8