Implement save on quit
This commit is contained in:
parent
db570abd96
commit
1dfd440524
@ -82,7 +82,6 @@ pub struct App {
|
||||
pub pending_list_state: ListState,
|
||||
|
||||
/// UI state: active pane
|
||||
#[serde(skip)]
|
||||
pub active_pane: ActivePane,
|
||||
|
||||
pub snowballing_iteration: usize,
|
||||
|
||||
@ -15,7 +15,7 @@ use ratatui::{
|
||||
|
||||
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
|
||||
enable_raw_mode()?;
|
||||
let mut stdout = io::stdout();
|
||||
@ -35,18 +35,17 @@ pub fn run(app: App) -> Result<(), Box<dyn Error>> {
|
||||
)?;
|
||||
terminal.show_cursor()?;
|
||||
|
||||
if let Err(err) = app_result {
|
||||
if let Err(err) = &app_result {
|
||||
println!("{err:?}");
|
||||
}
|
||||
|
||||
Ok(())
|
||||
Ok(app_result?)
|
||||
}
|
||||
|
||||
// TODO: Implement save on quit
|
||||
fn run_app<B: Backend>(
|
||||
terminal: &mut Terminal<B>,
|
||||
mut app: App,
|
||||
) -> io::Result<()>
|
||||
) -> io::Result<App>
|
||||
where
|
||||
io::Error: From<B::Error>,
|
||||
{
|
||||
@ -60,26 +59,7 @@ where
|
||||
}
|
||||
|
||||
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);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
20
src/main.rs
20
src/main.rs
@ -23,7 +23,7 @@ mod snowballing;
|
||||
// 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) {
|
||||
Ok(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;
|
||||
mod crossterm;
|
||||
use std::error::Error;
|
||||
@ -54,9 +66,11 @@ struct Args {
|
||||
|
||||
fn main() -> Result<(), Box<dyn Error>> {
|
||||
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(())
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user