@@ -690,6 +690,8 @@ fn decode_loop(
690690 }
691691 PlayerControlEvent :: ChangeAnalyzer ( request) => {
692692 info ! ( "audio: change analyzer! {:?}" , request) ;
693+
694+ while let Ok ( _) = analyzer_receiver. try_lock ( ) . unwrap ( ) . try_recv ( ) { }
693695 if let Some ( request_type) = & request. analyzer_type {
694696 let new_state = AnalyzerState {
695697 is_enabled : request. is_enabled . unwrap_or ( true ) ,
@@ -1213,6 +1215,11 @@ fn decode_loop(
12131215 }
12141216 PlayerControlEvent :: ChangeAnalyzer ( request) => {
12151217 info ! ( "audio: change analyzer! {:?}" , request) ;
1218+
1219+ while let Ok ( _) =
1220+ analyzer_receiver. try_lock ( ) . unwrap ( ) . try_recv ( )
1221+ {
1222+ }
12161223 if let Some ( request_type) = & request. analyzer_type {
12171224 let new_state = AnalyzerState {
12181225 is_enabled : request. is_enabled . unwrap_or ( true ) ,
@@ -1352,6 +1359,11 @@ fn decode_loop(
13521359 }
13531360 PlayerControlEvent :: ChangeAnalyzer ( request) => {
13541361 info ! ( "audio: change analyzer! {:?}" , request) ;
1362+
1363+ while let Ok ( _) =
1364+ analyzer_receiver. try_lock ( ) . unwrap ( ) . try_recv ( )
1365+ {
1366+ }
13551367 if let Some ( request_type) = & request. analyzer_type {
13561368 let new_state = AnalyzerState {
13571369 is_enabled : request. is_enabled . unwrap_or ( true ) ,
@@ -1821,29 +1833,29 @@ pub struct AudioDevices {
18211833}
18221834
18231835#[ tauri:: command]
1824- pub fn get_devices ( _app_handle : tauri:: AppHandle ) -> Option < AudioDevices > {
1825- // Get default host.
1836+ pub async fn get_devices ( _app_handle : tauri:: AppHandle ) -> Result < AudioDevices , String > {
18261837 let host = cpal:: default_host ( ) ;
18271838
1839+ // Fetch output devices and map using the new description() API
18281840 let cpal_devices: Vec < AudioDevice > = host
18291841 . output_devices ( )
1830- . unwrap ( )
1831- . map ( |device| AudioDevice {
1832- name : device. name ( ) . unwrap ( ) ,
1842+ . map_err ( |e| format ! ( "Failed to get output devices: {}" , e) ) ?
1843+ . filter_map ( |device| {
1844+ // description() returns a Result<DeviceDescription, DevicePropertyError>
1845+ device. description ( ) . ok ( ) . map ( |desc| AudioDevice {
1846+ name : desc. name ( ) . to_string ( ) , // Accessing the name field from DeviceDescription
1847+ } )
18331848 } )
18341849 . collect ( ) ;
18351850
1836- let cpal_default = host. default_output_device ( ) ;
1837-
1838- let default = if cpal_default. is_none ( ) {
1839- None
1840- } else {
1841- Some ( AudioDevice {
1842- name : cpal_default. unwrap ( ) . name ( ) . unwrap ( ) ,
1851+ // Fetch default device and map its description
1852+ let default = host. default_output_device ( ) . and_then ( |device| {
1853+ device. description ( ) . ok ( ) . map ( |desc| AudioDevice {
1854+ name : desc. name ( ) . to_string ( ) ,
18431855 } )
1844- } ;
1856+ } ) ;
18451857
1846- Some ( AudioDevices {
1858+ Ok ( AudioDevices {
18471859 devices : cpal_devices,
18481860 default,
18491861 } )
0 commit comments