diff --git a/Cargo.lock b/Cargo.lock index 6d4e753..551289c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -105,9 +105,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.99" +version = "1.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0674a1ddeecb70197781e945de4b3b8ffb61fa939a5597bcf48503737663100" +checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" [[package]] name = "arrayref" @@ -440,9 +440,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.37" +version = "1.2.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65193589c6404eb80b450d618eaf9a2cafaaafd57ecce47370519ef674a7bd44" +checksum = "80f41ae168f955c12fb8960b057d70d0ca153fb83182b57d86380443527be7e9" dependencies = [ "find-msvc-tools", "jobserver", @@ -788,7 +788,7 @@ checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" [[package]] name = "dpi" version = "0.1.1" -source = "git+https://github.com/iced-rs/winit.git?rev=11414b6aa45699f038114e61b4ddf5102b2d3b4b#11414b6aa45699f038114e61b4ddf5102b2d3b4b" +source = "git+https://github.com/iced-rs/winit.git?rev=05b8ff17a06562f0a10bb46e6eaacbe2a95cb5ed#05b8ff17a06562f0a10bb46e6eaacbe2a95cb5ed" [[package]] name = "drm" @@ -950,9 +950,9 @@ dependencies = [ [[package]] name = "find-msvc-tools" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fd99930f64d146689264c637b5af2f0233a933bef0d8570e2526bf9e083192d" +checksum = "1ced73b1dacfc750a6db6c0a0c3a3853c8b41997e2e2c563dc90804ae6867959" [[package]] name = "fixedbitset" @@ -1344,7 +1344,7 @@ dependencies = [ [[package]] name = "iced" version = "0.14.0-dev" -source = "git+https://github.com/iced-rs/iced.git#4cd35f74628d2d05c07af6b2ccf8b86a09466274" +source = "git+https://github.com/iced-rs/iced.git#db5a1f6353b9f8520c4f9633d1cdc90242c2afe1" dependencies = [ "iced_core", "iced_debug", @@ -1359,7 +1359,7 @@ dependencies = [ [[package]] name = "iced_core" version = "0.14.0-dev" -source = "git+https://github.com/iced-rs/iced.git#4cd35f74628d2d05c07af6b2ccf8b86a09466274" +source = "git+https://github.com/iced-rs/iced.git#db5a1f6353b9f8520c4f9633d1cdc90242c2afe1" dependencies = [ "bitflags 2.9.4", "bytes", @@ -1376,7 +1376,7 @@ dependencies = [ [[package]] name = "iced_debug" version = "0.14.0-dev" -source = "git+https://github.com/iced-rs/iced.git#4cd35f74628d2d05c07af6b2ccf8b86a09466274" +source = "git+https://github.com/iced-rs/iced.git#db5a1f6353b9f8520c4f9633d1cdc90242c2afe1" dependencies = [ "iced_core", "iced_futures", @@ -1386,7 +1386,7 @@ dependencies = [ [[package]] name = "iced_futures" version = "0.14.0-dev" -source = "git+https://github.com/iced-rs/iced.git#4cd35f74628d2d05c07af6b2ccf8b86a09466274" +source = "git+https://github.com/iced-rs/iced.git#db5a1f6353b9f8520c4f9633d1cdc90242c2afe1" dependencies = [ "futures", "iced_core", @@ -1399,7 +1399,7 @@ dependencies = [ [[package]] name = "iced_graphics" version = "0.14.0-dev" -source = "git+https://github.com/iced-rs/iced.git#4cd35f74628d2d05c07af6b2ccf8b86a09466274" +source = "git+https://github.com/iced-rs/iced.git#db5a1f6353b9f8520c4f9633d1cdc90242c2afe1" dependencies = [ "bitflags 2.9.4", "bytemuck", @@ -1417,7 +1417,7 @@ dependencies = [ [[package]] name = "iced_program" version = "0.14.0-dev" -source = "git+https://github.com/iced-rs/iced.git#4cd35f74628d2d05c07af6b2ccf8b86a09466274" +source = "git+https://github.com/iced-rs/iced.git#db5a1f6353b9f8520c4f9633d1cdc90242c2afe1" dependencies = [ "iced_graphics", "iced_runtime", @@ -1426,7 +1426,7 @@ dependencies = [ [[package]] name = "iced_renderer" version = "0.14.0-dev" -source = "git+https://github.com/iced-rs/iced.git#4cd35f74628d2d05c07af6b2ccf8b86a09466274" +source = "git+https://github.com/iced-rs/iced.git#db5a1f6353b9f8520c4f9633d1cdc90242c2afe1" dependencies = [ "iced_graphics", "iced_tiny_skia", @@ -1438,7 +1438,7 @@ dependencies = [ [[package]] name = "iced_runtime" version = "0.14.0-dev" -source = "git+https://github.com/iced-rs/iced.git#4cd35f74628d2d05c07af6b2ccf8b86a09466274" +source = "git+https://github.com/iced-rs/iced.git#db5a1f6353b9f8520c4f9633d1cdc90242c2afe1" dependencies = [ "bytes", "iced_core", @@ -1451,7 +1451,7 @@ dependencies = [ [[package]] name = "iced_tiny_skia" version = "0.14.0-dev" -source = "git+https://github.com/iced-rs/iced.git#4cd35f74628d2d05c07af6b2ccf8b86a09466274" +source = "git+https://github.com/iced-rs/iced.git#db5a1f6353b9f8520c4f9633d1cdc90242c2afe1" dependencies = [ "bytemuck", "cosmic-text", @@ -1467,7 +1467,7 @@ dependencies = [ [[package]] name = "iced_wgpu" version = "0.14.0-dev" -source = "git+https://github.com/iced-rs/iced.git#4cd35f74628d2d05c07af6b2ccf8b86a09466274" +source = "git+https://github.com/iced-rs/iced.git#db5a1f6353b9f8520c4f9633d1cdc90242c2afe1" dependencies = [ "bitflags 2.9.4", "bytemuck", @@ -1486,7 +1486,7 @@ dependencies = [ [[package]] name = "iced_widget" version = "0.14.0-dev" -source = "git+https://github.com/iced-rs/iced.git#4cd35f74628d2d05c07af6b2ccf8b86a09466274" +source = "git+https://github.com/iced-rs/iced.git#db5a1f6353b9f8520c4f9633d1cdc90242c2afe1" dependencies = [ "iced_renderer", "iced_runtime", @@ -1501,7 +1501,7 @@ dependencies = [ [[package]] name = "iced_winit" version = "0.14.0-dev" -source = "git+https://github.com/iced-rs/iced.git#4cd35f74628d2d05c07af6b2ccf8b86a09466274" +source = "git+https://github.com/iced-rs/iced.git#db5a1f6353b9f8520c4f9633d1cdc90242c2afe1" dependencies = [ "iced_debug", "iced_program", @@ -1524,9 +1524,9 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "indexmap" -version = "2.11.1" +version = "2.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "206a8042aec68fa4a62e8d3f7aa4ceb508177d9324faf261e1959e495b7a1921" +checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5" dependencies = [ "equivalent", "hashbrown", @@ -1566,9 +1566,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.78" +version = "0.3.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c0b063578492ceec17683ef2f8c5e89121fbd0b172cbc280635ab7567db2738" +checksum = "852f13bec5eba4ba9afbeb93fd7c13fe56147f055939ae21c43a29a0ecb2702e" dependencies = [ "once_cell", "wasm-bindgen", @@ -2504,9 +2504,9 @@ dependencies = [ [[package]] name = "planter-core" -version = "0.0.3" +version = "0.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a11a1c5d8229a6c9dc31e8d67076307eb62e1f52d31b35b7d57da0c5c0394b1" +checksum = "ad0fb9936c9c9a37857da2b05ff5f9e085dd907068df67fa1ff276e9c2c8255c" dependencies = [ "anyhow", "bon", @@ -2589,9 +2589,9 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "3.3.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" +checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" dependencies = [ "toml_edit", ] @@ -2947,9 +2947,9 @@ checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" [[package]] name = "serde" -version = "1.0.224" +version = "1.0.225" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6aaeb1e94f53b16384af593c71e20b095e958dab1d26939c1b70645c5cfbcc0b" +checksum = "fd6c24dee235d0da097043389623fb913daddf92c76e9f5a1db88607a0bcbd1d" dependencies = [ "serde_core", "serde_derive", @@ -2957,18 +2957,18 @@ dependencies = [ [[package]] name = "serde_core" -version = "1.0.224" +version = "1.0.225" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32f39390fa6346e24defbcdd3d9544ba8a19985d0af74df8501fbfe9a64341ab" +checksum = "659356f9a0cb1e529b24c01e43ad2bdf520ec4ceaf83047b83ddcc2251f96383" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.224" +version = "1.0.225" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87ff78ab5e8561c9a675bfc1785cb07ae721f0ee53329a595cefd8c04c2ac4e0" +checksum = "0ea936adf78b1f766949a4977b91d2f5595825bd6ec079aa9543ad2685fc4516" dependencies = [ "proc-macro2", "quote", @@ -3319,18 +3319,31 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "toml_datetime" -version = "0.6.11" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" +checksum = "32f1085dec27c2b6632b04c80b3bb1b4300d6495d1e129693bdda7d91e72eec1" +dependencies = [ + "serde_core", +] [[package]] name = "toml_edit" -version = "0.22.27" +version = "0.23.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" +checksum = "f3effe7c0e86fdff4f69cdd2ccc1b96f933e24811c5441d44904e8683e27184b" dependencies = [ "indexmap", "toml_datetime", + "toml_parser", + "winnow", +] + +[[package]] +name = "toml_parser" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cf893c33be71572e0e9aa6dd15e6677937abd686b066eac3f8cd3531688a627" +dependencies = [ "winnow", ] @@ -3450,9 +3463,9 @@ checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" [[package]] name = "unicode-width" -version = "0.2.1" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a1a07cc7db3810833284e8d372ccdc6da29741639ecc70c9ec107df0fa6154c" +checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" [[package]] name = "urlencoding" @@ -3487,9 +3500,9 @@ dependencies = [ [[package]] name = "wasi" -version = "0.14.6+wasi-0.2.4" +version = "0.14.7+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f71243a3f320c00a8459e455c046ce571229c2f31fd11645d9dc095e3068ca0" +checksum = "883478de20367e224c0090af9cf5f9fa85bed63a95c1abf3afc5c083ebc06e8c" dependencies = [ "wasip2", ] @@ -3505,9 +3518,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.101" +version = "0.2.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e14915cadd45b529bb8d1f343c4ed0ac1de926144b746e2710f9cd05df6603b" +checksum = "ab10a69fbd0a177f5f649ad4d8d3305499c42bab9aef2f7ff592d0ec8f833819" dependencies = [ "cfg-if", "once_cell", @@ -3518,9 +3531,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.101" +version = "0.2.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e28d1ba982ca7923fd01448d5c30c6864d0a14109560296a162f80f305fb93bb" +checksum = "0bb702423545a6007bbc368fde243ba47ca275e549c8a28617f56f6ba53b1d1c" dependencies = [ "bumpalo", "log", @@ -3532,9 +3545,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.51" +version = "0.4.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ca85039a9b469b38336411d6d6ced91f3fc87109a2a27b0c197663f5144dffe" +checksum = "a0b221ff421256839509adbb55998214a70d829d3a28c69b4a6672e9d2a42f67" dependencies = [ "cfg-if", "js-sys", @@ -3545,9 +3558,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.101" +version = "0.2.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c3d463ae3eff775b0c45df9da45d68837702ac35af998361e2c84e7c5ec1b0d" +checksum = "fc65f4f411d91494355917b605e1480033152658d71f722a90647f56a70c88a0" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -3555,9 +3568,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.101" +version = "0.2.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bb4ce89b08211f923caf51d527662b75bdc9c9c7aab40f86dcb9fb85ac552aa" +checksum = "ffc003a991398a8ee604a401e194b6b3a39677b3173d6e74495eb51b82e99a32" dependencies = [ "proc-macro2", "quote", @@ -3568,9 +3581,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.101" +version = "0.2.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f143854a3b13752c6950862c906306adb27c7e839f7414cec8fea35beab624c1" +checksum = "293c37f4efa430ca14db3721dfbe48d8c33308096bd44d80ebaa775ab71ba1cf" dependencies = [ "unicode-ident", ] @@ -3700,9 +3713,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.78" +version = "0.3.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77e4b637749ff0d92b8fad63aa1f7cff3cbe125fd49c175cd6345e7272638b12" +checksum = "fbe734895e869dc429d78c4b433f8d17d95f8d05317440b4fad5ab2d33e596dc" dependencies = [ "js-sys", "wasm-bindgen", @@ -4358,7 +4371,7 @@ checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" [[package]] name = "winit" version = "0.30.8" -source = "git+https://github.com/iced-rs/winit.git?rev=11414b6aa45699f038114e61b4ddf5102b2d3b4b#11414b6aa45699f038114e61b4ddf5102b2d3b4b" +source = "git+https://github.com/iced-rs/winit.git?rev=05b8ff17a06562f0a10bb46e6eaacbe2a95cb5ed#05b8ff17a06562f0a10bb46e6eaacbe2a95cb5ed" dependencies = [ "ahash", "android-activity", diff --git a/Cargo.toml b/Cargo.toml index 619bb36..bf3c65e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,7 +14,7 @@ edition = "2024" chrono = "0.4.42" iced = {features = ["advanced", "lazy"], version = "0.14.0-dev"} once_cell = "1.21.3" -planter-core = "0.0.3" +planter-core = "0.0.4" # planter-core = {path = "../planter-core"} regex = "1.11.2" diff --git a/flake.lock b/flake.lock index dcc8867..46ff368 100644 --- a/flake.lock +++ b/flake.lock @@ -20,11 +20,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1757745802, - "narHash": "sha256-hLEO2TPj55KcUFUU1vgtHE9UEIOjRcH/4QbmfHNF820=", + "lastModified": 1758277210, + "narHash": "sha256-iCGWf/LTy+aY0zFu8q12lK8KuZp7yvdhStehhyX1v8w=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "c23193b943c6c689d70ee98ce3128239ed9e32d1", + "rev": "8eaee110344796db060382e15d3af0a9fc396e0e", "type": "github" }, "original": { @@ -62,11 +62,11 @@ "nixpkgs": "nixpkgs_2" }, "locked": { - "lastModified": 1757930296, - "narHash": "sha256-Z9u5VszKs8rfEvg2AsFucWEjl7wMtAln9l1b78cfBh4=", + "lastModified": 1758335443, + "narHash": "sha256-2jaGMj32IckpZgBjn7kG4zyJl66T+2A1Fn2ppkHh91o=", "owner": "oxalica", "repo": "rust-overlay", - "rev": "09442765a05c2ca617c20ed68d9613da92a2d96b", + "rev": "f1ccb14649cf87e48051a6ac3a571b4a57d84ff3", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 5a27287..0d3b127 100644 --- a/flake.nix +++ b/flake.nix @@ -20,7 +20,6 @@ devShells.default = mkShell rec { buildInputs = [ bacon - cargo-udeps cargo-edit rust-analyzer cargo-deny diff --git a/src/ui/tasks_page.rs b/src/ui/tasks_page.rs index c231302..22b617c 100644 --- a/src/ui/tasks_page.rs +++ b/src/ui/tasks_page.rs @@ -60,6 +60,8 @@ impl Default for TasksState { } } +const DATE_FORMAT: &str = "%Y-%m-%d %H:%M"; + pub fn update(state: &mut TasksState, project: &mut Project, message: TasksMessage) { match message { TasksMessage::UpdateName(i, n) => { @@ -75,26 +77,28 @@ pub fn update(state: &mut TasksState, project: &mut Project, message: TasksMessa project.task_mut(i).unwrap().toggle_completed(); } TasksMessage::UpdateStart(i, s) => { - if let Ok(date) = NaiveDateTime::parse_from_str(&s, "%Y-%m-%d %H:%M") { - project.task_mut(i).unwrap().edit_start(date.and_utc()); - if let Some(duration) = project.task_mut(i).unwrap().duration() { - state.repr[i].duration = duration.to_string(); - state.repr[i].duration = format!("{} hour(s)", duration.num_hours()); - } - state.repr[i].is_start_err = false; + if let Ok(date) = NaiveDateTime::parse_from_str(&s, DATE_FORMAT) + && project + .task_mut(i) + .unwrap() + .edit_start(date.and_utc()) + .is_ok() + { + update_start_finish_duration(state, project, i); } else { state.repr[i].is_start_err = true; } state.repr[i].start = s; } TasksMessage::UpdateFinish(i, s) => { - if let Ok(date) = NaiveDateTime::parse_from_str(&s, "%Y-%m-%d %H:%M") { - project.task_mut(i).unwrap().edit_finish(date.and_utc()); - if let Some(duration) = project.task_mut(i).unwrap().duration() { - state.repr[i].duration = format!("{} hour(s)", duration.num_hours()); - } - - state.repr[i].is_finish_err = false; + if let Ok(date) = NaiveDateTime::parse_from_str(&s, DATE_FORMAT) + && project + .task_mut(i) + .unwrap() + .edit_finish(date.and_utc()) + .is_ok() + { + update_start_finish_duration(state, project, i); } else { state.repr[i].is_finish_err = true; } @@ -103,7 +107,7 @@ pub fn update(state: &mut TasksState, project: &mut Project, message: TasksMessa TasksMessage::UpdateDuration(i, d) => { if let Ok(duration) = PositiveDuration::parse_from_str(&d) { project.task_mut(i).unwrap().edit_duration(duration); - state.repr[i].is_duration_err = false; + update_start_finish_duration(state, project, i); } else { state.repr[i].is_duration_err = true; } @@ -183,6 +187,23 @@ pub fn update(state: &mut TasksState, project: &mut Project, message: TasksMessa } } +fn update_start_finish_duration(state: &mut TasksState, project: &Project, task_index: usize) { + let task = project.task(task_index).unwrap(); + + if let Some(start) = task.start() { + state.repr[task_index].start = start.naive_local().format(DATE_FORMAT).to_string(); + state.repr[task_index].is_start_err = false; + } + if let Some(finish) = task.finish() { + state.repr[task_index].finish = finish.naive_local().format(DATE_FORMAT).to_string(); + state.repr[task_index].is_finish_err = false; + } + if let Some(duration) = task.duration() { + state.repr[task_index].duration = format!("{} h", duration.num_hours()); + state.repr[task_index].is_duration_err = false; + } +} + fn update_repr(state: &mut TasksState, project: &mut Project) { state.repr.clear(); @@ -256,9 +277,11 @@ fn parse_indices(s: &str) -> Option> { Some( s.split(';') .map(|index_s| { - index_s.parse::().unwrap_or_else(|_| panic!( + index_s.parse::().unwrap_or_else(|_| { + panic!( "It should have been possible to parse {index_s} as usize. This is a bug." - )) + ) + }) }) .collect(), )