71 lines
2.2 KiB
Rust
71 lines
2.2 KiB
Rust
|
|
//! Lua bindings for the macro recorder.
|
||
|
|
//!
|
||
|
|
//! Usage from Lua:
|
||
|
|
//! jarvis.macros.start("работа") -- begin recording
|
||
|
|
//! jarvis.macros.save() -- persist + stop
|
||
|
|
//! jarvis.macros.cancel() -- abort without saving
|
||
|
|
//! jarvis.macros.replay("работа") -- play back; returns step count or nil
|
||
|
|
//! jarvis.macros.list() -- array of {name, steps_count, last_run}
|
||
|
|
//! jarvis.macros.delete(name) -- removes
|
||
|
|
//! jarvis.macros.is_recording() -- bool
|
||
|
|
//! jarvis.macros.recording_name() -- string or nil
|
||
|
|
|
||
|
|
use mlua::{Lua, Table, Value};
|
||
|
|
|
||
|
|
use crate::macros;
|
||
|
|
|
||
|
|
pub fn register(lua: &Lua, jarvis: &Table) -> mlua::Result<()> {
|
||
|
|
let m = lua.create_table()?;
|
||
|
|
|
||
|
|
m.set("start", lua.create_function(|_, name: String| {
|
||
|
|
macros::start_recording(&name).map_err(mlua::Error::external)
|
||
|
|
})?)?;
|
||
|
|
|
||
|
|
m.set("save", lua.create_function(|_, ()| {
|
||
|
|
macros::save_recording().map_err(mlua::Error::external)
|
||
|
|
})?)?;
|
||
|
|
|
||
|
|
m.set("cancel", lua.create_function(|_, ()| {
|
||
|
|
Ok(macros::cancel_recording())
|
||
|
|
})?)?;
|
||
|
|
|
||
|
|
m.set("is_recording", lua.create_function(|_, ()| {
|
||
|
|
Ok(macros::is_recording())
|
||
|
|
})?)?;
|
||
|
|
|
||
|
|
m.set("recording_name", lua.create_function(|lua, ()| {
|
||
|
|
match macros::recording_name() {
|
||
|
|
Some(n) => Ok(Value::String(lua.create_string(n)?)),
|
||
|
|
None => Ok(Value::Nil),
|
||
|
|
}
|
||
|
|
})?)?;
|
||
|
|
|
||
|
|
m.set("replay", lua.create_function(|_, name: String| {
|
||
|
|
macros::replay(&name).map_err(mlua::Error::external)
|
||
|
|
})?)?;
|
||
|
|
|
||
|
|
m.set("delete", lua.create_function(|_, name: String| {
|
||
|
|
Ok(macros::delete(&name))
|
||
|
|
})?)?;
|
||
|
|
|
||
|
|
m.set("list", lua.create_function(|lua, ()| {
|
||
|
|
let arr = lua.create_table()?;
|
||
|
|
for (i, mac) in macros::list().iter().enumerate() {
|
||
|
|
let row = lua.create_table()?;
|
||
|
|
row.set("name", mac.name.clone())?;
|
||
|
|
row.set("steps_count", mac.steps.len())?;
|
||
|
|
row.set("created_at", mac.created_at)?;
|
||
|
|
let last: Value = match mac.last_run {
|
||
|
|
Some(ts) => Value::Integer(ts),
|
||
|
|
None => Value::Nil,
|
||
|
|
};
|
||
|
|
row.set("last_run", last)?;
|
||
|
|
arr.set(i + 1, row)?;
|
||
|
|
}
|
||
|
|
Ok(arr)
|
||
|
|
})?)?;
|
||
|
|
|
||
|
|
jarvis.set("macros", m)?;
|
||
|
|
Ok(())
|
||
|
|
}
|