Implement specifying working_directory in config file

This commit is contained in:
2024-11-25 20:34:31 +01:00
parent 9a212a85ea
commit 26133a692f
5 changed files with 140 additions and 45 deletions

View File

@@ -1,3 +1,4 @@
mod config;
mod database;
mod sheet;
mod sheet_dao;
@@ -7,9 +8,10 @@ mod ui;
use std::{path::PathBuf, process};
use clap::Parser;
use config::Config;
use database::Database;
use env_logger::Env;
use log::error;
use log::{error, warn};
use relm4::RelmApp;
use crate::ui::app::{AppInitData, AppModel};
@@ -17,28 +19,49 @@ use crate::ui::app::{AppInitData, AppModel};
#[derive(Parser)]
#[command(author, version, about)]
struct Cli {
directory: PathBuf,
working_directory: Option<PathBuf>,
}
#[tokio::main]
async fn main() {
env_logger::Builder::from_env(Env::default().default_filter_or("debug")).init();
let mut config = match config::load_config("sheet-organizer", "config.toml") {
Ok(config) => config,
Err(err) => {
warn!("Could not get configuration: {:#}", err);
Config::default()
}
};
let cli = Cli::parse();
if !cli.directory.is_dir() {
error!("Sheet folder path is no dir or does not exist");
// Overwrite config by cli options if specified
if cli.working_directory.is_some() {
config.working_directory = cli.working_directory;
}
let working_directory = config.working_directory.unwrap_or_else(|| {
error!("No working directory specified, neither in config nor in cli. Exiting...");
process::exit(1);
});
if !working_directory.is_dir() {
error!(
"Working directory '{}' does not exist",
working_directory.to_string_lossy()
);
process::exit(1);
}
let database = Database::setup(cli.directory.join("database.sqlite"))
let database = Database::setup(working_directory.join("database.sqlite"))
.await
.unwrap();
let sheets = sheet_validation::load_and_validate_sheets(&database, &cli.directory).await;
let sheets = sheet_validation::load_and_validate_sheets(&database, &working_directory).await;
let app_init_data = AppInitData {
sheets,
database,
directory: cli.directory,
directory: working_directory,
};
let app = RelmApp::new("de.frajul.sheet-organizer");
// Pass empty command line args to allow my own parsing