error handling. add: dialog

This commit is contained in:
Johannes Kirschbauer
2023-12-30 10:41:33 +01:00
parent 44d269fcc0
commit 7f604a41f2
4 changed files with 40 additions and 31 deletions

View File

@@ -0,0 +1,18 @@
#!/usr/bin/env python3
from typing import Literal, Optional, Union
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk
from clan_cli.errors import ClanError
Severity = Union[Literal["Error"], Literal["Warning"], Literal["Info"], str]
def show_error_dialog(error: ClanError, severity: Optional[Severity] = "Error") -> None:
message = str(error)
dialog = Gtk.MessageDialog(None, 0, Gtk.MessageType.ERROR, Gtk.ButtonsType.CLOSE, severity)
print("error:", message)
dialog.format_secondary_text(message)
dialog.run()
dialog.destroy()

View File

@@ -5,7 +5,6 @@ from gi.repository import GdkPixbuf, Gtk
from ..interfaces import Callbacks
from ..models import VMBase
class ClanEditForm(Gtk.ListBox):
def __init__(self, *, selected: VMBase | None) -> None:
super().__init__()

View File

@@ -1,11 +1,13 @@
from collections.abc import Callable
from typing import Any
from clan_cli.errors import ClanError
import gi
from clan_cli.clan_uri import ClanURI
from clan_cli.history.add import add_history, list_history
from clan_vm_manager import assets
from clan_vm_manager.errors.show_error import show_error_dialog
from ..interfaces import Callbacks, InitialJoinValues
@@ -73,20 +75,25 @@ class Trust(Gtk.Box):
self.set_center_widget(layout)
def on_trust(self, widget: Gtk.Widget) -> None:
uri = self.url or ClanURI(self.entry.get_text())
print(f"trusted: {uri}")
add_history(uri)
history = list_history()
found = filter(lambda item: item.flake.flake_url == uri.get_internal(), history)
if found:
[item] = found
self.stack.add_titled(
Details(url=uri.get_internal(), description=item.flake.description),
"details",
"Details",
)
self.show_next()
self.stack.set_visible_child_name("details")
try:
uri = self.url or ClanURI(self.entry.get_text())
print(f"trusted: {uri}")
add_history(uri)
history = list_history()
found = filter(lambda item: item.flake.flake_url == uri.get_internal(), history)
if found:
[item] = found
self.stack.add_titled(
Details(url=uri.get_internal(), description=item.flake.description),
"details",
"Details",
)
self.show_next()
self.stack.set_visible_child_name("details")
except ClanError as e:
show_error_dialog(e)
class Details(Gtk.Box):
@@ -152,7 +159,7 @@ class Details(Gtk.Box):
def on_join(self, widget: Gtk.Widget) -> None:
# TODO: @Qubasa
raise Exception("Not ready yet.")
show_error_dialog(ClanError("Feature not ready yet."), "Info")
class JoinWindow(Gtk.ApplicationWindow):
@@ -177,27 +184,12 @@ class JoinWindow(Gtk.ApplicationWindow):
self.stack = Gtk.Stack()
# If the initial url is not set, the user must provide one
# if initial_values.url is None:
# self.stack.add_titled(
# UrlInput(
# initial_values, stack=self.stack
# ),
# "URL",
# "url",
# )
print("initial_values", initial_values)
self.stack.add_titled(
Trust(initial_values, show_next=self.show_details, stack=self.stack),
"trust",
"Trust",
)
# self.stack.add_titled(
# self.details,
# "details",
# "Details",
# )
vbox.add(self.stack)