caery 0.1.22

KnottDynamics-styled Linux desktop media converter for audio and video.
Documentation
use eframe::egui;
use std::process;

fn main() -> eframe::Result<()> {
    match caery::cli::handle_args(std::env::args().skip(1)) {
        Ok(caery::cli::StartupAction::Gui) => run_gui(),
        Ok(caery::cli::StartupAction::Handled) => Ok(()),
        Err(error) => {
            eprintln!("caery: {error}");
            if error.is_usage() {
                eprintln!("{}", caery::cli::short_usage());
            }
            process::exit(error.exit_code());
        }
    }
}

fn run_gui() -> eframe::Result<()> {
    let mut viewport = egui::ViewportBuilder::default()
        .with_title("Caery")
        .with_app_id("caery")
        .with_inner_size([1060.0, 720.0])
        .with_min_inner_size([680.0, 500.0]);
    if let Some(icon) = load_window_icon() {
        viewport = viewport.with_icon(icon);
    }

    let options = eframe::NativeOptions {
        viewport,
        ..Default::default()
    };

    eframe::run_native(
        "Caery",
        options,
        Box::new(|cc| Ok(Box::new(caery::app::CaeryApp::new(cc)))),
    )
}

fn load_window_icon() -> Option<egui::IconData> {
    let bytes = include_bytes!("../assets/logo.png");
    let image = image::load_from_memory(bytes).ok()?.to_rgba8();
    let (width, height) = image.dimensions();

    Some(egui::IconData {
        rgba: image.into_raw(),
        width,
        height,
    })
}