RustyWolf/src/main.rs

82 lines
2.3 KiB
Rust

//! RustyWolf entry point: load config, pick the engine, go.
mod cli;
mod config;
mod gecko;
mod handoff;
mod switch;
mod util;
mod webkit;
use anyhow::Result;
use cli::{Cli, Engine};
use std::path::PathBuf;
fn main() {
if let Err(err) = run() {
eprintln!("error: {err:#}");
std::process::exit(1);
}
}
fn run() -> Result<()> {
let cli = Cli::parse_args();
let mut cfg = config::load();
if cli.dry_run {
let engine = cli.engine.unwrap_or(cfg.engine);
print_dry_run(&cli, &cfg, engine);
return Ok(());
}
if let Some(engine) = cli.engine
&& cfg.engine != engine
{
cfg.engine = engine;
config::save(&cfg)?;
}
if let Some(firefox) = &cli.firefox {
cfg.firefox_bin = Some(firefox.clone());
config::save(&cfg)?;
}
match cli.engine.unwrap_or(cfg.engine) {
Engine::Webkit => webkit::launch(&cli, &mut cfg),
Engine::Gecko => gecko::launch(&cli, &mut cfg),
}
}
fn print_dry_run(cli: &Cli, cfg: &config::Config, engine: Engine) {
let url = cli
.url
.as_deref()
.map(util::normalize_url)
.unwrap_or_else(|| util::DEFAULT_HOME.to_string());
match engine {
Engine::Webkit => {
let effective_dmabuf =
std::env::var("WEBKIT_DISABLE_DMABUF_RENDERER").unwrap_or_else(|_| "0".to_string());
println!(
"engine=webkit url={url} private={} adblock={} ua={} linux_backend={:?} linux_disable_dmabuf={} effective_webkit_disable_dmabuf={effective_dmabuf}",
cli.private,
cfg.adblock,
if cli.ua_chrome { "chrome" } else { "native" },
cli.linux_backend,
cli.linux_disable_dmabuf,
);
}
Engine::Gecko => {
let firefox: Option<PathBuf> =
cli.firefox.clone().or_else(|| gecko::locate_firefox(cfg));
let firefox = firefox
.map(|path| path.display().to_string())
.unwrap_or_else(|| "not-found".to_string());
println!(
"engine=gecko url={url} private={} firefox={firefox} profile={}",
cli.private,
config::gecko_profile_dir().display()
);
}
}
}