use std::path::PathBuf;
use ek_station::StationConfig;
use ek_ui::pick::read_pick;
fn usage_exit() -> ! {
eprintln!("usage: ek-ui [--pick] | [--from <list-file>] [--ready-file <marker>]");
std::process::exit(2);
}
fn ensure_ui(mut cfg: StationConfig) -> StationConfig {
if !cfg.plugins.iter().any(|p| p == "ui") {
cfg.plugins.push("ui".to_string());
}
cfg
}
fn demo_cfg() -> StationConfig {
let mut cfg = StationConfig::demo();
cfg.plugins.push(ek_ui::sim::SIM_NAME.to_string());
ensure_ui(cfg)
}
fn main() {
let argv: Vec<String> = std::env::args().collect();
if argv.len() == 1 {
let opts = ek_ui::runtime::RunOpts::default();
if let Err(e) = ek_ui::run_station_ui(&demo_cfg(), &opts) {
eprintln!("ek-ui: {e}");
std::process::exit(1);
}
return;
}
let mut from: Option<PathBuf> = None;
let mut ready: Option<PathBuf> = None;
let mut pick = false;
let mut i = 1;
while i < argv.len() {
match argv[i].as_str() {
"--pick" => pick = true,
"--from" => match argv.get(i + 1) {
Some(p) => {
from = Some(PathBuf::from(p));
i += 1;
}
None => usage_exit(),
},
"--ready-file" => match argv.get(i + 1) {
Some(p) => {
ready = Some(PathBuf::from(p));
i += 1;
}
None => usage_exit(),
},
other => {
eprintln!("ek-ui: unknown flag {other}");
usage_exit();
}
}
i += 1;
}
if pick {
if let Err(e) = ek_ui::run_pick_launcher() {
eprintln!("ek-ui --pick: {e}");
std::process::exit(2);
}
return;
}
let opts = ek_ui::runtime::RunOpts {
ready_marker: ready,
..Default::default()
};
let cfg = match from {
Some(from_path) => match read_pick(&from_path) {
Err(e) => {
eprintln!("ek-ui --from: {e}");
std::process::exit(1);
}
Ok(names) => ensure_ui(StationConfig { plugins: names }),
},
None => demo_cfg(),
};
if let Err(e) = ek_ui::run_station_ui(&cfg, &opts) {
eprintln!("ek-ui: {e}");
std::process::exit(1);
}
}