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};
|
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>;
|
pub type Table = Vec<Category>;
|
||||||
|
|
||||||
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
|
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
|
||||||
|
|
|
||||||
20
src/main.rs
20
src/main.rs
|
|
@ -59,9 +59,17 @@ impl State {
|
||||||
fn new() -> Self {
|
fn new() -> Self {
|
||||||
let mut state = Self::default();
|
let mut state = Self::default();
|
||||||
if let Ok(file) =
|
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
|
state
|
||||||
|
|
@ -229,7 +237,13 @@ impl State {
|
||||||
impl Drop for State {
|
impl Drop for State {
|
||||||
fn drop(&mut self) {
|
fn drop(&mut self) {
|
||||||
ron::Options::default()
|
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();
|
.unwrap();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue