|
|
@@ -28,6 +28,7 @@ const MAX_USERNAME_LENGTH: usize = 16;
|
|
|
const DEFAULT_USERNAME_PREFIX: &str = "Myst";
|
|
|
|
|
|
const SAVE_FILE: &str = "savedata.bin";
|
|
|
+const SAVE_FILE_FUZZY: u64 = 0b0110110001101001011001110110110101100001001000000101100001000100;
|
|
|
const REMOTE_REFRESH_RATE: u64 = 10;
|
|
|
|
|
|
// TODO: Add server refresh rate
|
|
|
@@ -77,9 +78,10 @@ pub fn save_appdata(siv: &mut Cursive) {
|
|
|
|
|
|
let savedata = persistence::Savedata::from(appdata);
|
|
|
let bytes = savedata.serialize_checked();
|
|
|
+ let fuzzy_bytes = utils::binary::fuzzy_bytes(bytes, SAVE_FILE_FUZZY);
|
|
|
|
|
|
let mut file = std::fs::File::create(SAVE_FILE).expect("Failed to create savedata file.");
|
|
|
- file.write_all(&bytes)
|
|
|
+ file.write_all(&fuzzy_bytes)
|
|
|
.expect("Failed to write savedata file.");
|
|
|
}
|
|
|
|
|
|
@@ -88,10 +90,14 @@ pub fn load_appdata(siv: &mut Cursive) -> std::io::Result<()> {
|
|
|
|
|
|
let mut bytes = Vec::new();
|
|
|
file.read_to_end(&mut bytes)?;
|
|
|
+ let useful_bytes = utils::binary::fuzzy_bytes(bytes, SAVE_FILE_FUZZY);
|
|
|
|
|
|
- let savedata = persistence::Savedata::deserialize_checked(bytes).unwrap();
|
|
|
- let appdata = Appdata::from(savedata);
|
|
|
+ let Ok(savedata) = persistence::Savedata::deserialize_checked(useful_bytes) else {
|
|
|
+ // If the file is corrupted, create a new one
|
|
|
+ return Ok(());
|
|
|
+ };
|
|
|
|
|
|
+ let appdata = Appdata::from(savedata);
|
|
|
siv.set_user_data(appdata);
|
|
|
|
|
|
Ok(())
|