mirror of
https://github.com/trycua/computer.git
synced 2025-12-31 10:29:59 -06:00
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()}
|