Skip to main content

Mountain/IPC/WindServiceHandlers/
Output.rs

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