Skip to main content

Mountain/IPC/WindServiceHandler/
Output.rs

1#![allow(non_snake_case)]
2
3//! Output Channel domain handlers for Wind IPC.
4
5use serde_json::{Value, json};
6use tauri::AppHandle;
7
8use crate::dev_log;
9
10/// Create a named output channel. Returns the channel name as its handle.
11pub async fn handle_output_create(_AppHandle:AppHandle, Args:Vec<Value>) -> Result<Value, String> {
12	let ChannelName = Args.first().and_then(|V| V.as_str()).unwrap_or("Output").to_string();
13	dev_log!("ipc", "output:create channel='{}'", ChannelName);
14	Ok(json!({ "channelName": ChannelName }))
15}
16
17/// Append text to an output channel.
18pub async fn handle_output_append(AppHandle:AppHandle, Args:Vec<Value>) -> Result<Value, String> {
19	use tauri::Emitter;
20
21	let ChannelName = Args.first().and_then(|V| V.as_str()).unwrap_or("").to_string();
22	let Text = Args.get(1).and_then(|V| V.as_str()).unwrap_or("").to_string();
23
24	let _ = AppHandle.emit("sky://output/append", json!({ "channel": ChannelName, "text": Text }));
25	Ok(Value::Null)
26}
27
28/// Append a line to an output channel (text + newline).
29pub async fn handle_output_append_line(AppHandle:AppHandle, Args:Vec<Value>) -> Result<Value, String> {
30	use tauri::Emitter;
31
32	let ChannelName = Args.first().and_then(|V| V.as_str()).unwrap_or("").to_string();
33	let Text = Args.get(1).and_then(|V| V.as_str()).unwrap_or("").to_string();
34	let Line = format!("{}\n", Text);
35
36	let _ = AppHandle.emit("sky://output/append", json!({ "channel": ChannelName, "text": Line }));
37	Ok(Value::Null)
38}
39
40/// Clear an output channel.
41pub async fn handle_output_clear(AppHandle:AppHandle, Args:Vec<Value>) -> Result<Value, String> {
42	use tauri::Emitter;
43
44	let ChannelName = Args.first().and_then(|V| V.as_str()).unwrap_or("").to_string();
45	let _ = AppHandle.emit("sky://output/clear", json!({ "channel": ChannelName }));
46	Ok(Value::Null)
47}
48
49/// Show an output channel panel.
50pub async fn handle_output_show(AppHandle:AppHandle, Args:Vec<Value>) -> Result<Value, String> {
51	use tauri::Emitter;
52
53	let ChannelName = Args.first().and_then(|V| V.as_str()).unwrap_or("").to_string();
54	let _ = AppHandle.emit("sky://output/show", json!({ "channel": ChannelName }));
55	Ok(Value::Null)
56}