use siteone_crawler::engine::initiator::Initiator;
use siteone_crawler::utils;
#[tokio::main]
async fn main() {
let _ = rustls::crypto::ring::default_provider().install_default();
utils::force_enabled_colors();
{
let argv: Vec<String> = std::env::args().collect();
for i in 0..argv.len() {
if let Some(tz) = argv[i].strip_prefix("--timezone=") {
unsafe {
std::env::set_var("TZ", tz);
}
break;
} else if argv[i] == "--timezone" && i + 1 < argv.len() {
unsafe {
std::env::set_var("TZ", &argv[i + 1]);
}
break;
}
}
}
let argv: Vec<String> = std::env::args().collect();
let initiator = match Initiator::new(&argv) {
Ok(i) => i,
Err(e) => {
let msg = match &e {
siteone_crawler::error::CrawlerError::Config(inner) => inner.clone(),
other => other.to_string(),
};
eprint!("{}", utils::get_color_text(&format!("ERROR: {}", msg), "red", false));
Initiator::print_help();
eprintln!(
"{}",
utils::get_color_text(&format!("\nERROR: {}\n", msg), "red", false)
);
std::process::exit(101);
}
};
let serve_markdown = initiator.get_options().serve_markdown_dir.clone();
let serve_offline = initiator.get_options().serve_offline_dir.clone();
let serve_port = initiator.get_options().serve_port as u16;
let serve_bind = initiator.get_options().serve_bind_address.clone();
if let Some(dir) = serve_markdown {
siteone_crawler::server::run(
std::path::PathBuf::from(dir),
siteone_crawler::server::ServeMode::Markdown,
serve_port,
&serve_bind,
)
.await;
return;
}
if let Some(dir) = serve_offline {
siteone_crawler::server::run(
std::path::PathBuf::from(dir),
siteone_crawler::server::ServeMode::Offline,
serve_port,
&serve_bind,
)
.await;
return;
}
let mut manager = match initiator.create_manager() {
Ok(m) => m,
Err(e) => {
eprintln!("Error initializing crawler: {}", e);
std::process::exit(1);
}
};
match manager.run().await {
Ok(exit_code) => {
if exit_code != 0 {
std::process::exit(exit_code);
}
}
Err(e) => {
eprintln!("Crawler error: {}", e);
std::process::exit(1);
}
}
}