From f48b61bd9a10a583c1418553d5ff8bbd3398720f Mon Sep 17 00:00:00 2001 From: gram Date: Fri, 6 Feb 2026 14:02:58 +0100 Subject: [PATCH] New settings --- Cargo.lock | 54 +++++++++++++++++++++++++++++++++++++----------------- Cargo.toml | 10 +++++----- src/vfs.rs | 20 +++++++++++++++----- 3 files changed, 57 insertions(+), 27 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 325eddc..060aefc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -81,9 +81,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.100" +version = "1.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" +checksum = "5f0e0fee31ef5ed1ba1316088939cea399010ed7731dba877ed44aeb407a75ea" [[package]] name = "arbitrary" @@ -193,9 +193,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.54" +version = "4.5.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6e6ff9dcd79cff5cd969a17a545d79e84ab086e444102a591e288a8aa3ce394" +checksum = "6899ea499e3fb9305a65d5ebf6e3d2248c5fab291f300ad0a704fbe142eae31a" dependencies = [ "clap_builder", "clap_derive", @@ -203,9 +203,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.54" +version = "4.5.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa42cf4d2b7a41bc8f663a7cab4031ebafa1bf3875705bfaf8466dc60ab52c00" +checksum = "7b12c8b680195a62a8364d16b8447b01b6c2c8f9aaf68bee653be34d4245e238" dependencies = [ "anstream", "anstyle", @@ -215,9 +215,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.49" +version = "4.5.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671" +checksum = "a92793da1a46a5f2a02a6f4c46c6496b28c43638adea8306fcb0caa1634f24e5" dependencies = [ "heck", "proc-macro2", @@ -506,9 +506,9 @@ dependencies = [ [[package]] name = "firefly-types" -version = "0.7.1" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e7922d445b31f0c96a1712f504d8dfd720df64cd3acc18324109d928e11c00a" +checksum = "4d795a62847d7881dd8fb63892eafd57e0ebe40534c43dc99b9b51ff4d6283d3" dependencies = [ "postcard", "serde", @@ -547,9 +547,9 @@ dependencies = [ [[package]] name = "flate2" -version = "1.1.5" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfe33edd8e85a12a67454e37f8c75e730830d83e313556ab9ebf9ee7fbeb3bfb" +checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c" dependencies = [ "crc32fast", "miniz_oxide", @@ -709,12 +709,13 @@ dependencies = [ [[package]] name = "image" -version = "0.25.6" +version = "0.25.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db35664ce6b9810857a38a906215e75a9c879f0696556a39f59c62829710251a" +checksum = "e6506c6c10786659413faa717ceebcb8f70731c0a60cbae39795fdf114519c1a" dependencies = [ "bytemuck", "byteorder-lite", + "moxcms", "num-traits", "png", ] @@ -910,6 +911,16 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "moxcms" +version = "0.7.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac9557c559cd6fc9867e122e20d2cbefc9ca29d80d027a8e39310920ed2f0a97" +dependencies = [ + "num-traits", + "pxfm", +] + [[package]] name = "nibble_vec" version = "0.1.0" @@ -1000,11 +1011,11 @@ checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" [[package]] name = "png" -version = "0.17.16" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82151a2fc869e011c153adc57cf2789ccb8d9906ce52c0b39a6b5697749d7526" +checksum = "97baced388464909d42d89643fe4361939af9b7ce7a31ee32a168f832a70f2a0" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.9.0", "crc32fast", "fdeflate", "flate2", @@ -1041,6 +1052,15 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "pxfm" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7186d3822593aa4393561d186d1393b3923e9d6163d3fbfd6e825e3e6cf3e6a8" +dependencies = [ + "num-traits", +] + [[package]] name = "quote" version = "1.0.38" diff --git a/Cargo.toml b/Cargo.toml index 4a4013a..861747b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,11 +19,11 @@ categories = [ [dependencies] # Simpler error handling -anyhow = "1.0.100" +anyhow = "1.0.101" # Get current date and time chrono = { version = "0.4.42", default-features = false, features = ["clock"] } # Framework for parsing CLI args -clap = { version = "4.5.54", features = ["derive"] } +clap = { version = "4.5.57", features = ["derive"] } # Detect message boundaries in serial port output from device cobs = "0.5.0" # Generate PNG images (sign chunks) @@ -33,13 +33,13 @@ crossterm = "0.29.0" # Find the best place to sotre the VFS directories = "6.0.0" # Serialize app config into meta file in the ROM -firefly-types = { version = "0.7.1" } +firefly-types = { version = "0.8.0" } # Read gz archives (to install emulator). -flate2 = "1.1.5" +flate2 = "1.1.9" # Decode wav files hound = "3.5.1" # Parse PNG images -image = { version = "0.25.6", default-features = false, features = ["png"] } +image = { version = "0.25.9", default-features = false, features = ["png"] } # Generate PNG images (compress frame) libflate = "2.2.1" # Random device name generation diff --git a/src/vfs.rs b/src/vfs.rs index 9fec519..108190f 100644 --- a/src/vfs.rs +++ b/src/vfs.rs @@ -32,13 +32,12 @@ pub fn init_vfs(path: &Path) -> anyhow::Result<()> { fs::create_dir_all(path.join("sys").join("priv")).context("create sys/priv directory")?; fs::create_dir_all(path.join("data")).context("create data directory")?; let settings_path = path.join("sys").join("config"); - if !settings_path.exists() { + println!("{}", is_valid_settings(&settings_path)); + if !is_valid_settings(&settings_path) { let mut settings = firefly_types::Settings { - xp: 0, - badges: 0, - lang: [b'e', b'n'], - name: generate_valid_name(), timezone: detect_tz(), + name: generate_valid_name(), + ..Default::default() }; if !settings.timezone.contains('/') { settings.timezone = "Europe/Amsterdam".to_string(); @@ -50,6 +49,17 @@ pub fn init_vfs(path: &Path) -> anyhow::Result<()> { Ok(()) } +fn is_valid_settings(path: &Path) -> bool { + if !path.exists() { + return false; + } + let Ok(data) = std::fs::read(path) else { + return false; + }; + let res = firefly_types::Settings::decode(&data); + res.is_ok() +} + /// Generate a random valid device name. pub fn generate_valid_name() -> String { loop {