82 lines
2.3 KiB
Rust
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()
|
|
);
|
|
}
|
|
}
|
|
}
|