61 lines
1.5 KiB
Python
61 lines
1.5 KiB
Python
"""Macro recording and playback endpoints."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from fastapi import APIRouter, HTTPException
|
|
from pydantic import BaseModel
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
class MacroName(BaseModel):
|
|
name: str
|
|
|
|
|
|
@router.get("/")
|
|
async def list_macros():
|
|
from Project.Sanad.main import macro_play
|
|
if macro_play is None:
|
|
return {"macros": []}
|
|
return {"macros": macro_play.list_macros()}
|
|
|
|
|
|
@router.get("/status")
|
|
async def macro_status():
|
|
from Project.Sanad.main import macro_rec, macro_play
|
|
return {
|
|
"recorder": macro_rec.status() if macro_rec else {},
|
|
"player": macro_play.status() if macro_play else {},
|
|
}
|
|
|
|
|
|
@router.post("/record/start")
|
|
async def start_recording(payload: MacroName):
|
|
from Project.Sanad.main import macro_rec
|
|
if macro_rec is None:
|
|
raise HTTPException(503, "Macro recorder not available.")
|
|
return macro_rec.start(payload.name)
|
|
|
|
|
|
@router.post("/record/stop")
|
|
async def stop_recording():
|
|
import asyncio
|
|
from Project.Sanad.main import macro_rec
|
|
if macro_rec is None:
|
|
raise HTTPException(503, "Macro recorder not available.")
|
|
return await asyncio.to_thread(macro_rec.stop)
|
|
|
|
|
|
@router.post("/play")
|
|
async def play_macro(payload: MacroName):
|
|
from Project.Sanad.main import brain
|
|
return await brain.play_macro(payload.name)
|
|
|
|
|
|
@router.post("/stop")
|
|
async def stop_macro():
|
|
from Project.Sanad.main import macro_play
|
|
if macro_play:
|
|
macro_play.stop()
|
|
return {"ok": True}
|