feat: persist notes
This commit is contained in:
parent
3cc6e65fa4
commit
8036728152
2 changed files with 24 additions and 3 deletions
|
|
@ -1,5 +1,12 @@
|
|||
use serde::{Deserialize, Serialize};
|
||||
|
||||
/// persistent data of the app; created when loading or saving
|
||||
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
|
||||
pub struct Saved {
|
||||
pub table: Table,
|
||||
pub notes: String,
|
||||
}
|
||||
|
||||
pub type Table = Vec<Category>;
|
||||
|
||||
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
|
||||
|
|
|
|||
20
src/main.rs
20
src/main.rs
|
|
@ -59,9 +59,17 @@ impl State {
|
|||
fn new() -> Self {
|
||||
let mut state = Self::default();
|
||||
if let Ok(file) =
|
||||
fs::File::open(data!()).inspect_err(|e| eprintln!("failed to read data file: {e}"))
|
||||
fs::File::open(data!()).inspect_err(|e| eprintln!("failed to open data file: {e}"))
|
||||
{
|
||||
state.table = ron::de::from_reader(file).unwrap();
|
||||
if let Ok(saved) = ron::de::from_reader::<_, data::Saved>(&file)
|
||||
.inspect_err(|e| eprintln!("failed to read current version of data file: {e}, trying to restore old version"))
|
||||
{
|
||||
state.table = saved.table;
|
||||
state.content = widget::text_editor::Content::with_text(&saved.notes);
|
||||
} else {
|
||||
// try to read it as an older version on error
|
||||
state.table = ron::de::from_reader(&file).unwrap();
|
||||
}
|
||||
}
|
||||
|
||||
state
|
||||
|
|
@ -229,7 +237,13 @@ impl State {
|
|||
impl Drop for State {
|
||||
fn drop(&mut self) {
|
||||
ron::Options::default()
|
||||
.to_io_writer(fs::File::create(data!()).unwrap(), &self.table)
|
||||
.to_io_writer(
|
||||
fs::File::create(data!()).unwrap(),
|
||||
&data::Saved {
|
||||
table: self.table.clone(),
|
||||
notes: self.content.text(),
|
||||
},
|
||||
)
|
||||
.unwrap();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue