rustriff_lib/commands/effect_commands/
delay.rs1use crate::commands::helpers::persist_amp_config;
2use crate::services::amp_config_service::AmpConfigPersistenceService;
3use crate::services::audio_service::AudioService;
4use std::sync::Mutex;
5use tracing::info;
6
7#[tauri::command]
8pub fn set_delay_level(
9 audio_service: tauri::State<Mutex<AudioService>>,
10 persistence_service: tauri::State<Mutex<AmpConfigPersistenceService>>,
11 effect_id: u32,
12 level: f32,
13) -> Result<(), String> {
14 if !level.is_finite() {
15 return Err(format!(
16 "Invalid level: {} (must be finite, not NaN or infinite)",
17 level
18 ));
19 }
20
21 let service = audio_service
22 .lock()
23 .map_err(|_| "Failed to lock audio service".to_string())?;
24 let channel = service
25 .channels()
26 .iter()
27 .find(|c| c.id() == *service.current_channel_id())
28 .ok_or("No active channel")?;
29 channel.set_effect_param(effect_id, "level", level)?;
30 info!(
31 channel_id = *service.current_channel_id(),
32 effect_id, level, "Delay level updated"
33 );
34 persist_amp_config(&service, &persistence_service);
35 Ok(())
36}
37
38#[tauri::command]
39pub fn set_delay_delay_time(
40 audio_service: tauri::State<Mutex<AudioService>>,
41 persistence_service: tauri::State<Mutex<AmpConfigPersistenceService>>,
42 effect_id: u32,
43 delay_time: u32,
44) -> Result<(), String> {
45 let service = audio_service
46 .lock()
47 .map_err(|_| "Failed to lock audio service".to_string())?;
48 let channel = service
49 .channels()
50 .iter()
51 .find(|c| c.id() == *service.current_channel_id())
52 .ok_or("No active channel")?;
53 channel.set_effect_param(effect_id, "delay_time", delay_time)?;
54 info!(
55 channel_id = *service.current_channel_id(),
56 effect_id, delay_time, "Delay delay_time updated"
57 );
58 persist_amp_config(&service, &persistence_service);
59 Ok(())
60}