|
@@ -3,6 +3,7 @@ mod message;
|
|
|
mod persistence;
|
|
mod persistence;
|
|
|
mod ui;
|
|
mod ui;
|
|
|
|
|
|
|
|
|
|
+use cursive::reexports::log;
|
|
|
use cursive::views::{
|
|
use cursive::views::{
|
|
|
Button, Dialog, DummyView, EditView, LinearLayout, NamedView, Panel, ScrollView, SelectView,
|
|
Button, Dialog, DummyView, EditView, LinearLayout, NamedView, Panel, ScrollView, SelectView,
|
|
|
TextArea, TextView,
|
|
TextArea, TextView,
|
|
@@ -88,34 +89,48 @@ pub fn save_appdata(siv: &mut Cursive) {
|
|
|
let mut file = std::fs::File::create(SAVE_FILE).expect("Failed to create savedata file.");
|
|
let mut file = std::fs::File::create(SAVE_FILE).expect("Failed to create savedata file.");
|
|
|
file.write_all(&fuzzy_bytes)
|
|
file.write_all(&fuzzy_bytes)
|
|
|
.expect("Failed to write savedata file.");
|
|
.expect("Failed to write savedata file.");
|
|
|
|
|
+
|
|
|
|
|
+ log::info!("Wrote savadata to file.");
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
pub fn load_appdata(siv: &mut Cursive) -> std::io::Result<()> {
|
|
pub fn load_appdata(siv: &mut Cursive) -> std::io::Result<()> {
|
|
|
|
|
+ let mut df = logging::warn_deferred("Savedata file not found; using defaults");
|
|
|
|
|
+
|
|
|
let mut file = std::fs::File::open(SAVE_FILE)?;
|
|
let mut file = std::fs::File::open(SAVE_FILE)?;
|
|
|
|
|
|
|
|
let mut bytes = Vec::new();
|
|
let mut bytes = Vec::new();
|
|
|
file.read_to_end(&mut bytes)?;
|
|
file.read_to_end(&mut bytes)?;
|
|
|
let useful_bytes = utils::binary::fuzzy_bytes(bytes, SAVE_FILE_FUZZY);
|
|
let useful_bytes = utils::binary::fuzzy_bytes(bytes, SAVE_FILE_FUZZY);
|
|
|
|
|
|
|
|
|
|
+ df.cancel();
|
|
|
|
|
+
|
|
|
let Ok(savedata) = persistence::Savedata::deserialize_checked(useful_bytes) else {
|
|
let Ok(savedata) = persistence::Savedata::deserialize_checked(useful_bytes) else {
|
|
|
// If the file is corrupted, create a new one
|
|
// If the file is corrupted, create a new one
|
|
|
|
|
+ logging::warn("Savedata file corrupted; using defaults.");
|
|
|
return Ok(());
|
|
return Ok(());
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
let appdata = Appdata::from(savedata);
|
|
let appdata = Appdata::from(savedata);
|
|
|
siv.set_user_data(appdata);
|
|
siv.set_user_data(appdata);
|
|
|
|
|
|
|
|
|
|
+ logging::info("Savedata file loaded.");
|
|
|
Ok(())
|
|
Ok(())
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
fn main() {
|
|
fn main() {
|
|
|
|
|
+ if cfg!(debug_assertions) {
|
|
|
|
|
+ logging::set_global_log_level(logging::LogLevel::Trace);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ logging::set_global_log_level(logging::LogLevel::Info);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
utils::rng::shuffle_rng();
|
|
utils::rng::shuffle_rng();
|
|
|
|
|
|
|
|
let mut siv = Cursive::default();
|
|
let mut siv = Cursive::default();
|
|
|
siv.set_user_data(Appdata::new());
|
|
siv.set_user_data(Appdata::new());
|
|
|
|
|
|
|
|
- // TODO: Add a notice when the file is corrupted.
|
|
|
|
|
- load_appdata(&mut siv);
|
|
|
|
|
|
|
+ // TODO (low): Add a notice when the file is corrupted.
|
|
|
|
|
+ let _ = load_appdata(&mut siv);
|
|
|
|
|
|
|
|
// Global hotkeys
|
|
// Global hotkeys
|
|
|
siv.add_global_callback(event::Key::Backspace, |siv| {
|
|
siv.add_global_callback(event::Key::Backspace, |siv| {
|
|
@@ -192,6 +207,7 @@ fn main() {
|
|
|
appdata.local_channels.push(input.to_string());
|
|
appdata.local_channels.push(input.to_string());
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
|
|
+ save_appdata(siv);
|
|
|
ui::visual_update(siv);
|
|
ui::visual_update(siv);
|
|
|
ui::keybind_close_manual_end(siv, false);
|
|
ui::keybind_close_manual_end(siv, false);
|
|
|
} else {
|
|
} else {
|
|
@@ -321,6 +337,7 @@ fn main() {
|
|
|
appdata.username = input.to_string();
|
|
appdata.username = input.to_string();
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
|
|
+ save_appdata(siv);
|
|
|
ui::visual_update(siv);
|
|
ui::visual_update(siv);
|
|
|
ui::keybind_close_manual_end(siv, false);
|
|
ui::keybind_close_manual_end(siv, false);
|
|
|
} else {
|
|
} else {
|
|
@@ -374,6 +391,7 @@ fn main() {
|
|
|
view.get_mut().remove_item(idx);
|
|
view.get_mut().remove_item(idx);
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
|
|
+ save_appdata(siv);
|
|
|
ui::visual_update(siv);
|
|
ui::visual_update(siv);
|
|
|
});
|
|
});
|
|
|
wordslist_view.add_all_str(&appdata.blocked_phrases);
|
|
wordslist_view.add_all_str(&appdata.blocked_phrases);
|
|
@@ -405,6 +423,7 @@ fn main() {
|
|
|
},
|
|
},
|
|
|
);
|
|
);
|
|
|
|
|
|
|
|
|
|
+ save_appdata(siv);
|
|
|
ui::visual_update(siv);
|
|
ui::visual_update(siv);
|
|
|
});
|
|
});
|
|
|
|
|
|
|
@@ -519,6 +538,7 @@ fn main() {
|
|
|
}
|
|
}
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
|
|
+ save_appdata(siv);
|
|
|
ui::visual_update(siv);
|
|
ui::visual_update(siv);
|
|
|
ui::keybind_close_manual_end(siv, false);
|
|
ui::keybind_close_manual_end(siv, false);
|
|
|
})
|
|
})
|