76 lines
2.1 KiB
Python
76 lines
2.1 KiB
Python
from __future__ import annotations
|
|
|
|
import sys
|
|
|
|
|
|
def main() -> int:
|
|
"""Dispatch the common GUI path without importing every CLI operation."""
|
|
|
|
arguments = sys.argv[1:]
|
|
if not arguments or arguments == ["gui"]:
|
|
from .container_host import (
|
|
container_host_error,
|
|
repair_container_host_after_update,
|
|
)
|
|
from .paths import AppPaths
|
|
from .telemetry import initialize_shared_telemetry, shutdown_shared_telemetry
|
|
from .umu import provision_umu_for_startup
|
|
|
|
telemetry = None
|
|
telemetry_owner = False
|
|
try:
|
|
paths = AppPaths.from_environment()
|
|
telemetry, telemetry_owner = initialize_shared_telemetry(
|
|
paths,
|
|
session_metadata={"interface": "gui", "command": "gui"},
|
|
)
|
|
# Older installed releases cannot run a bootstrap step that only exists
|
|
# in their update payload. Their automatic restart enters here instead.
|
|
provision_umu_for_startup(paths)
|
|
container_host = repair_container_host_after_update(paths)
|
|
if container_host.repair_attempted and (
|
|
not container_host.ready
|
|
or container_host.broken_umu_profile_link
|
|
or container_host.repair_error is not None
|
|
):
|
|
print(
|
|
f"Warning: {container_host_error(container_host)}",
|
|
file=sys.stderr,
|
|
)
|
|
from .ui import run_dashboard
|
|
|
|
run_dashboard(paths)
|
|
except KeyboardInterrupt:
|
|
return 130
|
|
except (ValueError, OSError, RuntimeError) as exc:
|
|
if telemetry is not None:
|
|
telemetry.report_exception(
|
|
"launcher_exception",
|
|
exc,
|
|
metadata={"command": "gui"},
|
|
context={"operation": "launcher", "stage": "startup"},
|
|
)
|
|
print(f"Error: {exc}", file=sys.stderr)
|
|
return 1
|
|
except BaseException as exc:
|
|
if telemetry is not None:
|
|
telemetry.report_exception(
|
|
"launcher_exception",
|
|
exc,
|
|
metadata={"command": "gui"},
|
|
context={"operation": "launcher", "stage": "startup"},
|
|
severity="critical",
|
|
)
|
|
raise
|
|
finally:
|
|
if telemetry is not None and telemetry_owner:
|
|
shutdown_shared_telemetry(telemetry)
|
|
return 0
|
|
|
|
from .cli import main as cli_main
|
|
|
|
return cli_main(arguments, _manage_telemetry=True)
|
|
|
|
|
|
raise SystemExit(main())
|