diff --git a/dzgui/api/mods.py b/dzgui/api/mods.py index c04f1fc..bcbd1c6 100644 --- a/dzgui/api/mods.py +++ b/dzgui/api/mods.py @@ -102,7 +102,7 @@ def get_delimited_mods(steam_path: Path) -> list[Any]: size = get_mod_size(mod) # NOTE: final col is cell renderer highlight toggle clean.append([meta.name, symlink, mod_dir, size, False]) - clean.sort(key=lambda row: row[0]) + clean.sort(key=lambda row: row[0].casefold()) return clean diff --git a/dzgui/const/enum.py b/dzgui/const/enum.py index 254e3fd..712d4e2 100644 --- a/dzgui/const/enum.py +++ b/dzgui/const/enum.py @@ -1,5 +1,5 @@ from enum import Enum -from typing import Self +from typing import Any, Self from dzgui.util import strings @@ -47,7 +47,7 @@ class FilterMode(Enum): class EnumWithAttrs(Enum): - def __new__(cls, *args, **kwargs) -> Self: + def __new__(cls, *args: Any, **kwargs: Any) -> Self: value = len(cls.__members__) + 1 obj = object.__new__(cls) obj._value_ = value diff --git a/dzgui/managers/mods.py b/dzgui/managers/mods.py index 46dff80..9e09abf 100644 --- a/dzgui/managers/mods.py +++ b/dzgui/managers/mods.py @@ -14,7 +14,7 @@ from dzgui.api.mods import ( from dzgui.const.constants import APP_NAME, APPID_DAYZ, APPID_DAYZ_EXP from dzgui.const.enum import Preferences from dzgui.managers.threading import call_on_thread, StoredFunc, ThreadingManager -from dzgui.model.model_factory import ModelFactory +from dzgui.model.model_factory import FastInsertListStore, ModelFactory from dzgui.util.format import format_mods import dzgui.api.pefile as PeFile @@ -44,11 +44,13 @@ class ModManager: self.path = controller.query_config(Preferences.DEFAULT) self.treeview = self.controller.get_modtreeview() + self.store: FastInsertListStore + self.thread_man = ThreadingManager(controller) self._get_mods() @call_on_thread("getting mods") - def _get_mods(self) -> list: + def _get_mods(self) -> None: mods = get_delimited_mods(self.path) if len(mods) < 1: msg = self.format_mod_statusbar() @@ -58,13 +60,13 @@ class ModManager: func = StoredFunc(self._on_mods_loaded, mods) self.thread_man.set_cleanup_func(func) - def _on_mods_loaded(self, mods: list[int]) -> None: - model = ModelFactory().make_mod_store() - model.extend(mods) - self.treeview.set_model(model) + def _on_mods_loaded(self, mods: list[list[str, str, str, float, bool]]) -> None: + self.store = ModelFactory().make_mod_store() + self.store.extend(mods) + self.treeview.set_model(self.store) msg = self.format_mod_statusbar() - mods = len(model) - self.emitter.emit("mods_updated", msg, mods) + total_mods = len(self.store) + self.emitter.emit("mods_updated", msg, total_mods) @call_on_thread("deleting mods") def delete_mods(self) -> None: @@ -87,7 +89,7 @@ class ModManager: mod = model.get(tree_iter, 2)[0] return mod, tree_iter - def delete_single_mod(self, tree_path: Gtk.TreePath) -> None: + def delete_single_mod(self, tree_path: Gtk.TreePath) -> Gtk.TreeIter: mod, _iter = self.get_mod_from_tree_path(tree_path) steam_path = Path(self.path) @@ -111,7 +113,10 @@ class ModManager: def _on_mods_deleted(self, iters: list[Gtk.TreeIter]) -> None: for _iter in iters: - self.treeview.get_model().remove(_iter) + self.store.remove(_iter) + #model = self.treeview.get_model() + #if model: + # model.remove(_iter) # FIXME: do not remove from model interface directly remove_stale_signatures(self.prefs.paths.config, self.prefs.paths.version) mods = len(self.treeview.get_model()) msg = self.format_mod_statusbar() diff --git a/dzgui/util/_json.py b/dzgui/util/_json.py index 4a46bdf..bc8f70e 100644 --- a/dzgui/util/_json.py +++ b/dzgui/util/_json.py @@ -1,16 +1,17 @@ import json from pathlib import Path +from typing import Any -def read_json(path: Path) -> dict: +def read_json(path: Path) -> Any: try: with open(path, "r") as infile: try: data = json.load(infile) + return data except json.decoder.JSONDecodeError as e: raise e except OSError as e: raise e - return data def write_json(data: dict, path: Path) -> None: diff --git a/dzgui/views/trees/tree_servers.py b/dzgui/views/trees/tree_servers.py index 19492a2..3866126 100644 --- a/dzgui/views/trees/tree_servers.py +++ b/dzgui/views/trees/tree_servers.py @@ -2,7 +2,7 @@ import logging import threading from queue import Queue -from typing import Any, Optional, Self +from typing import Any, Optional, Self, Union from warnings import deprecated from dzgui.api.servers import ping, Record @@ -321,7 +321,7 @@ class ServerTreeView(ContextMixin, TreeView): def set_loaded(self, status: bool) -> None: self.loaded = status - def get_model_and_control_model(self) -> tuple["FastInsertListStore", list[Any]]: + def get_model_and_control_model(self) -> tuple[Union["FastInsertListStore", None], list[Any]]: model = self.get_model() control = self.proxy_man.get_control() return model, control