From 0b29862f41726dcc49b966556c67d13513a0cbb9 Mon Sep 17 00:00:00 2001 From: Warren Lo Date: Thu, 19 Mar 2026 00:31:55 +0800 Subject: [PATCH] Add commands.rs --- src/ui/commands.rs | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 src/ui/commands.rs diff --git a/src/ui/commands.rs b/src/ui/commands.rs new file mode 100644 index 0000000..6bee416 --- /dev/null +++ b/src/ui/commands.rs @@ -0,0 +1,39 @@ +//! IPC 命令處理 + +use anyhow::Result; + +#[derive(Debug, Clone)] +pub enum UiCommand { + OpenFile(String), + ExecuteCommand(String), + ToggleFullscreen, + ZoomIn, + ZoomOut, + ResetZoom, + Pan(i32, i32), +} + +impl UiCommand { + pub fn parse(input: &str) -> Result { + let parts: Vec<&str> = input.trim().split_whitespace().collect(); + + match parts.first().copied().unwrap_or("") { + "open" if parts.len() > 1 => { + Ok(UiCommand::OpenFile(parts[1..].join(" "))) + } + "cmd" | "command" if parts.len() > 1 => { + Ok(UiCommand::ExecuteCommand(parts[1..].join(" "))) + } + "fullscreen" => Ok(UiCommand::ToggleFullscreen), + "zoom_in" | "+" => Ok(UiCommand::ZoomIn), + "zoom_out" | "-" => Ok(UiCommand::ZoomOut), + "reset" => Ok(UiCommand::ResetZoom), + "pan" if parts.len() >= 3 => { + let x = parts[1].parse().unwrap_or(0); + let y = parts[2].parse().unwrap_or(0); + Ok(UiCommand::Pan(x, y)) + } + _ => anyhow::bail!("Unknown command: {}", input), + } + } +}