Skip to main content

Mountain/Track/Effect/CreateEffectForRequest/
FileWatcher.rs

1use std::sync::Arc;
2
3use CommonLibrary::{Environment::Requires::Requires, FileSystem::FileWatcherProvider::FileWatcherProvider};
4use serde_json::{Value, json};
5use tauri::Runtime;
6
7use crate::Track::Effect::{
8	CreateEffectForRequest::Utilities::Params::{bool_at_true, string_at},
9	MappedEffectType::MappedEffect,
10};
11
12pub fn CreateEffect<R:Runtime>(MethodName:&str, Parameters:Value) -> Option<Result<MappedEffect, String>> {
13	match MethodName {
14		"FileWatcher.Register" => {
15			crate::effect!(run_time, {
16				let provider:Arc<dyn FileWatcherProvider> = run_time.Environment.Require();
17
18				// Cocoon's `NextProviderHandle()` returns a number;
19				// older callers pass a string. Accept both shapes
20				// rather than silently collapsing numbers to "".
21				let Handle = match Parameters.get(0) {
22					Some(Value::String(S)) => S.clone(),
23					Some(Value::Number(N)) => N.to_string(),
24					_ => String::new(),
25				};
26
27				let Root = string_at(&Parameters, 1);
28
29				let IsRecursive = bool_at_true(&Parameters, 2);
30
31				let Pattern = Parameters
32					.get(3)
33					.and_then(Value::as_str)
34					.map(str::to_string)
35					.filter(|Pat| !Pat.is_empty());
36
37				provider
38					.RegisterWatcher(Handle, std::path::PathBuf::from(Root), IsRecursive, Pattern)
39					.await
40					.map(|_| json!(null))
41					.map_err(|e| e.to_string())
42			})
43		},
44
45		"FileWatcher.Unregister" => {
46			crate::effect!(run_time, {
47				let provider:Arc<dyn FileWatcherProvider> = run_time.Environment.Require();
48
49				let Handle = match Parameters.get(0) {
50					Some(Value::String(S)) => S.clone(),
51					Some(Value::Number(N)) => N.to_string(),
52					_ => String::new(),
53				};
54
55				provider
56					.UnregisterWatcher(Handle)
57					.await
58					.map(|_| json!(null))
59					.map_err(|e| e.to_string())
60			})
61		},
62
63		_ => None,
64	}
65}