91e75e620b
CI: cua-driver distro-compat matrix / debian:12 (glibc 2.36) (push) Has been cancelled
CI: SPDX Headers / Check SPDX headers (warn-only) (push) Has been cancelled
CD: Docs MCP Server / build (linux/amd64) (push) Has been cancelled
CD: Docs MCP Server / build (linux/arm64) (push) Has been cancelled
CD: Docs MCP Server / merge (push) Has been cancelled
CI: cua-driver distro-compat matrix / Resolve release version (push) Has been cancelled
CI: cua-driver distro-compat matrix / fedora:41 (glibc 2.40) (push) Has been cancelled
CI: cua-driver distro-compat matrix / rockylinux:9 (glibc 2.34) (push) Has been cancelled
CI: cua-driver distro-compat matrix / ubuntu:22.04 (glibc 2.35) (push) Has been cancelled
CI: cua-driver distro-compat matrix / ubuntu:24.04 (glibc 2.39) (push) Has been cancelled
CI: cua-driver distro-compat matrix / Distro compat summary (push) Has been cancelled
CI: Rust Linux unit / Rust Linux unit and compile (push) Has been cancelled
CI: Rust Windows unit / Rust Windows unit and compile (push) Has been cancelled
CI: Nix Linux Rust source / Nix / compositor build (push) Has been cancelled
CI: Nix Linux Rust source / Nix / driver package (push) Has been cancelled
CI: Nix Linux Rust source / Nix / Rust unit tests (push) Has been cancelled
37 lines
1.5 KiB
Python
37 lines
1.5 KiB
Python
import inspect
|
|
import platform
|
|
import sys
|
|
from typing import Optional
|
|
|
|
from computer_server.diorama.base import BaseDioramaHandler
|
|
from computer_server.diorama.diorama import Diorama
|
|
|
|
|
|
class MacOSDioramaHandler(BaseDioramaHandler):
|
|
"""Handler for Diorama commands on macOS, using local diorama module."""
|
|
|
|
async def diorama_cmd(self, action: str, arguments: Optional[dict] = None) -> dict:
|
|
if platform.system().lower() != "darwin":
|
|
return {"success": False, "error": "Diorama is only supported on macOS."}
|
|
try:
|
|
app_list = arguments.get("app_list") if arguments else None
|
|
if not app_list:
|
|
return {"success": False, "error": "Missing 'app_list' in arguments"}
|
|
diorama = Diorama(app_list)
|
|
interface = diorama.interface
|
|
if not hasattr(interface, action):
|
|
return {"success": False, "error": f"Unknown diorama action: {action}"}
|
|
method = getattr(interface, action)
|
|
# Remove app_list from arguments before calling the method
|
|
filtered_arguments = dict(arguments)
|
|
filtered_arguments.pop("app_list", None)
|
|
if inspect.iscoroutinefunction(method):
|
|
result = await method(**(filtered_arguments or {}))
|
|
else:
|
|
result = method(**(filtered_arguments or {}))
|
|
return {"success": True, "result": result}
|
|
except Exception as e:
|
|
import traceback
|
|
|
|
return {"success": False, "error": str(e), "trace": traceback.format_exc()}
|