feat: add audio mode config
This commit is contained in:
		
							parent
							
								
									393e0e9afb
								
							
						
					
					
						commit
						8ab49d11d1
					
				| @ -1259,7 +1259,7 @@ impl LoginConfigHandler { | |||||||
|     ///
 |     ///
 | ||||||
|     /// * `q` - The audio mode option.
 |     /// * `q` - The audio mode option.
 | ||||||
|     /// * `ignore_default` - Ignore the default value.
 |     /// * `ignore_default` - Ignore the default value.
 | ||||||
|     fn get_audio_mode_enum(&self, q: &str, ignore_default: bool) -> Option<AudioMode> { |     pub fn get_audio_mode_enum(q: &str, ignore_default: bool) -> Option<AudioMode> { | ||||||
|         if q == "guest-to-host" { |         if q == "guest-to-host" { | ||||||
|             Some(AudioMode::GuestToHost) |             Some(AudioMode::GuestToHost) | ||||||
|         } else if q == "two-way" { |         } else if q == "two-way" { | ||||||
| @ -1361,7 +1361,7 @@ impl LoginConfigHandler { | |||||||
| 
 | 
 | ||||||
|     pub fn save_audio_mode(&mut self, value: String) -> Option<Message> { |     pub fn save_audio_mode(&mut self, value: String) -> Option<Message> { | ||||||
|         let mut res = None; |         let mut res = None; | ||||||
|         if let Some(q) = self.get_audio_mode_enum(&value, false) { |         if let Some(q) = LoginConfigHandler::get_audio_mode_enum(&value, false) { | ||||||
|             let mut misc = Misc::new(); |             let mut misc = Misc::new(); | ||||||
|             misc.set_option(OptionMessage { |             misc.set_option(OptionMessage { | ||||||
|                 audio_mode: q.into(), |                 audio_mode: q.into(), | ||||||
| @ -1981,6 +1981,7 @@ pub enum Data { | |||||||
|     RemovePortForward(i32), |     RemovePortForward(i32), | ||||||
|     AddPortForward((i32, String, i32)), |     AddPortForward((i32, String, i32)), | ||||||
|     ToggleClipboardFile, |     ToggleClipboardFile, | ||||||
|  |     ChangeAudioMode(AudioMode), | ||||||
|     NewRDP, |     NewRDP, | ||||||
|     SetConfirmOverrideFile((i32, i32, bool, bool, bool)), |     SetConfirmOverrideFile((i32, i32, bool, bool, bool)), | ||||||
|     AddJob((i32, String, String, i32, bool, bool)), |     AddJob((i32, String, String, i32, bool, bool)), | ||||||
|  | |||||||
| @ -1,5 +1,5 @@ | |||||||
| use crate::client::{ | use crate::client::{ | ||||||
|     Client, CodecFormat, MediaData, MediaSender, QualityStatus, MILLI1, SEC30, |     Client, CodecFormat, LoginConfigHandler, MediaData, MediaSender, QualityStatus, MILLI1, SEC30, | ||||||
|     SERVER_CLIPBOARD_ENABLED, SERVER_FILE_TRANSFER_ENABLED, SERVER_KEYBOARD_ENABLED, |     SERVER_CLIPBOARD_ENABLED, SERVER_FILE_TRANSFER_ENABLED, SERVER_KEYBOARD_ENABLED, | ||||||
| }; | }; | ||||||
| #[cfg(not(any(target_os = "android", target_os = "ios")))] | #[cfg(not(any(target_os = "android", target_os = "ios")))] | ||||||
| @ -386,6 +386,24 @@ impl<T: InvokeUiSession> Remote<T> { | |||||||
|             Data::ToggleClipboardFile => { |             Data::ToggleClipboardFile => { | ||||||
|                 self.check_clipboard_file_context(); |                 self.check_clipboard_file_context(); | ||||||
|             } |             } | ||||||
|  |             Data::ChangeAudioMode(audio_mode) => { | ||||||
|  |                 match audio_mode { | ||||||
|  |                     AudioMode::GuestToHost => { | ||||||
|  |                         if let Some(sender) = self.stop_local_audio_sender.take() { | ||||||
|  |                             allow_err!(sender.send(())); | ||||||
|  |                         } | ||||||
|  |                     } | ||||||
|  |                     AudioMode::TwoWay => { | ||||||
|  |                         // Start audio thread for playback.
 | ||||||
|  |                         // Cancel previous local audio session.
 | ||||||
|  |                         if let Some(sender) = self.stop_local_audio_sender.take() { | ||||||
|  |                             allow_err!(sender.send(())); | ||||||
|  |                         } | ||||||
|  |                         // Start client audio when connection is established.
 | ||||||
|  |                         self.stop_local_audio_sender = self.start_client_audio(); | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|             Data::Message(msg) => { |             Data::Message(msg) => { | ||||||
|                 allow_err!(peer.send(&msg).await); |                 allow_err!(peer.send(&msg).await); | ||||||
|             } |             } | ||||||
| @ -866,8 +884,19 @@ impl<T: InvokeUiSession> Remote<T> { | |||||||
|                                 }); |                                 }); | ||||||
|                             } |                             } | ||||||
|                         } |                         } | ||||||
|                         // Start audio thread for playback
 | 
 | ||||||
|  |                         if self.handler.is_file_transfer() { | ||||||
|  |                             self.handler.load_last_jobs(); | ||||||
|  |                         } | ||||||
|  | 
 | ||||||
|  |                         // Start audio thread for playback if current audio mode is two-way transmission.
 | ||||||
|                         if !self.handler.is_file_transfer() && !self.handler.is_port_forward() { |                         if !self.handler.is_file_transfer() && !self.handler.is_port_forward() { | ||||||
|  |                             let audio_mode = LoginConfigHandler::get_audio_mode_enum( | ||||||
|  |                                 self.handler.load_config().audio_mode.as_str(), | ||||||
|  |                                 false, | ||||||
|  |                             ) | ||||||
|  |                             .unwrap_or(AudioMode::GuestToHost); | ||||||
|  |                             if audio_mode == AudioMode::TwoWay { | ||||||
|                                 // Cancel previous local audio session.
 |                                 // Cancel previous local audio session.
 | ||||||
|                                 if let Some(sender) = self.stop_local_audio_sender.take() { |                                 if let Some(sender) = self.stop_local_audio_sender.take() { | ||||||
|                                     allow_err!(sender.send(())); |                                     allow_err!(sender.send(())); | ||||||
| @ -875,9 +904,6 @@ impl<T: InvokeUiSession> Remote<T> { | |||||||
|                                 // Start client audio when connection is established.
 |                                 // Start client audio when connection is established.
 | ||||||
|                                 self.stop_local_audio_sender = self.start_client_audio(); |                                 self.stop_local_audio_sender = self.start_client_audio(); | ||||||
|                             } |                             } | ||||||
| 
 |  | ||||||
|                         if self.handler.is_file_transfer() { |  | ||||||
|                             self.handler.load_last_jobs(); |  | ||||||
|                         } |                         } | ||||||
|                     } |                     } | ||||||
|                     _ => {} |                     _ => {} | ||||||
|  | |||||||
| @ -94,6 +94,10 @@ impl<T: InvokeUiSession> Session<T> { | |||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     pub fn save_audio_mode(&self, value: String) { |     pub fn save_audio_mode(&self, value: String) { | ||||||
|  |         let mode = LoginConfigHandler::get_audio_mode_enum(value.as_str(), false); | ||||||
|  |         if let Some(mode)= mode { | ||||||
|  |             self.send(Data::ChangeAudioMode(mode)); | ||||||
|  |         } | ||||||
|         let msg = self.lc.write().unwrap().save_audio_mode(value); |         let msg = self.lc.write().unwrap().save_audio_mode(value); | ||||||
|         // Notify remote guest that the audio mode has been changed.
 |         // Notify remote guest that the audio mode has been changed.
 | ||||||
|         if let Some(msg) = msg { |         if let Some(msg) = msg { | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user