Files
RuDS/crates/bds-ui/src/main.rs

67 lines
2.0 KiB
Rust

#![cfg_attr(target_os = "windows", windows_subsystem = "windows")]
use bds_server::boot::{BootMode, Platform};
use bds_ui::BdsApp;
use bds_ui::components::inputs;
fn main() -> anyhow::Result<()> {
let resolved = BootMode::resolve(std::env::var("BDS_MODE").ok().as_deref());
let env = std::env::vars().collect();
let mode = resolved.effective(current_platform(), &env);
if mode != BootMode::Desktop {
if mode != resolved {
let locale = bds_core::i18n::detect_os_locale();
eprintln!(
"{}",
bds_core::i18n::translate(locale, "remoteTerminal.headlessFallback")
);
}
let config = bds_server::ServerConfig::from_environment(
bds_core::util::application_database_path(),
bds_core::util::application_data_dir(),
)?;
return bds_server::run_headless(mode, config);
}
let icon =
iced::window::icon::from_file_data(include_bytes!("../assets/app-icons/bds.png"), None)
.expect("bundled application icon must be valid");
iced::application("bDS", BdsApp::update, BdsApp::view)
.subscription(BdsApp::subscription)
.theme(|_| inputs::app_theme())
.window(desktop_window_settings(Some(icon)))
.run_with(BdsApp::new)?;
Ok(())
}
fn desktop_window_settings(icon: Option<iced::window::Icon>) -> iced::window::Settings {
iced::window::Settings {
size: iced::Size::new(1200.0, 800.0),
icon,
exit_on_close_request: false,
..Default::default()
}
}
fn current_platform() -> Platform {
#[cfg(target_os = "macos")]
return Platform::MacOs;
#[cfg(windows)]
return Platform::Windows;
#[cfg(all(unix, not(target_os = "macos")))]
return Platform::Unix;
#[allow(unreachable_code)]
Platform::Windows
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn single_window_close_is_owned_by_the_application() {
assert!(!desktop_window_settings(None).exit_on_close_request);
}
}