Implement save on quit

This commit is contained in:
Andreas Tsouchlos 2025-12-29 23:33:07 +02:00
parent db570abd96
commit 1dfd440524
3 changed files with 22 additions and 29 deletions

View File

@ -82,7 +82,6 @@ pub struct App {
pub pending_list_state: ListState, pub pending_list_state: ListState,
/// UI state: active pane /// UI state: active pane
#[serde(skip)]
pub active_pane: ActivePane, pub active_pane: ActivePane,
pub snowballing_iteration: usize, pub snowballing_iteration: usize,

View File

@ -15,7 +15,7 @@ use ratatui::{
use crate::{app::App, ui}; use crate::{app::App, ui};
pub fn run(app: App) -> Result<(), Box<dyn Error>> { pub fn run(app: App) -> Result<App, Box<dyn Error>> {
// setup terminal // setup terminal
enable_raw_mode()?; enable_raw_mode()?;
let mut stdout = io::stdout(); let mut stdout = io::stdout();
@ -35,18 +35,17 @@ pub fn run(app: App) -> Result<(), Box<dyn Error>> {
)?; )?;
terminal.show_cursor()?; terminal.show_cursor()?;
if let Err(err) = app_result { if let Err(err) = &app_result {
println!("{err:?}"); println!("{err:?}");
} }
Ok(()) Ok(app_result?)
} }
// TODO: Implement save on quit
fn run_app<B: Backend>( fn run_app<B: Backend>(
terminal: &mut Terminal<B>, terminal: &mut Terminal<B>,
mut app: App, mut app: App,
) -> io::Result<()> ) -> io::Result<App>
where where
io::Error: From<B::Error>, io::Error: From<B::Error>,
{ {
@ -60,26 +59,7 @@ where
} }
if app.should_quit { if app.should_quit {
return Ok(()); return Ok(app);
} }
} }
} }
// pub fn run_app<B: Backend>(
// terminal: &mut Terminal<B>,
// mut app: App,
// ) -> io::Result<App>
// where
// io::Error: From<B::Error>,
// {
// loop {
// terminal.draw(|f| ui(f, &app))?;
//
// if let Event::Key(key) = event::read()? {
// app.handle_key(key.code);
// if app.should_quit {
// return Ok(app);
// }
// }
// }
// }

View File

@ -23,7 +23,7 @@ mod snowballing;
// Ok(()) // Ok(())
// } // }
fn load_savefile(filename: &String) -> Result<App, serde_json::Error> { fn deserialize_savefile(filename: &String) -> Result<App, serde_json::Error> {
match std::fs::read_to_string(filename) { match std::fs::read_to_string(filename) {
Ok(content) => { Ok(content) => {
let mut app: App = serde_json::from_str(&content)?; let mut app: App = serde_json::from_str(&content)?;
@ -40,6 +40,18 @@ fn load_savefile(filename: &String) -> Result<App, serde_json::Error> {
} }
} }
fn serialize_savefile(
app: &App,
filename: &String,
) -> Result<(), serde_json::Error> {
if let Ok(serialized) = serde_json::to_string_pretty(&app) {
std::fs::write(filename, serialized)
.expect("We can't really deal with io errors ourselves");
}
Ok(())
}
use clap::Parser; use clap::Parser;
mod crossterm; mod crossterm;
use std::error::Error; use std::error::Error;
@ -54,9 +66,11 @@ struct Args {
fn main() -> Result<(), Box<dyn Error>> { fn main() -> Result<(), Box<dyn Error>> {
let args = Args::parse(); let args = Args::parse();
let app = load_savefile(&args.savefile)?; let starting_app_state = deserialize_savefile(&args.savefile)?;
crate::crossterm::run(app)?; let final_app_state = crate::crossterm::run(starting_app_state)?;
serialize_savefile(&final_app_state, &args.savefile)?;
Ok(()) Ok(())
} }