Skip to main content

Mountain/Track/Effect/CreateEffectForRequest/
Clipboard.rs

1use serde_json::{Value, json};
2use tauri::Runtime;
3
4use crate::{
5	Track::Effect::{CreateEffectForRequest::Utilities::Params::string_at, MappedEffectType::MappedEffect},
6	dev_log,
7};
8
9pub fn CreateEffect<R:Runtime>(MethodName:&str, Parameters:Value) -> Option<Result<MappedEffect, String>> {
10	match MethodName {
11		"Clipboard.Read" => {
12			crate::effect!(_run_time, {
13				let result = tokio::task::spawn_blocking(|| -> Result<String, String> {
14					let mut Clipboard = arboard::Clipboard::new().map_err(|e| e.to_string())?;
15
16					Clipboard.get_text().map_err(|e| e.to_string())
17				})
18				.await
19				.map_err(|e| format!("Clipboard.Read join error: {}", e))?;
20
21				match result {
22					Ok(text) => Ok(json!(text)),
23					Err(e) => {
24						if e.contains("empty") || e.contains("Empty") {
25							Ok(json!(""))
26						} else {
27							dev_log!("ipc", "warn: [Clipboard.Read] {}", e);
28
29							Err(e)
30						}
31					},
32				}
33			})
34		},
35
36		"Clipboard.Write" => {
37			crate::effect!(_run_time, {
38				let text = string_at(&Parameters, 0);
39
40				let text_len = text.len();
41
42				let result = tokio::task::spawn_blocking(move || -> Result<(), String> {
43					let mut Clipboard = arboard::Clipboard::new().map_err(|e| e.to_string())?;
44
45					Clipboard.set_text(text).map_err(|e| e.to_string())
46				})
47				.await
48				.map_err(|e| format!("Clipboard.Write join error: {}", e))?;
49
50				result.map(|()| {
51					dev_log!("ipc", "[Clipboard.Write] wrote {} byte(s)", text_len);
52
53					json!(null)
54				})
55			})
56		},
57
58		_ => None,
59	}
60}