use crate::{MainWindow, RemoteWorkerModel};
use slint::ComponentHandle;
const CUSTOM_PREVIEW_SCALE_INDEX: i32 = 3;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct HiddenRemoteSettings {
pub transfer_mode_index: i32,
pub cadence_ms: i32,
pub preview_scale_index: i32,
pub preview_scale_percent: i32,
pub export_transfer_index: i32,
pub batch_lanes: i32,
}
impl HiddenRemoteSettings {
pub const DEFAULT: Self = Self {
transfer_mode_index: 0,
cadence_ms: 500,
preview_scale_index: 2,
preview_scale_percent: 50,
export_transfer_index: 0,
batch_lanes: 4,
};
#[must_use]
pub const fn in_use(&self) -> bool {
let custom_percent_differs = self.preview_scale_index == CUSTOM_PREVIEW_SCALE_INDEX
&& self.preview_scale_percent != Self::DEFAULT.preview_scale_percent;
self.transfer_mode_index != Self::DEFAULT.transfer_mode_index
|| self.cadence_ms != Self::DEFAULT.cadence_ms
|| self.preview_scale_index != Self::DEFAULT.preview_scale_index
|| custom_percent_differs
|| self.export_transfer_index != Self::DEFAULT.export_transfer_index
|| self.batch_lanes != Self::DEFAULT.batch_lanes
}
}
pub(super) fn setup_advanced_in_use_callback(ui: &MainWindow) {
ui.global::<RemoteWorkerModel>().on_advanced_in_use(
|transfer_mode_index,
cadence_ms,
preview_scale_index,
preview_scale_percent,
export_transfer_index,
batch_lanes| {
HiddenRemoteSettings {
transfer_mode_index,
cadence_ms,
preview_scale_index,
preview_scale_percent,
export_transfer_index,
batch_lanes,
}
.in_use()
},
);
}
#[cfg(test)]
mod tests {
use super::*;
use crate::{
gui::remote::worker_settings::to_worker_item,
settings::{RemoteEndpoint, model::AppSettings},
};
const DEFAULT: HiddenRemoteSettings = HiddenRemoteSettings::DEFAULT;
#[test]
fn the_default_endpoint_is_not_advanced() {
assert!(!DEFAULT.in_use());
}
#[test]
fn every_hidden_setting_off_its_default_counts_as_in_use() {
let changed = [
HiddenRemoteSettings {
transfer_mode_index: 1,
..DEFAULT
},
HiddenRemoteSettings {
cadence_ms: 250,
..DEFAULT
},
HiddenRemoteSettings {
preview_scale_index: 0,
..DEFAULT
},
HiddenRemoteSettings {
preview_scale_index: 3,
preview_scale_percent: 40,
..DEFAULT
},
HiddenRemoteSettings {
export_transfer_index: 1,
..DEFAULT
},
HiddenRemoteSettings {
batch_lanes: 8,
..DEFAULT
},
];
for settings in changed {
assert!(settings.in_use(), "{settings:?}");
}
}
#[test]
fn a_custom_percentage_behind_another_scale_does_nothing() {
let settings = HiddenRemoteSettings {
preview_scale_percent: 40,
..DEFAULT
};
assert!(!settings.in_use());
}
#[test]
fn the_default_values_are_the_persisted_defaults() {
let item = to_worker_item(&RemoteEndpoint::default());
assert_eq!(item.transfer_mode_index, DEFAULT.transfer_mode_index);
assert_eq!(item.cadence_ms, DEFAULT.cadence_ms);
assert_eq!(item.preview_scale_index, DEFAULT.preview_scale_index);
assert_eq!(item.preview_scale_percent, DEFAULT.preview_scale_percent);
assert_eq!(item.export_transfer_index, DEFAULT.export_transfer_index);
assert_eq!(
i64::from(AppSettings::default().remote_batch_lanes),
i64::from(DEFAULT.batch_lanes)
);
}
}