extern crate image;
extern crate rand;
use mimalloc::MiMalloc;
use std::env;
use winit::event_loop::EventLoop;
#[global_allocator]
static GLOBAL: MiMalloc = MiMalloc;
mod cli;
mod config;
mod display;
mod display_manager;
mod download;
mod filesystem;
mod gnome;
mod image_processor;
mod kde;
mod utils;
mod wallhaven;
mod xfce;
#[cfg(test)]
mod config_test;
#[cfg(test)]
mod download_test;
#[cfg(test)]
mod filesystem_test;
#[cfg(test)]
mod image_processor_test;
#[cfg(test)]
mod wallhaven_test;
fn main() {
let window = winit::window::WindowBuilder::new()
.with_visible(false)
.build(&EventLoop::new().unwrap())
.unwrap();
let args: Vec<String> = env::args().skip(1).collect();
let config = config::parse_cli_args(args);
let display_info = display::get_info(window);
let image_data = if config::is_url(&config.query) {
download::get_data(&config.query)
} else if config::is_local_path(&config.query) {
filesystem::read_file(&config.query)
} else {
match wallhaven::get_image_data(&config, &display_info) {
Ok(data) => data,
Err(error) => {
eprintln!("Error: {}", error);
std::process::exit(1);
}
}
};
let image = image_processor::scale_image(image_data, config.span, &display_info);
display_manager::change_wallpaper(image, &config);
}