use std::process::Command;
pub fn copy_screenshot_to_clipboard(image_path: &str) -> Result<(), String> {
#[cfg(target_os = "linux")]
{
let output = Command::new("xclip")
.args([
"-selection",
"clipboard",
"-t",
"image/png",
"-i",
image_path,
])
.output()
.map_err(|e| e.to_string())?;
if !output.status.success() {
return Err(String::from_utf8_lossy(&output.stderr).to_string());
}
return Ok(());
}
#[cfg(target_os = "macos")]
{
let output = Command::new("osascript")
.args([
"-e",
&format!("set the clipboard to (read file \"{}\" as PNG)", image_path),
])
.output()
.map_err(|e| e.to_string())?;
if !output.status.success() {
return Err(String::from_utf8_lossy(&output.stderr).to_string());
}
return Ok(());
}
Err("Unsupported platform".to_string())
}
pub fn take_screenshot() -> Result<String, String> {
#[cfg(target_os = "linux")]
{
let output = Command::new("gnome-screenshot")
.args(["-f", "/tmp/screenshot.png"])
.output()
.map_err(|e| e.to_string())?;
if output.status.success() {
return Ok("/tmp/screenshot.png".to_string());
}
let output = Command::new("import")
.args(["-window", "root", "/tmp/screenshot.png"])
.output()
.map_err(|e| e.to_string())?;
if output.status.success() {
return Ok("/tmp/screenshot.png".to_string());
}
}
#[cfg(target_os = "macos")]
{
let output = Command::new("screencapture")
.args(["-i", "/tmp/screenshot.png"])
.output()
.map_err(|e| e.to_string())?;
if output.status.success() {
return Ok("/tmp/screenshot.png".to_string());
}
}
Err("Failed to take screenshot".to_string())
}