use std::{process, thread::sleep, time::Duration};
use wallswitch::*;
fn main() {
let run_result = run();
match run_result {
Ok(_) => process::exit(0), Err(error) => {
eprintln!("{error}"); process::exit(1); }
}
}
fn run() -> WallSwitchResult<()> {
let config = Config::new()?; show_initial_msgs(&config)?; kill_other_instances(&config)?;
if config.once {
try_run_cycle(&config)
} else {
loop {
try_run_cycle(&config)?; }
}
}
fn try_run_cycle(config: &Config) -> WallSwitchResult<()> {
let mut count: usize = 0;
let images: Vec<FileInfo> = get_images(config)?;
if config.verbose {
dbg!("Images obtained for this cycle.");
display_files(&images, config);
}
let images_per_cycle = config.get_number_of_images();
'next_chunk: for files in images.chunks_exact(images_per_cycle) {
if !files.sizes_are_valid(config) {
dbg!("Image chunk skipped due to invalid sizes.");
continue 'next_chunk;
}
let figures: Vec<FileInfo> = update_images(files, config);
print!("{}", SliceDisplay(&figures));
for figure in &figures {
let dimension = figure.dimension_is_valid(config);
let file_name = figure.name_is_valid(config);
if !dimension || !file_name {
dbg!(format!(
"Invalid image found: {}. Skipping current chunk.",
figure.path.display()
));
continue 'next_chunk;
}
}
set_wallpaper(&figures, config)?;
count += 1;
if config.once {
break 'next_chunk;
}
sleep(Duration::from_secs(config.interval));
}
if count == 0 {
return Err(WallSwitchError::InsufficientNumber);
}
Ok(())
}