lesavka: cover startup preview profile sync
This commit is contained in:
parent
e842b0c5c6
commit
bec9885537
@ -326,6 +326,28 @@ impl LauncherPreview {
|
||||
self.rebuild_feed(&self.window_feeds, monitor_id, None, Some((width, height)));
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
pub(crate) fn profile_for_test(
|
||||
&self,
|
||||
monitor_id: usize,
|
||||
surface: PreviewSurface,
|
||||
) -> Option<(i32, i32, i32, i32, u32, u32, bool)> {
|
||||
let feed = match surface {
|
||||
PreviewSurface::Inline => self.inline_feeds.lock().ok()?.get(monitor_id).cloned(),
|
||||
PreviewSurface::Window => self.window_feeds.lock().ok()?.get(monitor_id).cloned(),
|
||||
}?;
|
||||
let profile = feed.profile();
|
||||
Some((
|
||||
profile.display_width,
|
||||
profile.display_height,
|
||||
profile.requested_width,
|
||||
profile.requested_height,
|
||||
profile.requested_fps,
|
||||
profile.max_bitrate_kbit,
|
||||
profile.prefer_reencode,
|
||||
))
|
||||
}
|
||||
|
||||
fn rebuild_feed(
|
||||
&self,
|
||||
feeds: &Arc<Mutex<[PreviewFeed; 2]>>,
|
||||
|
||||
@ -461,12 +461,7 @@ fn rebind_popout_preview(
|
||||
}
|
||||
|
||||
#[cfg(not(coverage))]
|
||||
fn sync_preview_profiles(
|
||||
preview: &super::preview::LauncherPreview,
|
||||
widgets: &super::ui_components::LauncherWidgets,
|
||||
popouts: &Rc<RefCell<[Option<super::ui_components::PopoutWindowHandle>; 2]>>,
|
||||
state: &LauncherState,
|
||||
) {
|
||||
fn apply_preview_profiles(preview: &super::preview::LauncherPreview, state: &LauncherState) {
|
||||
for monitor_id in 0..2 {
|
||||
let capture = state.capture_size_choice(monitor_id);
|
||||
let breakout = state.breakout_size_choice(monitor_id);
|
||||
@ -479,6 +474,18 @@ fn sync_preview_profiles(
|
||||
capture.preset != CaptureSizePreset::Source,
|
||||
);
|
||||
preview.set_breakout_profile(monitor_id, breakout.width, breakout.height);
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(not(coverage))]
|
||||
fn sync_preview_profiles(
|
||||
preview: &super::preview::LauncherPreview,
|
||||
widgets: &super::ui_components::LauncherWidgets,
|
||||
popouts: &Rc<RefCell<[Option<super::ui_components::PopoutWindowHandle>; 2]>>,
|
||||
state: &LauncherState,
|
||||
) {
|
||||
apply_preview_profiles(preview, state);
|
||||
for monitor_id in 0..2 {
|
||||
rebind_inline_preview(preview, widgets, monitor_id);
|
||||
rebind_popout_preview(preview, popouts, monitor_id);
|
||||
}
|
||||
@ -1900,6 +1907,60 @@ pub fn run_gui_launcher(_server_addr: String) -> Result<()> {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[cfg(all(test, not(coverage)))]
|
||||
mod tests {
|
||||
use super::apply_preview_profiles;
|
||||
use crate::launcher::preview::{LauncherPreview, PreviewSurface};
|
||||
use crate::launcher::state::{CaptureSizePreset, LauncherState};
|
||||
|
||||
#[test]
|
||||
fn fresh_preview_bootstrap_is_overridden_by_launcher_state_profiles() {
|
||||
let preview = LauncherPreview::new("http://127.0.0.1:1".to_string()).unwrap();
|
||||
let state = LauncherState::default();
|
||||
|
||||
let bootstrap = preview.profile_for_test(1, PreviewSurface::Inline).unwrap();
|
||||
assert_eq!(bootstrap.2, 960);
|
||||
assert_eq!(bootstrap.3, 540);
|
||||
assert_eq!(bootstrap.4, 24);
|
||||
|
||||
apply_preview_profiles(&preview, &state);
|
||||
|
||||
let inline = preview.profile_for_test(1, PreviewSurface::Inline).unwrap();
|
||||
assert_eq!(inline.2, 1920);
|
||||
assert_eq!(inline.3, 1080);
|
||||
assert_eq!(inline.4, 24);
|
||||
assert_eq!(inline.5, 4_000);
|
||||
assert!(inline.6);
|
||||
|
||||
let window = preview.profile_for_test(1, PreviewSurface::Window).unwrap();
|
||||
assert_eq!(window.2, 1920);
|
||||
assert_eq!(window.3, 1080);
|
||||
assert_eq!(window.4, 30);
|
||||
assert_eq!(window.5, 12_000);
|
||||
assert!(window.6);
|
||||
|
||||
preview.shutdown_all();
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn source_preview_profile_stays_honest_after_apply() {
|
||||
let preview = LauncherPreview::new("http://127.0.0.1:1".to_string()).unwrap();
|
||||
let mut state = LauncherState::default();
|
||||
state.set_capture_size_preset(1, CaptureSizePreset::Source);
|
||||
|
||||
apply_preview_profiles(&preview, &state);
|
||||
|
||||
let inline = preview.profile_for_test(1, PreviewSurface::Inline).unwrap();
|
||||
assert_eq!(inline.2, 1920);
|
||||
assert_eq!(inline.3, 1080);
|
||||
assert_eq!(inline.4, 30);
|
||||
assert_eq!(inline.5, 12_000);
|
||||
assert!(!inline.6);
|
||||
|
||||
preview.shutdown_all();
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(all(test, coverage))]
|
||||
mod tests {
|
||||
use super::{run_gui_launcher, session_preview_active};
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user