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