diff --git a/src-tauri/src/commands/audio.rs b/src-tauri/src/commands/audio.rs new file mode 100644 index 0000000..9e32d8c --- /dev/null +++ b/src-tauri/src/commands/audio.rs @@ -0,0 +1,25 @@ +use cpal::traits::{DeviceTrait, HostTrait}; +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct AudioDevice { + pub name: String, +} + +#[tauri::command] +pub fn list_input_devices() -> Result, String> { + let host = cpal::default_host(); + + let devices = host + .input_devices() + .map_err(|e| format!("Failed to enumerate input devices: {e}"))?; + + Ok(devices + .filter_map(|d| { + Some(AudioDevice { + name: d.description().ok()?.name().to_string(), + }) + }) + .collect()) +} diff --git a/src-tauri/src/commands/mod.rs b/src-tauri/src/commands/mod.rs index c714d1c..f8c30cc 100644 --- a/src-tauri/src/commands/mod.rs +++ b/src-tauri/src/commands/mod.rs @@ -1,2 +1,3 @@ pub mod accounts; +pub mod audio; pub mod server_list; diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index 6a7af70..72949f3 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -10,6 +10,7 @@ pub fn run() { commands::server_list::get_server_list, commands::accounts::save_accounts, commands::accounts::get_accounts, + commands::audio::list_input_devices, ]) .run(tauri::generate_context!()) .expect("error while running tauri application");