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,
|
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,
|
||||||
|
|||||||
@ -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);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|||||||
20
src/main.rs
20
src/main.rs
@ -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(())
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user