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.
|
||||
/// * `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" {
|
||||
Some(AudioMode::GuestToHost)
|
||||
} else if q == "two-way" {
|
||||
@ -1361,7 +1361,7 @@ impl LoginConfigHandler {
|
||||
|
||||
pub fn save_audio_mode(&mut self, value: String) -> Option<Message> {
|
||||
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();
|
||||
misc.set_option(OptionMessage {
|
||||
audio_mode: q.into(),
|
||||
@ -1981,6 +1981,7 @@ pub enum Data {
|
||||
RemovePortForward(i32),
|
||||
AddPortForward((i32, String, i32)),
|
||||
ToggleClipboardFile,
|
||||
ChangeAudioMode(AudioMode),
|
||||
NewRDP,
|
||||
SetConfirmOverrideFile((i32, i32, bool, bool, bool)),
|
||||
AddJob((i32, String, String, i32, bool, bool)),
|
||||
|
@ -1,5 +1,5 @@
|
||||
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,
|
||||
};
|
||||
#[cfg(not(any(target_os = "android", target_os = "ios")))]
|
||||
@ -386,6 +386,24 @@ impl<T: InvokeUiSession> Remote<T> {
|
||||
Data::ToggleClipboardFile => {
|
||||
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) => {
|
||||
allow_err!(peer.send(&msg).await);
|
||||
}
|
||||
@ -866,19 +884,27 @@ impl<T: InvokeUiSession> Remote<T> {
|
||||
});
|
||||
}
|
||||
}
|
||||
// Start audio thread for playback
|
||||
if !self.handler.is_file_transfer() && !self.handler.is_port_forward() {
|
||||
// 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();
|
||||
}
|
||||
|
||||
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() {
|
||||
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.
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
_ => {}
|
||||
},
|
||||
|
@ -94,6 +94,10 @@ impl<T: InvokeUiSession> Session<T> {
|
||||
}
|
||||
|
||||
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);
|
||||
// Notify remote guest that the audio mode has been changed.
|
||||
if let Some(msg) = msg {
|
||||
|
Loading…
x
Reference in New Issue
Block a user