diff --git a/dzgui/api/servers.py b/dzgui/api/servers.py index fce937b..60f364f 100644 --- a/dzgui/api/servers.py +++ b/dzgui/api/servers.py @@ -14,6 +14,7 @@ from typing import Any, Optional, TYPE_CHECKING, Union from dzgui.api.bm import map_id_to_record from dzgui.const.constants import APP_NAME, REQUEST_TIMEOUT from dzgui.const.endpoints import STEAM_SERVERS +from dzgui.util.format import format_exception from dzgui.util import strings import a2s @@ -272,8 +273,9 @@ def source_info_to_dict(ip: str, qport: int, info: "SourceInfo") -> dict[str, An res["ping"] = ping return res except Exception as e: - # TODO: generalized function - logger.critical(f"{type(e).__name__}: {e} ({ip}:{qport})") + msg = format_exception(e) + msg += f" ({ip}:{qport})" + logger.critical(msg) raise e diff --git a/dzgui/managers/connection.py b/dzgui/managers/connection.py index 9fefb74..7570dfd 100644 --- a/dzgui/managers/connection.py +++ b/dzgui/managers/connection.py @@ -238,8 +238,7 @@ class ConnectionManager: def query_modlist_and_present(self, record: Servers.Record) -> None: try: mods = self._query_modlist(record) - except Exception as e: - print(f"{type(e).__name__}: {e}") + except Exception: self.thread_man.set_cleanup_func( StoredFunc(self._server_timeout), destroy_first=True ) diff --git a/dzgui/util/format.py b/dzgui/util/format.py index 871e9a7..d5420cb 100644 --- a/dzgui/util/format.py +++ b/dzgui/util/format.py @@ -83,3 +83,7 @@ def format_player_count(model: Gtk.TreeModel | None, control: list) -> str: def embolden(text: str) -> str: return f"{text}" + + +def format_exception(e: Exception) -> str: + return f"{type(e).__name__}: {e}" diff --git a/dzgui/util/strings.py b/dzgui/util/strings.py index bc6904c..dad40fa 100644 --- a/dzgui/util/strings.py +++ b/dzgui/util/strings.py @@ -181,7 +181,7 @@ filter_lowpop = "Low pop" filter_nonascii = "Non-ASCII" filter_duplicate = "Duplicate" filter_official = "Official" -filter_unofficial = "Unoffic." +filter_unofficial = "Unofficial" filter_modded = "Modded" # maps diff --git a/dzgui/views/components/filter_panel.py b/dzgui/views/components/filter_panel.py index 26f4974..c79ee0c 100644 --- a/dzgui/views/components/filter_panel.py +++ b/dzgui/views/components/filter_panel.py @@ -11,6 +11,7 @@ from dzgui.const.constants import ( ) from dzgui.const.enum import FilterMode from dzgui.model.servers import ServerModelManager +from dzgui.util.format import format_exception from dzgui.util.strings import all_maps from dzgui.views.components.maps_combo import MapsCombo from dzgui.views.components.labels import BoldLabel @@ -333,6 +334,10 @@ class FilterPanel(Gtk.Box): self.emitter.emit("map_selection_changed", name) def set_filters(self, filters: dict[str, bool]) -> None: - for check in self.button_grid.checks: - label = check.get_label() - check.set_active(filters[label]) + try: + for check in self.button_grid.checks: + label = check.get_label() + check.set_active(filters[label]) + except Exception as e: + msg = format_exception(e) + logger.warning(msg) diff --git a/dzgui/views/dialogs/boot.py b/dzgui/views/dialogs/boot.py index 974239b..4dc5821 100644 --- a/dzgui/views/dialogs/boot.py +++ b/dzgui/views/dialogs/boot.py @@ -14,6 +14,7 @@ from dzgui.init.update import check_updates from dzgui.const.constants import EXPAND, FILL from dzgui.managers.threading import call_on_thread, StoredFunc, ThreadingManager from dzgui.strings import preboot +from dzgui.util.format import format_exception from dzgui.util.strings import dialog_header from dzgui.util.symlink import rebuild_symlinks from dzgui.views.components.buttons import ClipboardButton @@ -175,8 +176,7 @@ class BootDialog(Gtk.Dialog): self.thread_man.set_cleanup_func(callback) except Exception as e: self.failed = True - # TODO: generic exception wrapper - self.exception = f"{type(e).__name__}: {e}" + self.exception = format_exception(e) callback = StoredFunc(self.update_status, Success.FAIL) self.thread_man.set_cleanup_func(callback)