debug restore resolution

Signed-off-by: fufesou <shuanglongchen@yeah.net>
This commit is contained in:
fufesou 2023-06-05 20:21:21 +08:00
parent 3c2bf2c154
commit 6959f044f0
5 changed files with 39 additions and 31 deletions

View File

@ -508,7 +508,8 @@ message OptionMessage {
SupportedDecoding supported_decoding = 10;
int32 custom_fps = 11;
BoolOption disable_keyboard = 12;
Resolution custom_resolution = 13;
// Position 13 is used for Resolution. Remove later.
// Resolution custom_resolution = 13;
}
message TestDelay {

View File

@ -1567,7 +1567,20 @@ mod tests {
let wrong_type_str = r#"
view_style = "adaptive"
scroll_style = "scrollbar"
custom_resolution = true
custom_resolutions = true
"#;
let mut cfg_to_compare = default_peer_config.clone();
cfg_to_compare.view_style = "adaptive".to_string();
cfg_to_compare.scroll_style = "scrollbar".to_string();
let cfg = toml::from_str::<PeerConfig>(wrong_type_str);
assert_eq!(cfg, Ok(cfg_to_compare), "Failed to test wrong_type_str");
let wrong_type_str = r#"
view_style = "adaptive"
scroll_style = "scrollbar"
[custom_resolutions.0]
w = "1920"
h = 1080
"#;
let mut cfg_to_compare = default_peer_config.clone();
cfg_to_compare.view_style = "adaptive".to_string();
@ -1576,14 +1589,15 @@ mod tests {
assert_eq!(cfg, Ok(cfg_to_compare), "Failed to test wrong_type_str");
let wrong_field_str = r#"
[custom_resolution]
[custom_resolutions.0]
w = 1920
h = 1080
hello = "world"
[ui_flutter]
"#;
let mut cfg_to_compare = default_peer_config.clone();
cfg_to_compare.custom_resolution = Some(Resolution { w: 1920, h: 1080 });
cfg_to_compare.custom_resolutions =
HashMap::from([("0".to_string(), Resolution { w: 1920, h: 1080 })]);
let cfg = toml::from_str::<PeerConfig>(wrong_field_str);
assert_eq!(cfg, Ok(cfg_to_compare), "Failed to test wrong_field_str");
}

View File

@ -35,7 +35,7 @@ use hbb_common::{
Config, PeerConfig, PeerInfoSerde, Resolution, CONNECT_TIMEOUT, READ_TIMEOUT, RELAY_PORT,
},
get_version_number, log,
message_proto::{option_message::BoolOption, Resolution as ProtoResolution, *},
message_proto::{option_message::BoolOption, *},
protobuf::Message as _,
rand,
rendezvous_proto::*,
@ -1404,16 +1404,6 @@ impl LoginConfigHandler {
msg.disable_clipboard = BoolOption::Yes.into();
n += 1;
}
if let Some(r) = self.get_custom_resolution(0) {
if r.0 > 0 && r.1 > 0 {
msg.custom_resolution = Some(ProtoResolution {
width: r.0,
height: r.1,
..Default::default()
})
.into();
}
}
msg.supported_decoding =
hbb_common::protobuf::MessageField::some(Decoder::supported_decodings(Some(&self.id)));
n += 1;

View File

@ -1795,14 +1795,11 @@ impl Connection {
video_service::switch_display(s.display).await;
#[cfg(not(any(target_os = "android", target_os = "ios")))]
if s.width != 0 && s.height != 0 {
self.change_resolution(
&Resolution {
width: s.width,
height: s.height,
..Default::default()
},
false,
);
self.change_resolution(&Resolution {
width: s.width,
height: s.height,
..Default::default()
});
}
}
Some(misc::Union::ChatMessage(c)) => {
@ -1905,7 +1902,7 @@ impl Connection {
}
}
#[cfg(not(any(target_os = "android", target_os = "ios")))]
Some(misc::Union::ChangeResolution(r)) => self.change_resolution(&r, false),
Some(misc::Union::ChangeResolution(r)) => self.change_resolution(&r),
#[cfg(all(feature = "flutter", feature = "plugin_framework"))]
#[cfg(not(any(target_os = "android", target_os = "ios")))]
Some(misc::Union::PluginRequest(p)) => {
@ -1948,13 +1945,9 @@ impl Connection {
}
#[cfg(not(any(target_os = "android", target_os = "ios")))]
fn change_resolution(&mut self, r: &Resolution, first_display: bool) {
fn change_resolution(&mut self, r: &Resolution) {
if self.keyboard {
if let Ok((_, current, display)) = video_service::get_current_display() {
if first_display && current != 0 {
return;
}
let name = display.name();
if let Ok(name) = video_service::get_current_display_name() {
#[cfg(all(windows, feature = "virtual_display_driver"))]
if let Some(_ok) =
crate::virtual_display_manager::change_resolution_if_is_virtual_display(
@ -2180,7 +2173,7 @@ impl Connection {
if let Some(custom_resolution) = o.custom_resolution.as_ref() {
if Self::alive_conns().len() > 0 {
if custom_resolution.width > 0 && custom_resolution.height > 0 {
self.change_resolution(&custom_resolution, true);
self.change_resolution(&custom_resolution);
}
}
}

View File

@ -911,7 +911,16 @@ impl<T: InvokeUiSession> Session<T> {
pub fn change_resolution(&self, display: i32, width: i32, height: i32) {
*self.last_change_display.lock().unwrap() =
ChangeDisplayRecord::new(display, width, height);
self.do_change_resolution(display, width, height);
}
fn try_change_init_resolution(&self, display: i32) {
if let Some((w, h)) = self.lc.read().unwrap().get_custom_resolution(display) {
self.do_change_resolution(display, w, h);
}
}
fn do_change_resolution(&self, display: i32, width: i32, height: i32) {
let mut misc = Misc::new();
misc.set_change_resolution(Resolution {
width,
@ -1081,6 +1090,7 @@ impl<T: InvokeUiSession> Interface for Session<T> {
self.msgbox("error", "Remote Error", "No Display", "");
return;
}
self.try_change_init_resolution(pi.current_display);
let p = self.lc.read().unwrap().should_auto_login();
if !p.is_empty() {
input_os_password(p, true, self.clone());