use std::process::Command;
use crate::MacosError;
pub fn escape(s: &str) -> String {
s.replace('\\', "\\\\").replace('"', "\\\"")
}
pub fn escape_body(s: &str) -> String {
let parts: Vec<String> = s
.split('\n')
.map(|line| format!("\"{}\"", escape(line)))
.collect();
parts.join(" & linefeed & ")
}
pub fn run_capture(script: &str, context: &str) -> Result<String, MacosError> {
let output = Command::new("osascript")
.arg("-e")
.arg(script)
.output()
.map_err(|e| MacosError::Other(format!("osascript: {e}")))?;
if !output.status.success() {
let stderr = String::from_utf8_lossy(&output.stderr);
return Err(MacosError::Other(format!("{context}: {stderr}")));
}
Ok(String::from_utf8_lossy(&output.stdout).into_owned())
}
pub fn run(script: &str, context: &str) -> Result<(), MacosError> {
let output = Command::new("osascript")
.arg("-e")
.arg(script)
.output()
.map_err(|e| MacosError::Other(format!("osascript: {e}")))?;
if !output.status.success() {
let stderr = String::from_utf8_lossy(&output.stderr);
return Err(MacosError::Other(format!("{context}: {stderr}")));
}
Ok(())
}