From 01977b2e2afc7a75756c763f612fad43b1446a73 Mon Sep 17 00:00:00 2001 From: Qubasa Date: Tue, 2 Jan 2024 06:23:55 +0100 Subject: [PATCH] vm-manager: More error handling --- pkgs/clan-cli/clan_cli/history/add.py | 5 +-- .../clan-vm-manager/clan_vm_manager/models.py | 39 +++++++++++-------- .../clan_vm_manager/windows/overview.py | 1 + 3 files changed, 25 insertions(+), 20 deletions(-) diff --git a/pkgs/clan-cli/clan_cli/history/add.py b/pkgs/clan-cli/clan_cli/history/add.py index 7efa9612c..0682208b9 100644 --- a/pkgs/clan-cli/clan_cli/history/add.py +++ b/pkgs/clan-cli/clan_cli/history/add.py @@ -10,7 +10,7 @@ from clan_cli.flakes.inspect import FlakeConfig, inspect_flake from ..clan_uri import ClanURI from ..dirs import user_history_file from ..locked_open import read_history_file, write_history_file - +from ..errors import ClanError class EnhancedJSONEncoder(json.JSONEncoder): def default(self, o: Any) -> Any: @@ -56,8 +56,7 @@ def list_history() -> list[HistoryEntry]: parsed[i] = merge_dicts(p, p["settings"]) logs = [HistoryEntry(**p) for p in parsed] except (json.JSONDecodeError, TypeError) as ex: - print("Failed to load history. Invalid JSON.") - print(f"{user_history_file()}: {ex}") + raise ClanError(f"History file at {user_history_file()} is corrupted") from ex return logs diff --git a/pkgs/clan-vm-manager/clan_vm_manager/models.py b/pkgs/clan-vm-manager/clan_vm_manager/models.py index 2605a6797..87b026b5c 100644 --- a/pkgs/clan-vm-manager/clan_vm_manager/models.py +++ b/pkgs/clan-vm-manager/clan_vm_manager/models.py @@ -4,7 +4,9 @@ from pathlib import Path from typing import Any import gi -from clan_cli import history +from clan_cli.history.list import list_history + +from .errors.show_error import show_error_dialog gi.require_version("GdkPixbuf", "2.0") @@ -64,24 +66,27 @@ def get_initial_vms( ) -> list[VM]: vm_list = [] - # Execute `clan flakes add ` to democlan for this to work - for entry in history.list.list_history(): - icon = assets.loc / "placeholder.jpeg" - if entry.flake.icon is not None: - icon = entry.flake.icon + try: + # Execute `clan flakes add ` to democlan for this to work + for entry in list_history(): + icon = assets.loc / "placeholder.jpeg" + if entry.flake.icon is not None: + icon = entry.flake.icon - status = False - if entry.flake.flake_url in running_vms: - status = True + status = False + if entry.flake.flake_url in running_vms: + status = True - base = VMBase( - icon=icon, - name=entry.flake.clan_name, - url=entry.flake.flake_url, - status=status, - _flake_attr=entry.flake.flake_attr, - ) - vm_list.append(VM(base=base)) + base = VMBase( + icon=icon, + name=entry.flake.clan_name, + url=entry.flake.flake_url, + status=status, + _flake_attr=entry.flake.flake_attr, + ) + vm_list.append(VM(base=base)) + except Exception as e: + show_error_dialog(e) # start/end slices can be used for pagination return vm_list[start:end] diff --git a/pkgs/clan-vm-manager/clan_vm_manager/windows/overview.py b/pkgs/clan-vm-manager/clan_vm_manager/windows/overview.py index d4d844275..0f2d2737e 100644 --- a/pkgs/clan-vm-manager/clan_vm_manager/windows/overview.py +++ b/pkgs/clan-vm-manager/clan_vm_manager/windows/overview.py @@ -33,6 +33,7 @@ class OverviewWindow(Gtk.ApplicationWindow): set_selected=self.set_selected, selected_vm=None, ) + # Add named stacks self.stack.add_titled(clan_list, "list", "List") self.stack.add_titled(