Persist app state (#21)

This commit is contained in:
Jens K.
2024-12-22 18:56:55 +01:00
committed by GitHub
parent 2cf411e2ae
commit c9b444e91a
12 changed files with 336 additions and 112 deletions

View File

@@ -6,6 +6,7 @@ mod events;
mod logging;
mod args;
mod storage;
mod terminal;
mod utils;
mod widgets;
@@ -14,20 +15,38 @@ use app::App;
use args::Args;
use clap::Parser;
use color_eyre::Result;
use config::Config;
use storage::{AppStorage, Storage};
#[tokio::main]
async fn main() -> Result<()> {
let config = config::Config::init()?;
let Config { log_dir, data_dir } = Config::init()?;
#[cfg(debug_assertions)]
logging::Logger::new(config.log_dir).init()?;
logging::Logger::new(log_dir).init()?;
color_eyre::install()?;
let args = Args::parse();
let terminal = terminal::setup()?;
let events = events::Events::new();
App::new(args).run(terminal, events).await?;
// get args given by CLI
let args = Args::parse();
// check persistant storage
let storage = Storage::new(data_dir);
// option to reset previous stored data to `default`
let stg = if args.reset {
AppStorage::default()
} else {
storage.load().unwrap_or_default()
};
// merge `Args` and `AppStorage`.
let app_args = (args, stg).into();
let app_storage = App::new(app_args).run(terminal, events).await?.to_storage();
// store app state persistantly
storage.save(app_storage)?;
terminal::teardown()?;
Ok(())