From 4e12e1b65e1d66c3d73404d77b311f95d0bbb664 Mon Sep 17 00:00:00 2001 From: pythcoiner Date: Wed, 24 Jul 2024 10:59:20 +0200 Subject: [PATCH] ledger upgrade --- gui/Cargo.lock | 2310 ++++++++++++++----------- gui/Cargo.toml | 1 + gui/src/app/message.rs | 3 + gui/src/app/state/psbt.rs | 34 +- gui/src/app/state/receive.rs | 37 +- gui/src/app/state/settings/wallet.rs | 37 +- gui/src/app/view/hw.rs | 101 +- gui/src/app/view/message.rs | 3 +- gui/src/app/view/psbt.rs | 7 +- gui/src/app/view/receive.rs | 6 +- gui/src/app/view/settings.rs | 6 +- gui/src/hw.rs | 615 +++++-- gui/src/installer/message.rs | 8 +- gui/src/installer/mod.rs | 2 +- gui/src/installer/step/descriptor.rs | 42 +- gui/src/installer/step/share_xpubs.rs | 6 +- gui/src/installer/view.rs | 89 +- gui/src/ledger_upgrade.rs | 308 ++++ gui/src/lib.rs | 1 + gui/ui/src/component/hw.rs | 96 +- gui/ui/src/theme.rs | 69 + 21 files changed, 2481 insertions(+), 1300 deletions(-) create mode 100644 gui/src/ledger_upgrade.rs diff --git a/gui/Cargo.lock b/gui/Cargo.lock index b5a2133f0..e840c6511 100644 --- a/gui/Cargo.lock +++ b/gui/Cargo.lock @@ -4,9 +4,9 @@ version = 3 [[package]] name = "ab_glyph" -version = "0.2.20" +version = "0.2.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe21446ad43aa56417a767f3e2f3d7c4ca522904de1dd640529a76e9c5c3b33c" +checksum = "79faae4620f45232f599d9bc7b290f88247a0834162c4495ab2f02d60004adfb" dependencies = [ "ab_glyph_rasterizer", "owned_ttf_parser", @@ -20,9 +20,9 @@ checksum = "c71b1793ee61086797f5c80b6efa2b8ffa6d5dd703f118545808a7f2e27f7046" [[package]] name = "addr2line" -version = "0.19.0" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97" +checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" dependencies = [ "gimli", ] @@ -45,9 +45,9 @@ dependencies = [ [[package]] name = "aes" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac1f845298e95f983ff1944b728ae08b8cebab80d684f0a832ed0fc74dfa27e2" +checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" dependencies = [ "cfg-if", "cipher", @@ -68,17 +68,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "ahash" -version = "0.7.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" -dependencies = [ - "getrandom", - "once_cell", - "version_check", -] - [[package]] name = "ahash" version = "0.8.11" @@ -94,9 +83,9 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "0.7.20" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" dependencies = [ "memchr", ] @@ -109,9 +98,9 @@ checksum = "250f629c0161ad8107cf89319e990051fae62832fd343083bea452d93e2205fd" [[package]] name = "allocator-api2" -version = "0.2.16" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" +checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" [[package]] name = "android-activity" @@ -120,7 +109,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee91c0c2905bae44f84bfa4e044536541df26b7703fd0888deeb9060fcc44289" dependencies = [ "android-properties", - "bitflags 2.4.2", + "bitflags 2.6.0", "cc", "cesu8", "jni", @@ -157,9 +146,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.75" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" +checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" [[package]] name = "approx" @@ -172,15 +161,15 @@ dependencies = [ [[package]] name = "arrayref" -version = "0.3.7" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" +checksum = "9d151e35f61089500b617991b791fc8bfd237ae50cd5950803758a179b41e67a" [[package]] name = "arrayvec" -version = "0.7.4" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" [[package]] name = "as-raw-xcb-connection" @@ -227,13 +216,13 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.68" +version = "0.1.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842" +checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.75", ] [[package]] @@ -244,15 +233,15 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "autocfg" -version = "1.1.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "backtrace" -version = "0.3.67" +version = "0.3.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "233d376d6d185f2a3093e58f283f60f880315b6c60075b01f36b3b85154564ca" +checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" dependencies = [ "addr2line", "cc", @@ -289,9 +278,15 @@ checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" [[package]] name = "base64" -version = "0.21.6" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "base64" +version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c79fed4cdb43e993fcdadc7e58a09fd0e3e649c4436fa11da71c9f1f3ee7feb9" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "base64-compat" @@ -380,11 +375,11 @@ dependencies = [ [[package]] name = "bitcoin" -version = "0.31.1" +version = "0.31.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd00f3c09b5f21fb357abe32d29946eb8bb7a0862bae62c0b5e4a692acbbe73c" +checksum = "6c85783c2fe40083ea54a33aa2f0ba58831d90fcd190f5bdc47e74e84d2a96ae" dependencies = [ - "base64 0.21.6", + "base64 0.21.7", "bech32", "bitcoin-internals", "bitcoin_hashes 0.13.0", @@ -445,9 +440,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.4.2" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" [[package]] name = "blake2" @@ -489,46 +484,61 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "15b55663a85f33501257357e6421bb33e769d5c9ffb5ba0921c975a123e35e68" dependencies = [ "block-sys", - "objc2", + "objc2 0.4.1", +] + +[[package]] +name = "block2" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c132eebf10f5cad5289222520a4a058514204aed6d791f1cf4fe8088b82d15f" +dependencies = [ + "objc2 0.5.2", ] [[package]] name = "bumpalo" -version = "3.12.0" +version = "3.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" + +[[package]] +name = "by_address" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535" +checksum = "64fa3c856b712db6612c019f14756e64e4bcea13337a6b33b696333a9eaa2d06" [[package]] name = "bytemuck" -version = "1.13.1" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea" +checksum = "6fd4c6dcc3b0aea2f5c0b4b82c2b15fe39ddbc76041a310848f4706edf76bb31" dependencies = [ "bytemuck_derive", ] [[package]] name = "bytemuck_derive" -version = "1.4.1" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdde5c9cd29ebd706ce1b35600920a33550e402fc998a2e53ad3b42c3c47a192" +checksum = "0cc8b54b395f2fcfbb3d90c47b01c7f444d94d05bdeb775811dec868ac3bbc26" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.75", ] [[package]] name = "byteorder" -version = "1.4.3" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.4.0" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" +checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50" [[package]] name = "bzip2" @@ -557,10 +567,24 @@ version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fba7adb4dd5aa98e5553510223000e7148f621165ec5f9acd7113f6ca4995298" dependencies = [ - "bitflags 2.4.2", + "bitflags 2.6.0", + "log", + "polling", + "rustix", + "slab", + "thiserror", +] + +[[package]] +name = "calloop" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec" +dependencies = [ + "bitflags 2.6.0", "log", "polling", - "rustix 0.38.34", + "rustix", "slab", "thiserror", ] @@ -571,19 +595,33 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0f0ea9b9476c7fad82841a8dbb380e2eae480c21910feba80725b46931ed8f02" dependencies = [ - "calloop", - "rustix 0.38.34", + "calloop 0.12.4", + "rustix", + "wayland-backend", + "wayland-client", +] + +[[package]] +name = "calloop-wayland-source" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95a66a987056935f7efce4ab5668920b5d0dac4a7c99991a67395f13702ddd20" +dependencies = [ + "calloop 0.13.0", + "rustix", "wayland-backend", "wayland-client", ] [[package]] name = "cc" -version = "1.0.79" +version = "1.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" +checksum = "72db2f7947ecee9b03b510377e8bb9077afa27176fdbff55c51027e976fdcc48" dependencies = [ "jobserver", + "libc", + "shlex", ] [[package]] @@ -606,9 +644,9 @@ checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" [[package]] name = "cfg_aliases" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77e53693616d3075149f4ead59bdeecd204ac6b8192d8969757601b74bddf00f" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] name = "chacha20" @@ -645,7 +683,7 @@ dependencies = [ "js-sys", "num-traits", "wasm-bindgen", - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] @@ -661,9 +699,9 @@ dependencies = [ [[package]] name = "clipboard-win" -version = "5.3.1" +version = "5.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79f4473f5144e20d9aceaf2972478f06ddf687831eafeeb434fbaf0acc4144ad" +checksum = "15efe7a882b08f34e38556b14f2fb3daa98769d06c7f0c1b076dfd0d983bc892" dependencies = [ "error-code", ] @@ -698,37 +736,6 @@ dependencies = [ "x11rb", ] -[[package]] -name = "cocoa" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6140449f97a6e97f9511815c5632d84c8aacf8ac271ad77c559218161a1373c" -dependencies = [ - "bitflags 1.3.2", - "block", - "cocoa-foundation", - "core-foundation", - "core-graphics", - "foreign-types 0.5.0", - "libc", - "objc", -] - -[[package]] -name = "cocoa-foundation" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "931d3837c286f56e3c58423ce4eba12d08db2374461a785c86f672b08b5650d6" -dependencies = [ - "bitflags 1.3.2", - "block", - "core-foundation", - "core-graphics-types", - "foreign-types 0.3.2", - "libc", - "objc", -] - [[package]] name = "codespan-reporting" version = "0.11.1" @@ -812,29 +819,27 @@ dependencies = [ [[package]] name = "const-oid" -version = "0.9.5" +version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28c122c3980598d243d63d9a704629a2d748d101f278052ff068be5a4423ab6f" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" [[package]] name = "const-random" -version = "0.1.15" +version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "368a7a772ead6ce7e1de82bfb04c485f3db8ec744f72925af5735e29a22cc18e" +checksum = "87e00182fe74b066627d63b85fd550ac2998d4b0bd86bfed477a0ae4c7c71359" dependencies = [ "const-random-macro", - "proc-macro-hack", ] [[package]] name = "const-random-macro" -version = "0.1.15" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d7d6ab3c3a2282db210df5f02c4dab6e0a7057af0fb7ebd4070f30fe05c0ddb" +checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" dependencies = [ "getrandom", "once_cell", - "proc-macro-hack", "tiny-keccak", ] @@ -850,9 +855,9 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "core-graphics" @@ -863,7 +868,7 @@ dependencies = [ "bitflags 1.3.2", "core-foundation", "core-graphics-types", - "foreign-types 0.5.0", + "foreign-types", "libc", ] @@ -910,64 +915,46 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.9" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1" +checksum = "51e852e6dc9a5bed1fae92dd2375037bf2b768725bf3be87811edee3249d09ad" dependencies = [ "libc", ] [[package]] name = "crc32fast" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "crossbeam-channel" -version = "0.5.7" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf2b3e8478797446514c91ef04bafcb59faba183e621ad488df88983cc14128c" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" dependencies = [ "cfg-if", - "crossbeam-utils", ] [[package]] name = "crossbeam-deque" -version = "0.8.3" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" dependencies = [ - "cfg-if", "crossbeam-epoch", "crossbeam-utils", ] [[package]] name = "crossbeam-epoch" -version = "0.9.14" +version = "0.9.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46bd5f3f85273295a9d14aedfb86f6aadbff6d8f5295c4a9edb08e819dcf5695" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" dependencies = [ - "autocfg", - "cfg-if", "crossbeam-utils", - "memoffset 0.8.0", - "scopeguard", ] [[package]] name = "crossbeam-utils" -version = "0.8.15" +version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b" -dependencies = [ - "cfg-if", -] +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" [[package]] name = "crunchy" @@ -998,14 +985,10 @@ dependencies = [ ] [[package]] -name = "ctor" -version = "0.2.8" +name = "ctor-lite" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edb49164822f3ee45b17acd4a208cfc1251410cf0cad9a833234c9890774dd9f" -dependencies = [ - "quote", - "syn 2.0.60", -] +checksum = "1f791803201ab277ace03903de1594460708d2d54df6053f2d9e82f592b19e3b" [[package]] name = "ctr" @@ -1024,15 +1007,14 @@ checksum = "96a6ac251f4a2aca6b3f91340350eab87ae57c3f127ffeb585e92bd336717991" [[package]] name = "curve25519-dalek" -version = "4.1.2" +version = "4.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a677b8922c94e01bdbb12126b0bc852f00447528dee1782229af9c720c3f348" +checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" dependencies = [ "cfg-if", "cpufeatures", "curve25519-dalek-derive", "fiat-crypto", - "platforms", "rustc_version", "subtle", "zeroize", @@ -1046,51 +1028,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", -] - -[[package]] -name = "cxx" -version = "1.0.94" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f61f1b6389c3fe1c316bf8a4dccc90a38208354b330925bce1f74a6c4756eb93" -dependencies = [ - "cc", - "cxxbridge-flags", - "cxxbridge-macro", - "link-cplusplus", -] - -[[package]] -name = "cxx-build" -version = "1.0.94" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12cee708e8962df2aeb38f594aae5d827c022b6460ac71a7a3e2c3c2aae5a07b" -dependencies = [ - "cc", - "codespan-reporting", - "once_cell", - "proc-macro2", - "quote", - "scratch", - "syn 2.0.60", -] - -[[package]] -name = "cxxbridge-flags" -version = "1.0.94" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7944172ae7e4068c533afbb984114a56c46e9ccddda550499caa222902c7f7bb" - -[[package]] -name = "cxxbridge-macro" -version = "1.0.94" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2345488264226bf682893e25de0769f3360aac9957980ec49361b083ddaa5bc5" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.60", + "syn 2.0.75", ] [[package]] @@ -1099,11 +1037,17 @@ version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3e3d747f100290a1ca24b752186f61f6637e1deffe3bf6320de6fcb29510a307" dependencies = [ - "bitflags 2.4.2", - "libloading 0.8.1", + "bitflags 2.6.0", + "libloading 0.8.5", "winapi", ] +[[package]] +name = "data-encoding" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" + [[package]] name = "data-url" version = "0.3.1" @@ -1112,9 +1056,9 @@ checksum = "5c297a1c74b71ae29df00c3e22dd9534821d60eb9af5a0192823fa2acea70c2a" [[package]] name = "der" -version = "0.7.8" +version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fffa369a668c8af7dbf8b5e56c9f744fbd399949ed171606040001947de40b1c" +checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" dependencies = [ "const-oid", "zeroize", @@ -1143,11 +1087,11 @@ dependencies = [ [[package]] name = "dirs" -version = "5.0.0" +version = "5.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dece029acd3353e3a58ac2e3eb3c8d6c35827a892edc6cc4138ef9c33df46ecd" +checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" dependencies = [ - "dirs-sys 0.4.0", + "dirs-sys 0.4.1", ] [[package]] @@ -1163,13 +1107,14 @@ dependencies = [ [[package]] name = "dirs-sys" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04414300db88f70d74c5ff54e50f9e1d1737d9a5b90f53fcf2e95ca2a9ab554b" +checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" dependencies = [ "libc", + "option-ext", "redox_users", - "windows-sys 0.45.0", + "windows-sys 0.48.0", ] [[package]] @@ -1184,14 +1129,14 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412" dependencies = [ - "libloading 0.8.1", + "libloading 0.8.5", ] [[package]] name = "dlv-list" -version = "0.5.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d529fd73d344663edfd598ccb3f344e46034db51ebd103518eae34338248ad73" +checksum = "442039f5147480ba31067cb00ada1adae6892028e40e45fc5de7b7df6dcc1b5f" dependencies = [ "const-random", ] @@ -1204,31 +1149,31 @@ checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" [[package]] name = "downcast-rs" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" +checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" [[package]] name = "drm" -version = "0.11.1" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0f8a69e60d75ae7dab4ef26a59ca99f2a89d4c142089b537775ae0c198bdcde" +checksum = "98888c4bbd601524c11a7ed63f814b8825f420514f78e96f752c437ae9cbb5d1" dependencies = [ - "bitflags 2.4.2", + "bitflags 2.6.0", "bytemuck", "drm-ffi", "drm-fourcc", - "rustix 0.38.34", + "rustix", ] [[package]] name = "drm-ffi" -version = "0.7.1" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41334f8405792483e32ad05fbb9c5680ff4e84491883d2947a4757dc54cb2ac6" +checksum = "97c98727e48b7ccb4f4aea8cfe881e5b07f702d17b7875991881b41af7278d53" dependencies = [ "drm-sys", - "rustix 0.38.34", + "rustix", ] [[package]] @@ -1239,12 +1184,12 @@ checksum = "0aafbcdb8afc29c1a7ee5fbe53b5d62f4565b35a042a662ca9fecd0b54dae6f4" [[package]] name = "drm-sys" -version = "0.6.1" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d09ff881f92f118b11105ba5e34ff8f4adf27b30dae8f12e28c193af1c83176" +checksum = "fd39dde40b6e196c2e8763f23d119ddb1a8714534bf7d77fa97a65b0feda3986" dependencies = [ "libc", - "linux-raw-sys 0.6.4", + "linux-raw-sys 0.6.5", ] [[package]] @@ -1263,9 +1208,9 @@ dependencies = [ [[package]] name = "either" -version = "1.8.1" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" [[package]] name = "elliptic-curve" @@ -1288,9 +1233,9 @@ dependencies = [ [[package]] name = "encoding_rs" -version = "0.8.33" +version = "0.8.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" +checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" dependencies = [ "cfg-if", ] @@ -1303,9 +1248,9 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" dependencies = [ "libc", "windows-sys 0.52.0", @@ -1319,9 +1264,9 @@ checksum = "a0474425d51df81997e2f90a21591180b38eccf27292d755f3e30750225c175b" [[package]] name = "etagere" -version = "0.2.10" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "306960881d6c46bd0dd6b7f07442a441418c08d0d3e63d8d080b0f64c6343e4e" +checksum = "0e2f1e3be19fb10f549be8c1bf013e8675b4066c445e36eb76d2ebb2f54ee495" dependencies = [ "euclid", "svg_fmt", @@ -1329,22 +1274,22 @@ dependencies = [ [[package]] name = "euclid" -version = "0.22.9" +version = "0.22.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f253bc5c813ca05792837a0ff4b3a580336b224512d48f7eda1d7dd9210787" +checksum = "e0f0eb73b934648cd7a4a61f1b15391cd95dab0b4da6e2e66c2a072c144b4a20" dependencies = [ "num-traits", ] [[package]] name = "exr" -version = "1.6.3" +version = "1.72.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdd2162b720141a91a054640662d3edce3d50a944a50ffca5313cd951abb35b4" +checksum = "887d93f60543e9a9362ef8a21beedd0a833c5d9610e18c67abe15a5963dcb1a4" dependencies = [ "bit_field", "flume", - "half 2.2.1", + "half 2.4.1", "lebe", "miniz_oxide", "rayon-core", @@ -1372,18 +1317,18 @@ checksum = "dd2e7510819d6fbf51a5545c8f922716ecfb14df168a3242f7d33e0239efe6a1" [[package]] name = "fastrand" -version = "1.9.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" -dependencies = [ - "instant", -] +checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" [[package]] -name = "fastrand" -version = "2.1.0" +name = "fdeflate" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" +checksum = "4f9bfee30e4dedf0ab8b422f03af778d9612b63f502710fc500a334ebe2de645" +dependencies = [ + "simd-adler32", +] [[package]] name = "fern" @@ -1406,20 +1351,20 @@ dependencies = [ [[package]] name = "fiat-crypto" -version = "0.2.5" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27573eac26f4dd11e2b1916c3fe1baa56407c83c71a773a8ba17ec0bca03b6b7" +checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" [[package]] name = "filetime" -version = "0.2.22" +version = "0.2.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4029edd3e734da6fe05b6cd7bd2960760a616bd2ddd0d59a0124746d6272af0" +checksum = "bf401df4a4e3872c4fe8151134cf483738e74b67fc934d6532c882b3d24a4550" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.3.5", - "windows-sys 0.48.0", + "libredox 0.1.3", + "windows-sys 0.59.0", ] [[package]] @@ -1430,9 +1375,9 @@ checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flate2" -version = "1.0.25" +version = "1.0.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841" +checksum = "7f211bbe8e69bbd0cfdea405084f128ae8b4aaa6b0b522fc8f2b009084797920" dependencies = [ "crc32fast", "miniz_oxide", @@ -1446,24 +1391,17 @@ checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4" [[package]] name = "float_next_after" -version = "0.1.5" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fc612c5837986b7104a87a0df74a5460931f1c5274be12f8d0f40aa2f30d632" -dependencies = [ - "num-traits", -] +checksum = "8bf7cc16383c4b8d58b9905a8509f02926ce3058053c056376248d958c9df1e8" [[package]] name = "flume" -version = "0.10.14" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1657b4441c3403d9f7b3409e47575237dac27b1b5726df654a6ecbf92f0f7577" +checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181" dependencies = [ - "futures-core", - "futures-sink", - "nanorand", - "pin-project", - "spin 0.9.8", + "spin", ] [[package]] @@ -1474,17 +1412,20 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "font-types" -version = "0.4.2" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bd7f3ea17572640b606b35df42cfb6ecdf003704b062580e59918692190b73d" +checksum = "8f0189ccb084f77c5523e08288d418cbaa09c451a08515678a0aa265df9a8b60" +dependencies = [ + "bytemuck", +] [[package]] name = "fontconfig-parser" -version = "0.5.2" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ab2e12762761366dcb876ab8b6e0cfa4797ddcd890575919f008b5ba655672a" +checksum = "c1fcfcd44ca6e90c921fee9fa665d530b21ef1327a4c1a6c5250ea44b776ada7" dependencies = [ - "roxmltree", + "roxmltree 0.20.0", ] [[package]] @@ -1501,15 +1442,6 @@ dependencies = [ "ttf-parser 0.19.2", ] -[[package]] -name = "foreign-types" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" -dependencies = [ - "foreign-types-shared 0.1.1", -] - [[package]] name = "foreign-types" version = "0.5.0" @@ -1517,7 +1449,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" dependencies = [ "foreign-types-macros", - "foreign-types-shared 0.3.1", + "foreign-types-shared", ] [[package]] @@ -1528,15 +1460,9 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.75", ] -[[package]] -name = "foreign-types-shared" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" - [[package]] name = "foreign-types-shared" version = "0.3.1" @@ -1545,18 +1471,18 @@ checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" [[package]] name = "form_urlencoded" -version = "1.1.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" dependencies = [ "percent-encoding", ] [[package]] name = "futures" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40" +checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" dependencies = [ "futures-channel", "futures-core", @@ -1569,9 +1495,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" dependencies = [ "futures-core", "futures-sink", @@ -1579,15 +1505,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" [[package]] name = "futures-executor" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" dependencies = [ "futures-core", "futures-task", @@ -1597,38 +1523,38 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" [[package]] name = "futures-macro" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.75", ] [[package]] name = "futures-sink" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" [[package]] name = "futures-task" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" [[package]] name = "futures-util" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" dependencies = [ "futures-channel", "futures-core", @@ -1660,27 +1586,25 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0176e0459c2e4a1fe232f984bca6890e681076abb9934f6cea7c326f3fc47818" dependencies = [ "libc", - "windows-targets 0.48.0", + "windows-targets 0.48.5", ] [[package]] name = "getrandom" -version = "0.2.8" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", - "js-sys", "libc", "wasi", - "wasm-bindgen", ] [[package]] name = "ghash" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d930750de5717d2dd0b8c0d42c076c0e884c81a73e6cab859bbd2339c71e3e40" +checksum = "f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1" dependencies = [ "opaque-debug", "polyval", @@ -1696,11 +1620,21 @@ dependencies = [ "weezl", ] +[[package]] +name = "gif" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fb2d69b19215e18bb912fa30f7ce15846e301408695e44e0ef719f1da9e19f2" +dependencies = [ + "color_quant", + "weezl", +] + [[package]] name = "gimli" -version = "0.27.2" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad0a93d233ebf96623465aad4046a8d3aa4da22d4f4beba5388838c8a434bbb4" +checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" [[package]] name = "gl_generator" @@ -1758,7 +1692,7 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fbcd2dba93594b227a1f57ee09b8b9da8892c34d55aa332e034a228d0fe6a171" dependencies = [ - "bitflags 2.4.2", + "bitflags 2.6.0", "gpu-alloc-types", ] @@ -1768,7 +1702,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "98ff03b468aa837d70984d55f5d3f846f6ec31fe34bbb97c4f85219caeee1ca4" dependencies = [ - "bitflags 2.4.2", + "bitflags 2.6.0", ] [[package]] @@ -1781,27 +1715,27 @@ dependencies = [ "presser", "thiserror", "winapi", - "windows 0.52.0", + "windows", ] [[package]] name = "gpu-descriptor" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b0c02e1ba0bdb14e965058ca34e09c020f8e507a760df1121728e0aef68d57a" +checksum = "cc11df1ace8e7e564511f53af41f3e42ddc95b56fd07b3f4445d2a6048bc682c" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.6.0", "gpu-descriptor-types", - "hashbrown 0.12.3", + "hashbrown 0.14.5", ] [[package]] name = "gpu-descriptor-types" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "363e3677e55ad168fef68cf9de3a4a310b53124c5e784c53a1d70e92d23f2126" +checksum = "6bf0b36e6f090b7e1d8a4b49c0cb81c1f8376f72198c65dd3ad9ff3556b8b78c" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.6.0", ] [[package]] @@ -1827,17 +1761,17 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.21" +version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91fc23aa11be92976ef4729127f1a74adf36d8436f7816b185d18df956790833" +checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" dependencies = [ "bytes", "fnv", "futures-core", "futures-sink", "futures-util", - "http", - "indexmap 1.9.3", + "http 0.2.12", + "indexmap", "slab", "tokio", "tokio-util", @@ -1852,22 +1786,14 @@ checksum = "1b43ede17f21864e81be2fa654110bf1e793774238d86ef8555c37e6519c0403" [[package]] name = "half" -version = "2.2.1" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02b4af3693f1b705df946e9fe5631932443781d0aabb423b62fcd4d73f6d2fd0" +checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888" dependencies = [ + "cfg-if", "crunchy", ] -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" -dependencies = [ - "ahash 0.7.8", -] - [[package]] name = "hashbrown" version = "0.13.2" @@ -1876,11 +1802,11 @@ checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" [[package]] name = "hashbrown" -version = "0.14.0" +version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" dependencies = [ - "ahash 0.8.11", + "ahash", "allocator-api2", ] @@ -1890,7 +1816,7 @@ version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7" dependencies = [ - "hashbrown 0.14.0", + "hashbrown 0.14.5", ] [[package]] @@ -1899,10 +1825,10 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af2a7e73e1f34c48da31fb668a907f250794837e08faa144fd24f0b8b741e890" dependencies = [ - "bitflags 2.4.2", + "bitflags 2.6.0", "com", "libc", - "libloading 0.8.1", + "libloading 0.8.5", "thiserror", "widestring", "winapi", @@ -1916,18 +1842,15 @@ checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" [[package]] name = "hermit-abi" -version = "0.2.6" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" -dependencies = [ - "libc", -] +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" [[package]] name = "hermit-abi" -version = "0.3.9" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" +checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" [[package]] name = "hex" @@ -1937,9 +1860,9 @@ checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] name = "hex-conservative" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30ed443af458ccb6d81c1e7e661545f94d3176752fb1df2f543b902a1e0f51e2" +checksum = "212ab92002354b4819390025006c897e8140934349e8635c9b077f47b4dcbd20" dependencies = [ "core2", ] @@ -1958,9 +1881,9 @@ checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" [[package]] name = "hidapi" -version = "2.6.0" +version = "2.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a722fb137d008dbf264f54612457f8eb6a299efbcb0138178964a0809035d74" +checksum = "03b876ecf37e86b359573c16c8366bc3eba52b689884a0fc42ba3f67203d2a8b" dependencies = [ "cc", "cfg-if", @@ -1978,11 +1901,20 @@ dependencies = [ "digest", ] +[[package]] +name = "home" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +dependencies = [ + "windows-sys 0.52.0", +] + [[package]] name = "http" -version = "0.2.9" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" dependencies = [ "bytes", "fnv", @@ -1990,21 +1922,32 @@ dependencies = [ ] [[package]] -name = "http-body" -version = "0.4.5" +name = "http" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" +checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" dependencies = [ "bytes", - "http", - "pin-project-lite", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +dependencies = [ + "bytes", + "http 0.2.12", + "pin-project-lite", ] [[package]] name = "httparse" -version = "1.8.0" +version = "1.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" +checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9" [[package]] name = "httpdate" @@ -2014,16 +1957,16 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "hyper" -version = "0.14.27" +version = "0.14.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468" +checksum = "a152ddd61dfaec7273fe8419ab357f33aee0d914c5f4efbf0d96fa749eea5ec9" dependencies = [ "bytes", "futures-channel", "futures-core", "futures-util", "h2", - "http", + "http 0.2.12", "http-body", "httparse", "httpdate", @@ -2038,40 +1981,39 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.24.1" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d78e1e73ec14cf7375674f74d7dde185c8206fd9dea6fb6295e8a98098aaa97" +checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" dependencies = [ "futures-util", - "http", + "http 0.2.12", "hyper", - "rustls", + "rustls 0.21.12", "tokio", "tokio-rustls", ] [[package]] name = "iana-time-zone" -version = "0.1.56" +version = "0.1.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0722cd7114b7de04316e7ea5456a0bbb20e4adb46fd27a3697adb812cff0f37c" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", "wasm-bindgen", - "windows 0.48.0", + "windows-core", ] [[package]] name = "iana-time-zone-haiku" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" dependencies = [ - "cxx", - "cxx-build", + "cc", ] [[package]] @@ -2095,7 +2037,7 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7d7e6bbd197f311ed3d8b71651876b0ce01318fde52cda862a9a7a4373c9b930" dependencies = [ - "bitflags 2.4.2", + "bitflags 2.6.0", "glam", "log", "num-traits", @@ -2126,10 +2068,10 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a044c193ef0840eacabfa05424717331d1fc5b3ecb9a89316200c75da2ba9a4" dependencies = [ - "bitflags 2.4.2", + "bitflags 2.6.0", "bytemuck", "cosmic-text", - "half 2.2.1", + "half 2.4.1", "iced_core", "iced_futures", "image", @@ -2203,7 +2145,7 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3c243b6700452886aac1ee1987e84d9fb43b56b53fea9a1eb67713fd0fde244" dependencies = [ - "bitflags 2.4.2", + "bitflags 2.6.0", "bytemuck", "futures", "glam", @@ -2256,16 +2198,16 @@ version = "0.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "99d3aaff8a54577104bafdf686ff18565c3b6903ca5782a2026ef06e2c7aa319" dependencies = [ - "block2", + "block2 0.3.0", "dispatch", - "objc2", + "objc2 0.4.1", ] [[package]] name = "idna" -version = "0.3.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" dependencies = [ "unicode-bidi", "unicode-normalization", @@ -2273,17 +2215,16 @@ dependencies = [ [[package]] name = "image" -version = "0.24.6" +version = "0.24.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "527909aa81e20ac3a44803521443a765550f09b5130c2c2fa1ea59c2f8f50a3a" +checksum = "5690139d2f55868e080017335e4b94cb7414274c74f1669c84fb5feba2c9f69d" dependencies = [ "bytemuck", "byteorder", "color_quant", "exr", - "gif", + "gif 0.13.1", "jpeg-decoder", - "num-rational", "num-traits", "png", "qoi", @@ -2298,22 +2239,12 @@ checksum = "029d73f573d8e8d63e6d5020011d3255b28c3ba85d6cf870a07184ed23de9284" [[package]] name = "indexmap" -version = "1.9.3" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" -dependencies = [ - "autocfg", - "hashbrown 0.12.3", -] - -[[package]] -name = "indexmap" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d" +checksum = "93ead53efc7ea8ed3cfb0c79fc8023fbb782a5432b52830b6518941cebe6505c" dependencies = [ "equivalent", - "hashbrown 0.14.0", + "hashbrown 0.14.5", ] [[package]] @@ -2327,9 +2258,9 @@ dependencies = [ [[package]] name = "instant" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" dependencies = [ "cfg-if", ] @@ -2344,22 +2275,11 @@ dependencies = [ "mach2", ] -[[package]] -name = "io-lifetimes" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" -dependencies = [ - "hermit-abi 0.3.9", - "libc", - "windows-sys 0.48.0", -] - [[package]] name = "ipnet" -version = "2.8.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6" +checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" [[package]] name = "itertools" @@ -2370,6 +2290,15 @@ dependencies = [ "either", ] +[[package]] +name = "itertools" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" +dependencies = [ + "either", +] + [[package]] name = "itertools" version = "0.12.1" @@ -2381,9 +2310,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.6" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" [[package]] name = "jni" @@ -2409,27 +2338,27 @@ checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" [[package]] name = "jobserver" -version = "0.1.28" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab46a6e9526ddef3ae7f787c06f0f2600639ba80ea3eade3d8e670a2230f51d6" +checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" dependencies = [ "libc", ] [[package]] name = "jpeg-decoder" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc0000e42512c92e31c2252315bda326620a4e034105e900c98ec492fa077b3e" +checksum = "f5d4a7da358eff58addd2877a45865158f0d78c911d43a5784ceb7bbf52833b0" dependencies = [ "rayon", ] [[package]] name = "js-sys" -version = "0.3.69" +version = "0.3.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +checksum = "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a" dependencies = [ "wasm-bindgen", ] @@ -2488,7 +2417,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6aae1df220ece3c0ada96b8153459b67eebe9ae9212258bb0134ae60416fdf76" dependencies = [ "libc", - "libloading 0.8.1", + "libloading 0.8.5", "pkg-config", ] @@ -2500,9 +2429,9 @@ checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" [[package]] name = "kurbo" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d676038719d1c892f91e6e85121550143c75880b42f7feff6d413a078cf91fb3" +checksum = "bd85a5776cd9500c2e2059c8c76c3b01528566b7fcbaf8098b55a33fc298849b" dependencies = [ "arrayvec", ] @@ -2519,9 +2448,9 @@ dependencies = [ [[package]] name = "lazy_static" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "lebe" @@ -2577,15 +2506,32 @@ dependencies = [ "miniscript", ] +[[package]] +name = "ledger_manager" +version = "0.1.0" +source = "git+https://github.com/pythcoiner/ledger_installer.git?branch=liana#afcc0e5db74488191b5d9b3f28eaad8717772c58" +dependencies = [ + "form_urlencoded", + "hex", + "ledger-apdu", + "ledger-transport-hidapi", + "log", + "minreq", + "serde", + "serde_derive", + "serde_json", + "tungstenite", +] + [[package]] name = "liana" version = "6.0.0" -source = "git+https://github.com/wizardsardine/liana?branch=master#585bb5b763127f4e0686ce8201fb846fa84137b9" +source = "git+https://github.com/wizardsardine/liana?branch=master#39c0458f0b428794d21de4c6d6a5c259b45a318b" dependencies = [ "backtrace", "bdk_coin_select", "bip39", - "dirs 5.0.0", + "dirs 5.0.1", "fern", "getrandom", "jsonrpc 0.17.0", @@ -2605,7 +2551,7 @@ dependencies = [ "async-hwi", "async-trait", "backtrace", - "base64 0.21.6", + "base64 0.21.7", "bitcoin_hashes 0.12.0", "chrono", "dirs 3.0.2", @@ -2614,6 +2560,7 @@ dependencies = [ "iced", "iced_runtime", "jsonrpc 0.12.1", + "ledger_manager", "liana", "liana_ui", "log", @@ -2640,9 +2587,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.154" +version = "0.2.157" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae743338b92ff9146ce83992f766a31066a91a8c84a45e0e9f21e7cf6de6d346" +checksum = "374af5f94e54fa97cf75e945cce8a6b201e88a1a07e688b47dfd2a59c66dbd86" [[package]] name = "libloading" @@ -2656,12 +2603,12 @@ dependencies = [ [[package]] name = "libloading" -version = "0.8.1" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c571b676ddfc9a8c12f1f3d3085a7b163966a8fd8098a90640953ce5f6170161" +checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4" dependencies = [ "cfg-if", - "windows-sys 0.48.0", + "windows-targets 0.52.6", ] [[package]] @@ -2676,11 +2623,22 @@ version = "0.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3af92c55d7d839293953fcd0fda5ecfe93297cfde6ffbdec13b41d99c0ba6607" dependencies = [ - "bitflags 2.4.2", + "bitflags 2.6.0", "libc", "redox_syscall 0.4.1", ] +[[package]] +name = "libredox" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +dependencies = [ + "bitflags 2.6.0", + "libc", + "redox_syscall 0.5.3", +] + [[package]] name = "libsqlite3-sys" version = "0.27.0" @@ -2712,38 +2670,23 @@ dependencies = [ "pkg-config", ] -[[package]] -name = "link-cplusplus" -version = "1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5" -dependencies = [ - "cc", -] - -[[package]] -name = "linux-raw-sys" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" - [[package]] name = "linux-raw-sys" -version = "0.4.13" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" [[package]] name = "linux-raw-sys" -version = "0.6.4" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0b5399f6804fbab912acbd8878ed3532d506b7c951b8f9f164ef90fef39e3f4" +checksum = "2a385b1be4e5c3e362ad2ffa73c392e53f031eaa5b7d648e64cd87f27f6063d7" [[package]] name = "lock_api" -version = "0.4.9" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" dependencies = [ "autocfg", "scopeguard", @@ -2751,17 +2694,17 @@ dependencies = [ [[package]] name = "log" -version = "0.4.21" +version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" [[package]] name = "lru" -version = "0.12.3" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3262e75e648fce39813cb56ac41f3c3e3f65217ebf3844d818d1f9398cfb0dc" +checksum = "37ee39891760e7d94734f6f63fedc29a2e4a152f836120753a72503f09fcf904" dependencies = [ - "hashbrown 0.14.0", + "hashbrown 0.14.5", ] [[package]] @@ -2776,9 +2719,9 @@ dependencies = [ [[package]] name = "lyon_algorithms" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00a0349cd8f0270781bb93a824b63df6178e3b4a27794e7be3ce3763f5a44d6e" +checksum = "a3bca95f9a4955b3e4a821fbbcd5edfbd9be2a9a50bb5758173e5358bfb4c623" dependencies = [ "lyon_path", "num-traits", @@ -2786,9 +2729,9 @@ dependencies = [ [[package]] name = "lyon_geom" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74df1ff0a0147282eb10699537a03baa7d31972b58984a1d44ce0624043fe8ad" +checksum = "edecfb8d234a2b0be031ab02ebcdd9f3b9ee418fb35e265f7a540a48d197bff9" dependencies = [ "arrayvec", "euclid", @@ -2797,9 +2740,9 @@ dependencies = [ [[package]] name = "lyon_path" -version = "1.0.3" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7da8358c012e5651e4619cfd0b5b75c0f77866181a01b0909aab4bae14adf660" +checksum = "9c08a606c7a59638d6c6aa18ac91a06aa9fb5f765a7efb27e6a4da58700740d7" dependencies = [ "lyon_geom", "num-traits", @@ -2807,13 +2750,13 @@ dependencies = [ [[package]] name = "lyon_tessellation" -version = "1.0.10" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d2124218d5428149f9e09520b9acc024334a607e671f032d06567b61008977c" +checksum = "579d42360a4b09846eff2feef28f538696c7d6c7439bfa65874ff3cbe0951b2c" dependencies = [ "float_next_after", "lyon_path", - "thiserror", + "num-traits", ] [[package]] @@ -2836,9 +2779,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.5.0" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "memmap2" @@ -2867,25 +2810,16 @@ dependencies = [ "autocfg", ] -[[package]] -name = "memoffset" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1" -dependencies = [ - "autocfg", -] - [[package]] name = "metal" version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c43f73953f8cbe511f021b58f18c3ce1c3d1ae13fe953293e13345bf83217f25" dependencies = [ - "bitflags 2.4.2", + "bitflags 2.6.0", "block", "core-graphics-types", - "foreign-types 0.5.0", + "foreign-types", "log", "objc", "paste", @@ -2897,17 +2831,11 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" -[[package]] -name = "minimal-lexical" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" - [[package]] name = "miniscript" -version = "11.0.0" +version = "11.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86a23dd3ad145a980e231185d114399f25a0a307d2cd918010ddda6334323df9" +checksum = "3127e10529a57a8f7fa9b1332c4c2f72baadaca6777798f910dff3c922620b14" dependencies = [ "bech32", "bitcoin", @@ -2917,34 +2845,51 @@ dependencies = [ [[package]] name = "miniz_oxide" -version = "0.6.2" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa" +checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" dependencies = [ "adler", + "simd-adler32", ] [[package]] name = "minreq" -version = "2.8.1" +version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3de406eeb24aba36ed3829532fa01649129677186b44a49debec0ec574ca7da7" +checksum = "763d142cdff44aaadd9268bebddb156ef6c65a0e13486bb81673cf2d8739f9b0" dependencies = [ "log", + "once_cell", + "rustls 0.21.12", + "rustls-webpki 0.101.7", "serde", "serde_json", + "webpki-roots", ] [[package]] name = "mio" -version = "0.8.6" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9" +checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" dependencies = [ "libc", "log", "wasi", - "windows-sys 0.45.0", + "windows-sys 0.48.0", +] + +[[package]] +name = "mio" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" +dependencies = [ + "hermit-abi 0.3.9", + "libc", + "wasi", + "windows-sys 0.52.0", ] [[package]] @@ -2954,7 +2899,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "20a4c60ca5c9c0e114b3bd66ff4aa5f9b2b175442be51ca6c4365d687a97a2ac" dependencies = [ "log", - "mio", + "mio 0.8.11", "nix", "serialport", "winapi", @@ -2979,10 +2924,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "50e3524642f53d9af419ab5e8dd29d3ba155708267667c2f3f06c88c9e130843" dependencies = [ "bit-set", - "bitflags 2.4.2", + "bitflags 2.6.0", "codespan-reporting", "hexf-parse", - "indexmap 2.0.0", + "indexmap", "log", "num-traits", "rustc-hash", @@ -2992,22 +2937,13 @@ dependencies = [ "unicode-xid", ] -[[package]] -name = "nanorand" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" -dependencies = [ - "getrandom", -] - [[package]] name = "ndk" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2076a31b7010b17a38c01907c45b945e8f11495ee4dd588309718901b1f7a5b7" dependencies = [ - "bitflags 2.4.2", + "bitflags 2.6.0", "jni-sys", "log", "ndk-sys", @@ -3033,16 +2969,15 @@ dependencies = [ [[package]] name = "nix" -version = "0.26.2" +version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a" +checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" dependencies = [ "bitflags 1.3.2", "cfg-if", "libc", - "memoffset 0.7.1", + "memoffset", "pin-utils", - "static_assertions", ] [[package]] @@ -3075,16 +3010,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "nom" -version = "7.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" -dependencies = [ - "memchr", - "minimal-lexical", -] - [[package]] name = "nu-ansi-term" version = "0.46.0" @@ -3097,41 +3022,28 @@ dependencies = [ [[package]] name = "num-bigint" -version = "0.4.3" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" dependencies = [ - "autocfg", "num-integer", "num-traits", ] [[package]] name = "num-integer" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" -dependencies = [ - "autocfg", - "num-traits", -] - -[[package]] -name = "num-rational" -version = "0.4.1" +version = "0.1.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" dependencies = [ - "autocfg", - "num-integer", "num-traits", ] [[package]] name = "num-traits" -version = "0.2.15" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", "libm", @@ -3139,33 +3051,33 @@ dependencies = [ [[package]] name = "num_cpus" -version = "1.15.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ - "hermit-abi 0.2.6", + "hermit-abi 0.3.9", "libc", ] [[package]] name = "num_enum" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02339744ee7253741199f897151b38e72257d13802d4ee837285cc2990a90845" +checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" dependencies = [ "num_enum_derive", ] [[package]] name = "num_enum_derive" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b" +checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.75", ] [[package]] @@ -3191,9 +3103,9 @@ dependencies = [ [[package]] name = "objc-sys" -version = "0.3.3" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da284c198fb9b7b0603f8635185e85fbd5b64ee154b1ed406d489077de2d6d60" +checksum = "cdb91bdd390c7ce1a8607f35f3ca7151b65afc0ff5ff3b34fa350f7d7c7e4310" [[package]] name = "objc2" @@ -3202,7 +3114,57 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "559c5a40fdd30eb5e344fbceacf7595a81e242529fb4e21cf5f43fb4f11ff98d" dependencies = [ "objc-sys", - "objc2-encode", + "objc2-encode 3.0.0", +] + +[[package]] +name = "objc2" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46a785d4eeff09c14c487497c162e92766fbb3e4059a71840cecc03d9a50b804" +dependencies = [ + "objc-sys", + "objc2-encode 4.0.3", +] + +[[package]] +name = "objc2-app-kit" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" +dependencies = [ + "bitflags 2.6.0", + "block2 0.5.1", + "libc", + "objc2 0.5.2", + "objc2-core-data", + "objc2-core-image", + "objc2-foundation", + "objc2-quartz-core", +] + +[[package]] +name = "objc2-core-data" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" +dependencies = [ + "bitflags 2.6.0", + "block2 0.5.1", + "objc2 0.5.2", + "objc2-foundation", +] + +[[package]] +name = "objc2-core-image" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80" +dependencies = [ + "block2 0.5.1", + "objc2 0.5.2", + "objc2-foundation", + "objc2-metal", ] [[package]] @@ -3211,6 +3173,50 @@ version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d079845b37af429bfe5dfa76e6d087d788031045b25cfc6fd898486fd9847666" +[[package]] +name = "objc2-encode" +version = "4.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7891e71393cd1f227313c9379a26a584ff3d7e6e7159e988851f0934c993f0f8" + +[[package]] +name = "objc2-foundation" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" +dependencies = [ + "bitflags 2.6.0", + "block2 0.5.1", + "dispatch", + "libc", + "objc2 0.5.2", +] + +[[package]] +name = "objc2-metal" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" +dependencies = [ + "bitflags 2.6.0", + "block2 0.5.1", + "objc2 0.5.2", + "objc2-foundation", +] + +[[package]] +name = "objc2-quartz-core" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" +dependencies = [ + "bitflags 2.6.0", + "block2 0.5.1", + "objc2 0.5.2", + "objc2-foundation", + "objc2-metal", +] + [[package]] name = "objc_exception" version = "0.1.2" @@ -3231,9 +3237,9 @@ dependencies = [ [[package]] name = "object" -version = "0.30.3" +version = "0.36.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea86265d3d3dcb6a27fc51bd29a4bf387fae9d2986b823079d4986af253eb439" +checksum = "27b64972346851a39438c60b341ebc01bba47464ae329e55cf343eb93964efd9" dependencies = [ "memchr", ] @@ -3246,9 +3252,21 @@ checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" [[package]] name = "opaque-debug" -version = "0.3.0" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" + +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "option-ext" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" [[package]] name = "orbclient" @@ -3256,7 +3274,7 @@ version = "0.3.47" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52f0d54bde9774d3a51dcf281a5def240c71996bc6ca05d2c847ec8b2b216166" dependencies = [ - "libredox", + "libredox 0.0.2", ] [[package]] @@ -3271,9 +3289,9 @@ dependencies = [ [[package]] name = "ouroboros" -version = "0.18.3" +version = "0.18.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97b7be5a8a3462b752f4be3ff2b2bf2f7f1d00834902e46be2a4d68b87b0573c" +checksum = "944fa20996a25aded6b4795c6d63f10014a7a83f8be9828a11860b08c5fc4a67" dependencies = [ "aliasable", "ouroboros_macro", @@ -3282,16 +3300,16 @@ dependencies = [ [[package]] name = "ouroboros_macro" -version = "0.18.3" +version = "0.18.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b645dcde5f119c2c454a92d0dfa271a2a3b205da92e4292a68ead4bdbfde1f33" +checksum = "39b0deead1528fd0e5947a8546a9642a9777c25f6e1e26f34c97b204bbb465bd" dependencies = [ "heck", "itertools 0.12.1", "proc-macro2", "proc-macro2-diagnostics", "quote", - "syn 2.0.60", + "syn 2.0.75", ] [[package]] @@ -3302,18 +3320,18 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "owned_ttf_parser" -version = "0.18.1" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e25e9fb15717794fae58ab55c26e044103aad13186fbb625893f9a3bbcc24228" +checksum = "490d3a563d3122bf7c911a59b0add9389e5ec0f5f0c3ac6b91ff235a0e6a7f90" dependencies = [ - "ttf-parser 0.18.1", + "ttf-parser 0.24.1", ] [[package]] name = "palette" -version = "0.7.4" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d38e6e5ca1612e2081cc31188f08c3cba630ce4ba44709a153f1a0f38d678f2" +checksum = "4cbf71184cc5ecc2e4e1baccdb21026c20e5fc3dcf63028a086131b3ab00b6e6" dependencies = [ "approx", "fast-srgb8", @@ -3323,13 +3341,14 @@ dependencies = [ [[package]] name = "palette_derive" -version = "0.7.4" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e05d1c929301fee6830dafa764341118829b2535c216b0571e3821ecac5c885b" +checksum = "f5030daf005bface118c096f510ffb781fc28f9ab6a32ab224d8631be6851d30" dependencies = [ + "by_address", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.75", ] [[package]] @@ -3345,12 +3364,12 @@ dependencies = [ [[package]] name = "parking_lot" -version = "0.12.1" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" dependencies = [ "lock_api", - "parking_lot_core 0.9.7", + "parking_lot_core 0.9.10", ] [[package]] @@ -3369,44 +3388,44 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.7" +version = "0.9.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.2.16", + "redox_syscall 0.5.3", "smallvec", - "windows-sys 0.45.0", + "windows-targets 0.52.6", ] [[package]] name = "paste" -version = "1.0.14" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" [[package]] name = "percent-encoding" -version = "2.2.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "petgraph" -version = "0.6.4" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" +checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset", - "indexmap 2.0.0", + "indexmap", ] [[package]] name = "phf" -version = "0.11.1" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "928c6535de93548188ef63bb7c4036bd415cd8f36ad25af44b9789b2ee72a48c" +checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" dependencies = [ "phf_macros", "phf_shared", @@ -3414,9 +3433,9 @@ dependencies = [ [[package]] name = "phf_generator" -version = "0.11.1" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1181c94580fa345f50f19d738aaa39c0ed30a600d95cb2d3e23f94266f14fbf" +checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" dependencies = [ "phf_shared", "rand", @@ -3424,22 +3443,22 @@ dependencies = [ [[package]] name = "phf_macros" -version = "0.11.1" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92aacdc5f16768709a569e913f7451034034178b05bdc8acda226659a3dccc66" +checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b" dependencies = [ "phf_generator", "phf_shared", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.75", ] [[package]] name = "phf_shared" -version = "0.11.1" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1fb5f6f826b772a8d4c0394209441e7d37cbbb967ae9c7e0e8134365c9ee676" +checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" dependencies = [ "siphasher", ] @@ -3450,31 +3469,11 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315" -[[package]] -name = "pin-project" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "pin-project-lite" -version = "0.2.9" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" +checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" [[package]] name = "pin-utils" @@ -3494,41 +3493,36 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.26" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160" - -[[package]] -name = "platforms" -version = "3.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14e6ab3f592e6fb464fc9712d8d6e6912de6473954635fd76a589d832cffcbb0" +checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" [[package]] name = "png" -version = "0.17.7" +version = "0.17.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d708eaf860a19b19ce538740d2b4bdeeb8337fa53f7738455e706623ad5c638" +checksum = "06e4b0d3d1312775e782c86c91a111aa1f910cbb65e1337f9975b5f9a554b5e1" dependencies = [ "bitflags 1.3.2", "crc32fast", + "fdeflate", "flate2", "miniz_oxide", ] [[package]] name = "polling" -version = "3.7.0" +version = "3.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645493cf344456ef24219d02a768cf1fb92ddf8c92161679ae3d91b91a637be3" +checksum = "cc2790cd301dec6cd3b7a025e4815cf825724a51c98dccfe6a3e55f05ffb6511" dependencies = [ "cfg-if", "concurrent-queue", - "hermit-abi 0.3.9", + "hermit-abi 0.4.0", "pin-project-lite", - "rustix 0.38.34", + "rustix", "tracing", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -3544,9 +3538,9 @@ dependencies = [ [[package]] name = "polyval" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d52cff9d1d4dee5fe6d03729099f4a310a41179e0a10dbf542039873f2e826fb" +checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25" dependencies = [ "cfg-if", "cpufeatures", @@ -3556,9 +3550,12 @@ dependencies = [ [[package]] name = "ppv-lite86" -version = "0.2.17" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] [[package]] name = "presser" @@ -3578,25 +3575,18 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "1.3.1" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" dependencies = [ - "once_cell", "toml_edit", ] -[[package]] -name = "proc-macro-hack" -version = "0.5.20+deprecated" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" - [[package]] name = "proc-macro2" -version = "1.0.81" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d1597b0c024618f09a9c3b8655b7e430397a36d23fdafec26d6965e9eec3eba" +checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" dependencies = [ "unicode-ident", ] @@ -3609,16 +3599,16 @@ checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.75", "version_check", "yansi", ] [[package]] name = "profiling" -version = "1.0.7" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74605f360ce573babfe43964cbe520294dcb081afbf8c108fc6e23036b4da2df" +checksum = "43d84d1d7a6ac92673717f9f6d1518374ef257669c24ebc5ac25d5033828be58" [[package]] name = "prost" @@ -3682,10 +3672,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "065717a5dfaca4a83d2fe57db3487b311365200000551d7a364e715dbf4346bc" dependencies = [ "anyhow", - "itertools 0.10.5", + "itertools 0.11.0", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.75", ] [[package]] @@ -3714,9 +3704,9 @@ checksum = "166f136dfdb199f98186f3649cf7a0536534a61417a1a30221b492b4fb60ce3f" [[package]] name = "quick-xml" -version = "0.31.0" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1004a344b30a54e2ee58d66a71b32d2db2feb0a31f9a2d302bf0536f15de2a33" +checksum = "6f24d770aeca0eacb81ac29dfbc55ebcc09312fdd1f8bbecdc7e4a84e000e3b4" dependencies = [ "memchr", ] @@ -3768,21 +3758,21 @@ checksum = "9c8a99fddc9f0ba0a85884b8d14e3592853e787d581ca1816c91349b10e4eeab" [[package]] name = "rangemap" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "795915a3930a5d6bafd9053d37602fea3e61be2e5d4d788983a8ba9654c1c6f2" +checksum = "f60fcc7d6849342eff22c4350c8b9a989ee8ceabc4b481253e8946b9fe83d684" [[package]] name = "raw-window-handle" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cc3bcbdb1ddfc11e700e62968e6b4cc9c75bb466464ad28fb61c5b2c964418b" +checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" [[package]] name = "rayon" -version = "1.7.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" dependencies = [ "either", "rayon-core", @@ -3790,14 +3780,12 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.11.0" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" dependencies = [ - "crossbeam-channel", "crossbeam-deque", "crossbeam-utils", - "num_cpus", ] [[package]] @@ -3808,19 +3796,20 @@ checksum = "3b42e27ef78c35d3998403c1d26f3efd9e135d3e5121b0a4845cc5cc27547f4f" [[package]] name = "rdrand" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e233b642160555c1aa1ff7a78443c6139342f411b6fa6602af2ebbfee9e166bb" +checksum = "d92195228612ac8eed47adbc2ed0f04e513a4ccb98175b6f2bd04d963b533655" dependencies = [ "rand_core", ] [[package]] name = "read-fonts" -version = "0.15.5" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c044ab88c43e2eae05b34a17fc13598736679fdb03d71b49fcfe114443ec8a86" +checksum = "8c141b9980e1150201b2a3a32879001c8f975fe313ec3df5471a9b5c79a880cd" dependencies = [ + "bytemuck", "font-types", ] @@ -3853,29 +3842,41 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.1" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "469052894dcb553421e483e4209ee581a45100d31b4018de03e5a7ad86374a7e" +checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" dependencies = [ - "bitflags 2.4.2", + "bitflags 2.6.0", ] [[package]] name = "redox_users" -version = "0.4.3" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" +checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891" dependencies = [ "getrandom", - "redox_syscall 0.2.16", + "libredox 0.1.3", "thiserror", ] [[package]] name = "regex" -version = "1.7.3" +version = "1.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b1f693b24f6ac912f4893ef08244d70b6067480d2f1a46e950c9691e6749d1d" +checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" dependencies = [ "aho-corasick", "memchr", @@ -3884,29 +3885,29 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.6.29" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" +checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" [[package]] name = "renderdoc-sys" -version = "1.0.0" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "216080ab382b992234dda86873c18d4c48358f5cfcb70fd693d7f6f2131b628b" +checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" [[package]] name = "reqwest" -version = "0.11.20" +version = "0.11.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e9ad3fe7488d7e34558a2033d45a0c90b72d97b4f80705666fea71472e2e6a1" +checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" dependencies = [ - "base64 0.21.6", + "base64 0.21.7", "bytes", "encoding_rs", "futures-core", "futures-util", "h2", - "http", + "http 0.2.12", "http-body", "hyper", "hyper-rustls", @@ -3917,11 +3918,13 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", - "rustls", - "rustls-pemfile", + "rustls 0.21.12", + "rustls-pemfile 1.0.4", "serde", "serde_json", "serde_urlencoded", + "sync_wrapper", + "system-configuration", "tokio", "tokio-rustls", "tower-service", @@ -3939,7 +3942,7 @@ version = "0.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cc7980f653f9a7db31acff916a262c3b78c562919263edea29bf41a056e20497" dependencies = [ - "gif", + "gif 0.12.0", "jpeg-decoder", "log", "pico-args", @@ -3962,44 +3965,50 @@ dependencies = [ [[package]] name = "rgb" -version = "0.8.36" +version = "0.8.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20ec2d3e3fc7a92ced357df9cebd5a10b6fb2aa1ee797bf7e9ce2f17dffc8f59" +checksum = "0f86ae463694029097b846d8f99fd5536740602ae00022c0c50c5600720b2f71" dependencies = [ "bytemuck", ] [[package]] name = "ring" -version = "0.16.20" +version = "0.17.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" +checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" dependencies = [ "cc", + "cfg-if", + "getrandom", "libc", - "once_cell", - "spin 0.5.2", + "spin", "untrusted", - "web-sys", - "winapi", + "windows-sys 0.52.0", ] [[package]] name = "roxmltree" -version = "0.18.0" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8f595a457b6b8c6cda66a48503e92ee8d19342f905948f29c383200ec9eb1d8" +checksum = "862340e351ce1b271a378ec53f304a5558f7db87f3769dc655a8f6ecbb68b302" dependencies = [ "xmlparser", ] +[[package]] +name = "roxmltree" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c20b6793b5c2fa6553b250154b78d6d0db37e72700ae35fad9387a46f487c97" + [[package]] name = "rusqlite" version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a78046161564f5e7cd9008aff3b2990b3850dc8e0349119b98e8f251e099f24d" dependencies = [ - "bitflags 2.4.2", + "bitflags 2.6.0", "fallible-iterator", "fallible-streaming-iterator", "hashlink", @@ -4019,9 +4028,9 @@ dependencies = [ [[package]] name = "rustc-demangle" -version = "0.1.22" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4a36c42d1873f9a77c53bde094f9664d9891bc604a45b4798fd2c389ed12e5b" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] name = "rustc-hash" @@ -4040,59 +4049,99 @@ dependencies = [ [[package]] name = "rustix" -version = "0.37.13" +version = "0.38.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f79bef90eb6d984c72722595b5b1348ab39275a5e5123faca6863bf07d75a4e0" +checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.6.0", "errno", - "io-lifetimes", "libc", - "linux-raw-sys 0.3.8", - "windows-sys 0.48.0", + "linux-raw-sys 0.4.14", + "windows-sys 0.52.0", ] [[package]] -name = "rustix" -version = "0.38.34" +name = "rustls" +version = "0.21.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" +checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" dependencies = [ - "bitflags 2.4.2", - "errno", - "libc", - "linux-raw-sys 0.4.13", - "windows-sys 0.52.0", + "log", + "ring", + "rustls-webpki 0.101.7", + "sct", ] [[package]] name = "rustls" -version = "0.21.6" +version = "0.22.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d1feddffcfcc0b33f5c6ce9a29e341e4cd59c3f78e7ee45f4a40c038b1d6cbb" +checksum = "bf4ef73721ac7bcd79b2b315da7779d8fc09718c6b3d2d1b2d94850eb8c18432" dependencies = [ "log", "ring", - "rustls-webpki", - "sct", + "rustls-pki-types", + "rustls-webpki 0.102.6", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-native-certs" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a88d6d420651b496bdd98684116959239430022a115c1240e6c3993be0b15fba" +dependencies = [ + "openssl-probe", + "rustls-pemfile 2.1.3", + "rustls-pki-types", + "schannel", + "security-framework", ] [[package]] name = "rustls-pemfile" -version = "1.0.3" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +dependencies = [ + "base64 0.21.7", +] + +[[package]] +name = "rustls-pemfile" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "196fe16b00e106300d3e45ecfcb764fa292a535d7326a29a5875c579c7417425" +dependencies = [ + "base64 0.22.1", + "rustls-pki-types", +] + +[[package]] +name = "rustls-pki-types" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc0a2ce646f8655401bb81e7927b812614bd5d91dbc968696be50603510fcaf0" + +[[package]] +name = "rustls-webpki" +version = "0.101.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" dependencies = [ - "base64 0.21.6", + "ring", + "untrusted", ] [[package]] name = "rustls-webpki" -version = "0.101.4" +version = "0.102.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d93931baf2d282fff8d3a532bbfd7653f734643161b87e3e01e59a04439bf0d" +checksum = "8e6b52d4fda176fd835fdc55a835d4a89b8499cad995885a21149d5ad62f852e" dependencies = [ "ring", + "rustls-pki-types", "untrusted", ] @@ -4131,9 +4180,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.13" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" [[package]] name = "same-file" @@ -4144,6 +4193,15 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "schannel" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" +dependencies = [ + "windows-sys 0.52.0", +] + [[package]] name = "scoped-tls" version = "1.0.1" @@ -4152,21 +4210,15 @@ checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" [[package]] name = "scopeguard" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" - -[[package]] -name = "scratch" -version = "1.0.5" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1792db035ce95be60c3f8853017b3999209281c24e2ba5bc8e59bf97a0c590c1" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "sct" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" dependencies = [ "ring", "untrusted", @@ -4174,14 +4226,14 @@ dependencies = [ [[package]] name = "sctk-adwaita" -version = "0.8.1" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82b2eaf3a5b264a521b988b2e73042e742df700c4f962cde845d1541adb46550" +checksum = "70b31447ca297092c5a9916fc3b955203157b37c19ca8edde4f52e9843e602c7" dependencies = [ "ab_glyph", "log", "memmap2 0.9.4", - "smithay-client-toolkit", + "smithay-client-toolkit 0.18.1", "tiny-skia", ] @@ -4201,9 +4253,9 @@ dependencies = [ [[package]] name = "secp256k1" -version = "0.28.1" +version = "0.28.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f622567e3b4b38154fb8190bcf6b160d7a4301d70595a49195b48c116007a27" +checksum = "d24b59d129cdadea20aea4fb2352fa053712e5d713eee47d700cd4b2bc002f10" dependencies = [ "bitcoin_hashes 0.13.0", "secp256k1-sys", @@ -4219,32 +4271,55 @@ dependencies = [ "cc", ] +[[package]] +name = "security-framework" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" +dependencies = [ + "bitflags 2.6.0", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75da29fe9b9b08fe9d6b22b5b4bcbc75d8db3aa31e639aa56bb62e9d46bfceaf" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "self_cell" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58bf37232d3bb9a2c4e641ca2a11d83b5062066f88df7fed36c28772046d65ba" +checksum = "d369a96f978623eb3dc28807c4852d6cc617fed53da5d3c400feff1ef34a714a" [[package]] name = "semver" -version = "1.0.18" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918" +checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" [[package]] name = "serde" -version = "1.0.186" +version = "1.0.208" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f5db24220c009de9bd45e69fb2938f4b6d2df856aa9304ce377b3180f83b7c1" +checksum = "cff085d2cb684faa248efb494c39b68e522822ac0de72ccf08109abde717cfb2" dependencies = [ "serde_derive", ] [[package]] name = "serde_bytes" -version = "0.11.14" +version = "0.11.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b8497c313fd43ab992087548117643f6fcd935cbf36f176ffda0aacf9591734" +checksum = "387cc504cb06bb40a96c8e04e951fe01854cf6bc921053c954e4a606d9675c6a" dependencies = [ "serde", ] @@ -4261,22 +4336,23 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.186" +version = "1.0.208" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ad697f7e0b65af4983a4ce8f56ed5b357e8d3c36651bf6a7e13639c17b8e670" +checksum = "24008e81ff7613ed8e5ba0cfaf24e2c2f1e5b8a0495711e44fcd4882fca62bcf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.75", ] [[package]] name = "serde_json" -version = "1.0.95" +version = "1.0.125" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d721eca97ac802aa7777b701877c8004d950fc142651367300d21c1cc0194744" +checksum = "83c8e735a073ccf5be70aa8066aa984eaf2fa000db6c8d0100ae605b366d31ed" dependencies = [ "itoa", + "memchr", "ryu", "serde", ] @@ -4295,23 +4371,33 @@ dependencies = [ [[package]] name = "serialport" -version = "4.3.0" +version = "4.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f5a15d0be940df84846264b09b51b10b931fb2f275becb80934e3568a016828" +checksum = "241ebb629ed9bf598b2b392ba42aa429f9ef2a0099001246a36ac4c084ee183f" dependencies = [ - "bitflags 2.4.2", + "bitflags 2.6.0", "cfg-if", "core-foundation-sys", "io-kit-sys", "libudev", "mach2", "nix", - "regex", "scopeguard", "unescaper", "winapi", ] +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + [[package]] name = "sha2" version = "0.10.8" @@ -4325,18 +4411,24 @@ dependencies = [ [[package]] name = "sharded-slab" -version = "0.1.4" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" dependencies = [ "lazy_static", ] +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + [[package]] name = "signal-hook-registry" -version = "1.4.1" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" +checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" dependencies = [ "libc", ] @@ -4353,9 +4445,9 @@ dependencies = [ [[package]] name = "simd-adler32" -version = "0.3.5" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "238abfbb77c1915110ad968465608b68e869e0772622c9656714e73e5a1a522f" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" [[package]] name = "simplecss" @@ -4368,33 +4460,43 @@ dependencies = [ [[package]] name = "siphasher" -version = "0.3.10" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" + +[[package]] +name = "skrifa" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de" +checksum = "abea4738067b1e628c6ce28b2c216c19e9ea95715cdb332680e821c3bec2ef23" +dependencies = [ + "bytemuck", + "read-fonts", +] [[package]] name = "slab" -version = "0.4.8" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" dependencies = [ "autocfg", ] [[package]] name = "slotmap" -version = "1.0.6" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1e08e261d0e8f5c43123b7adf3e4ca1690d655377ac93a03b2c9d3e98de1342" +checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a" dependencies = [ "version_check", ] [[package]] name = "smallvec" -version = "1.10.0" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "smithay-client-toolkit" @@ -4402,50 +4504,75 @@ version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "922fd3eeab3bd820d76537ce8f582b1cf951eceb5475c28500c7457d9d17f53a" dependencies = [ - "bitflags 2.4.2", - "calloop", - "calloop-wayland-source", + "bitflags 2.6.0", + "calloop 0.12.4", + "calloop-wayland-source 0.2.0", + "cursor-icon", + "libc", + "log", + "memmap2 0.9.4", + "rustix", + "thiserror", + "wayland-backend", + "wayland-client", + "wayland-csd-frame", + "wayland-cursor", + "wayland-protocols 0.31.2", + "wayland-protocols-wlr 0.2.0", + "wayland-scanner", + "xkeysym", +] + +[[package]] +name = "smithay-client-toolkit" +version = "0.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016" +dependencies = [ + "bitflags 2.6.0", + "calloop 0.13.0", + "calloop-wayland-source 0.3.0", "cursor-icon", "libc", "log", "memmap2 0.9.4", - "rustix 0.38.34", + "rustix", "thiserror", "wayland-backend", "wayland-client", "wayland-csd-frame", "wayland-cursor", - "wayland-protocols", - "wayland-protocols-wlr", + "wayland-protocols 0.32.3", + "wayland-protocols-wlr 0.3.3", "wayland-scanner", "xkeysym", ] [[package]] name = "smithay-clipboard" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c091e7354ea8059d6ad99eace06dd13ddeedbb0ac72d40a9a6e7ff790525882d" +checksum = "cc8216eec463674a0e90f29e0ae41a4db573ec5b56b1c6c1c71615d249b6d846" dependencies = [ "libc", - "smithay-client-toolkit", + "smithay-client-toolkit 0.19.2", "wayland-backend", ] [[package]] name = "smol_str" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6845563ada680337a52d43bb0b29f396f2d911616f6573012645b9e3d048a49" +checksum = "dd538fb6910ac1099850255cf94a94df6551fbdd602454387d0adb2d1ca6dead" dependencies = [ "serde", ] [[package]] name = "snafu" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb0656e7e3ffb70f6c39b3c2a86332bb74aa3c679da781642590f3c1118c5045" +checksum = "e4de37ad025c587a29e8f3f5605c00f70b98715ef90b9061a815b9e59e9042d6" dependencies = [ "doc-comment", "snafu-derive", @@ -4453,9 +4580,9 @@ dependencies = [ [[package]] name = "snafu-derive" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "475b3bbe5245c26f2d8a6f62d67c1f30eb9fffeccee721c45d162c3ebbdf81b2" +checksum = "990079665f075b699031e9c08fd3ab99be5029b96f3b78dc0709e8f77e4efebf" dependencies = [ "heck", "proc-macro2", @@ -4465,35 +4592,37 @@ dependencies = [ [[package]] name = "socket2" -version = "0.4.9" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" +checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" dependencies = [ "libc", - "winapi", + "windows-sys 0.52.0", ] [[package]] name = "softbuffer" -version = "0.4.2" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61d5d17f23326fe0d9b0af282f73f3af666699420fd5f42629efd9c6e7dc166f" +checksum = "d623bff5d06f60d738990980d782c8c866997d9194cfe79ecad00aa2f76826dd" dependencies = [ "as-raw-xcb-connection", "bytemuck", - "cfg_aliases 0.2.0", - "cocoa", + "cfg_aliases 0.2.1", "core-graphics", "drm", - "fastrand 2.1.0", - "foreign-types 0.5.0", + "fastrand", + "foreign-types", "js-sys", "log", "memmap2 0.9.4", - "objc", + "objc2 0.5.2", + "objc2-app-kit", + "objc2-foundation", + "objc2-quartz-core", "raw-window-handle", - "redox_syscall 0.5.1", - "rustix 0.38.34", + "redox_syscall 0.5.3", + "rustix", "tiny-xlib", "wasm-bindgen", "wayland-backend", @@ -4504,12 +4633,6 @@ dependencies = [ "x11rb", ] -[[package]] -name = "spin" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" - [[package]] name = "spin" version = "0.9.8" @@ -4525,7 +4648,7 @@ version = "0.3.0+sdk-1.3.268.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844" dependencies = [ - "bitflags 2.4.2", + "bitflags 2.6.0", ] [[package]] @@ -4555,15 +4678,15 @@ dependencies = [ [[package]] name = "subtle" -version = "2.4.1" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "svg_fmt" -version = "0.4.1" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fb1df15f412ee2e9dfc1c504260fa695c1c3f10fe9f4a6ee2d2184d7d6450e2" +checksum = "20e16a0f46cf5fd675563ef54f26e83e20f2366bcf027bcb3cc3ed2b98aaf2ca" [[package]] name = "svgtypes" @@ -4571,17 +4694,17 @@ version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d71499ff2d42f59d26edb21369a308ede691421f79ebc0f001e2b1fd3a7c9e52" dependencies = [ - "kurbo 0.9.4", + "kurbo 0.9.5", "siphasher", ] [[package]] name = "swash" -version = "0.1.12" +version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d06ff4664af8923625604261c645f5c4cc610cc83c84bec74b50d76237089de7" +checksum = "93cdc334a50fcc2aa3f04761af3b28196280a6aaadb1ef11215c478ae32615ac" dependencies = [ - "read-fonts", + "skrifa", "yazi", "zeno", ] @@ -4599,15 +4722,21 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.60" +version = "2.0.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "909518bc7b1c9b779f1bbf07f2929d35af9f0f37e47c6e9ef7f9dddc1e1821f3" +checksum = "f6af063034fc1935ede7be0122941bafa9bacb949334d090b77ca98b5817c7d9" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] +[[package]] +name = "sync_wrapper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + [[package]] name = "sys-locale" version = "0.3.1" @@ -4617,11 +4746,32 @@ dependencies = [ "libc", ] +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "tar" -version = "0.4.40" +version = "0.4.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b16afcea1f22891c49a00c751c7b63b2233284064f11a200fc624137c51e2ddb" +checksum = "cb797dad5fb5b76fcf519e702f4a589483b5ef06567f160c392832c1f5e44909" dependencies = [ "filetime", "libc", @@ -4629,16 +4779,15 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.6.0" +version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31c0432476357e58790aaa47a8efb0c5138f137343f3b5f23bd36a27e3b0a6d6" +checksum = "04cbcdd0c794ebb0d4cf35e88edd2f7d2c4c3e9a5a6dab322839b321c6a87a64" dependencies = [ - "autocfg", "cfg-if", - "fastrand 1.9.0", - "redox_syscall 0.3.5", - "rustix 0.37.13", - "windows-sys 0.48.0", + "fastrand", + "once_cell", + "rustix", + "windows-sys 0.59.0", ] [[package]] @@ -4652,29 +4801,29 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.59" +version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0126ad08bff79f29fc3ae6a55cc72352056dfff61e3ff8bb7129476d44b23aa" +checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.59" +version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1cd413b5d558b4c5bf3680e324a6fa5014e7b7c067a51e69dbdf47eb7148b66" +checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.75", ] [[package]] name = "thread_local" -version = "1.1.7" +version = "1.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" dependencies = [ "cfg-if", "once_cell", @@ -4682,9 +4831,9 @@ dependencies = [ [[package]] name = "tiff" -version = "0.8.1" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7449334f9ff2baf290d55d73983a7d6fa15e01198faef72af07e2a8db851e471" +checksum = "ba1310fcea54c6a9a4fd1aad794ecc02c31682f6bfbecdf460bf19533eed1e3e" dependencies = [ "flate2", "jpeg-decoder", @@ -4728,21 +4877,22 @@ dependencies = [ [[package]] name = "tiny-xlib" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4098d49269baa034a8d1eae9bd63e9fa532148d772121dace3bcd6a6c98eb6d" +checksum = "1d52f22673960ad13af14ff4025997312def1223bfa7c8e4949d099e6b3d5d1c" dependencies = [ "as-raw-xcb-connection", - "ctor", - "libloading 0.8.1", + "ctor-lite", + "libloading 0.8.5", + "pkg-config", "tracing", ] [[package]] name = "tinyvec" -version = "1.6.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" dependencies = [ "tinyvec_macros", ] @@ -4755,31 +4905,30 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.27.0" +version = "1.39.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0de47a4eecbe11f498978a9b29d792f0d2692d1dd003650c24c76510e3bc001" +checksum = "9babc99b9923bfa4804bd74722ff02c0381021eafa4db9949217e3be8e84fff5" dependencies = [ - "autocfg", + "backtrace", "bytes", "libc", - "mio", - "num_cpus", + "mio 1.0.2", "pin-project-lite", "signal-hook-registry", "socket2", "tokio-macros", - "windows-sys 0.45.0", + "windows-sys 0.52.0", ] [[package]] name = "tokio-macros" -version = "2.0.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61a573bdc87985e9d6ddeed1b3d864e8a302c847e40d647746df2f1de209d1ce" +checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.75", ] [[package]] @@ -4788,7 +4937,7 @@ version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" dependencies = [ - "rustls", + "rustls 0.21.12", "tokio", ] @@ -4807,16 +4956,15 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.8" +version = "0.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d" +checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" dependencies = [ "bytes", "futures-core", "futures-sink", "pin-project-lite", "tokio", - "tracing", ] [[package]] @@ -4830,34 +4978,33 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.6.1" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ab8ed2edee10b50132aed5f331333428b011c99402b5a534154ed15746f9622" +checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" [[package]] name = "toml_edit" -version = "0.19.8" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "239410c8609e8125456927e6707163a3b1fdb40561e4b803bc041f466ccfdc13" +checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" dependencies = [ - "indexmap 1.9.3", + "indexmap", "toml_datetime", "winnow", ] [[package]] name = "tower-service" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.37" +version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" dependencies = [ - "cfg-if", "pin-project-lite", "tracing-attributes", "tracing-core", @@ -4865,20 +5012,20 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.23" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.75", ] [[package]] name = "tracing-core" -version = "0.1.30" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" dependencies = [ "once_cell", "valuable", @@ -4886,20 +5033,20 @@ dependencies = [ [[package]] name = "tracing-log" -version = "0.1.3" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" dependencies = [ - "lazy_static", "log", + "once_cell", "tracing-core", ] [[package]] name = "tracing-subscriber" -version = "0.3.16" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6176eae26dd70d0c919749377897b54a9276bd7061339665dd68777926b5a70" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" dependencies = [ "nu-ansi-term", "sharded-slab", @@ -4911,15 +5058,9 @@ dependencies = [ [[package]] name = "try-lock" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" - -[[package]] -name = "ttf-parser" -version = "0.18.1" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0609f771ad9c6155384897e1df4d948e692667cc0588548b68eb44d052b27633" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "ttf-parser" @@ -4933,26 +5074,54 @@ version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "17f77d76d837a7830fe1d4f12b7b4ba4192c1888001c7164257e4bc6d21d96b4" +[[package]] +name = "ttf-parser" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5be21190ff5d38e8b4a2d3b6a3ae57f612cc39c96e83cedeaf7abc338a8bac4a" + +[[package]] +name = "tungstenite" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ef1a641ea34f399a848dea702823bbecfb4c486f911735368f1f137cb8257e1" +dependencies = [ + "byteorder", + "bytes", + "data-encoding", + "http 1.1.0", + "httparse", + "log", + "rand", + "rustls 0.22.4", + "rustls-native-certs", + "rustls-pki-types", + "sha1", + "thiserror", + "url", + "utf-8", +] + [[package]] name = "typenum" -version = "1.16.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "unescaper" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0adf6ad32eb5b3cadff915f7b770faaac8f7ff0476633aa29eb0d9584d889d34" +checksum = "c878a167baa8afd137494101a688ef8c67125089ff2249284bd2b5f9bfedb815" dependencies = [ "thiserror", ] [[package]] name = "unicode-bidi" -version = "0.3.13" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" +checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" [[package]] name = "unicode-bidi-mirroring" @@ -4968,9 +5137,9 @@ checksum = "cc2520efa644f8268dce4dcd3050eaa7fc044fca03961e9998ac7e2e92b77cf1" [[package]] name = "unicode-ident" -version = "1.0.8" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" [[package]] name = "unicode-linebreak" @@ -4995,15 +5164,15 @@ checksum = "e4259d9d4425d9f0661581b804cb85fe66a4c631cadd8f490d1c13a35d5d9291" [[package]] name = "unicode-script" -version = "0.5.5" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d817255e1bed6dfd4ca47258685d14d2bdcfbc64fdc9e3819bd5848057b8ecc" +checksum = "ad8d71f5726e5f285a935e9fe8edfd53f0491eb6e9a5774097fdabee7cd8c9cd" [[package]] name = "unicode-segmentation" -version = "1.10.1" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" +checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" [[package]] name = "unicode-vo" @@ -5013,9 +5182,9 @@ checksum = "b1d386ff53b415b7fe27b50bb44679e2cc4660272694b7b6f3326d8480823a94" [[package]] name = "unicode-width" -version = "0.1.10" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" +checksum = "0336d538f7abc86d282a4189614dfaa90810dfc2c6f6427eaf88e16311dd225d" [[package]] name = "unicode-xid" @@ -5035,15 +5204,15 @@ dependencies = [ [[package]] name = "untrusted" -version = "0.7.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.3.1" +version = "2.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" +checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" dependencies = [ "form_urlencoded", "idna", @@ -5056,7 +5225,7 @@ version = "0.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c51daa774fe9ee5efcf7b4fec13019b8119cda764d9a8b5b06df02bb1445c656" dependencies = [ - "base64 0.21.6", + "base64 0.21.7", "log", "pico-args", "usvg-parser", @@ -5074,9 +5243,9 @@ dependencies = [ "data-url", "flate2", "imagesize", - "kurbo 0.9.4", + "kurbo 0.9.5", "log", - "roxmltree", + "roxmltree 0.18.1", "simplecss", "siphasher", "svgtypes", @@ -5090,7 +5259,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4d2374378cb7a3fb8f33894e0fdb8625e1bbc4f25312db8d91f862130b541593" dependencies = [ "fontdb", - "kurbo 0.9.4", + "kurbo 0.9.5", "log", "rustybuzz 0.10.0", "unicode-bidi", @@ -5111,6 +5280,12 @@ dependencies = [ "tiny-skia-path", ] +[[package]] +name = "utf-8" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" + [[package]] name = "valuable" version = "0.1.0" @@ -5125,9 +5300,9 @@ checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[package]] name = "version_check" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "walkdir" @@ -5156,34 +5331,35 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.92" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +checksum = "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5" dependencies = [ "cfg-if", + "once_cell", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.92" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +checksum = "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.75", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.42" +version = "0.4.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" +checksum = "61e9300f63a621e96ed275155c108eb6f843b6a26d053f122ab69724559dc8ed" dependencies = [ "cfg-if", "js-sys", @@ -5193,9 +5369,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.92" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -5203,22 +5379,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.92" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.75", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.92" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" +checksum = "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484" [[package]] name = "wasm-timer" @@ -5237,13 +5413,13 @@ dependencies = [ [[package]] name = "wayland-backend" -version = "0.3.3" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d50fa61ce90d76474c87f5fc002828d81b32677340112b4ef08079a9d459a40" +checksum = "f90e11ce2ca99c97b940ee83edbae9da2d56a08f9ea8158550fd77fa31722993" dependencies = [ "cc", "downcast-rs", - "rustix 0.38.34", + "rustix", "scoped-tls", "smallvec", "wayland-sys", @@ -5251,12 +5427,12 @@ dependencies = [ [[package]] name = "wayland-client" -version = "0.31.2" +version = "0.31.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82fb96ee935c2cea6668ccb470fb7771f6215d1691746c2d896b447a00ad3f1f" +checksum = "7e321577a0a165911bdcfb39cf029302479d7527b517ee58ab0f6ad09edf0943" dependencies = [ - "bitflags 2.4.2", - "rustix 0.38.34", + "bitflags 2.6.0", + "rustix", "wayland-backend", "wayland-scanner", ] @@ -5267,18 +5443,18 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e" dependencies = [ - "bitflags 2.4.2", + "bitflags 2.6.0", "cursor-icon", "wayland-backend", ] [[package]] name = "wayland-cursor" -version = "0.31.1" +version = "0.31.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71ce5fa868dd13d11a0d04c5e2e65726d0897be8de247c0c5a65886e283231ba" +checksum = "6ef9489a8df197ebf3a8ce8a7a7f0a2320035c3743f3c1bd0bdbccf07ce64f95" dependencies = [ - "rustix 0.38.34", + "rustix", "wayland-client", "xcursor", ] @@ -5289,7 +5465,19 @@ version = "0.31.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f81f365b8b4a97f422ac0e8737c438024b5951734506b0e1d775c73030561f4" dependencies = [ - "bitflags 2.4.2", + "bitflags 2.6.0", + "wayland-backend", + "wayland-client", + "wayland-scanner", +] + +[[package]] +name = "wayland-protocols" +version = "0.32.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62989625a776e827cc0f15d41444a3cea5205b963c3a25be48ae1b52d6b4daaa" +dependencies = [ + "bitflags 2.6.0", "wayland-backend", "wayland-client", "wayland-scanner", @@ -5301,10 +5489,10 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "23803551115ff9ea9bce586860c5c5a971e360825a0309264102a9495a5ff479" dependencies = [ - "bitflags 2.4.2", + "bitflags 2.6.0", "wayland-backend", "wayland-client", - "wayland-protocols", + "wayland-protocols 0.31.2", "wayland-scanner", ] @@ -5314,18 +5502,31 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ad1f61b76b6c2d8742e10f9ba5c3737f6530b4c243132c2a2ccc8aa96fe25cd6" dependencies = [ - "bitflags 2.4.2", + "bitflags 2.6.0", + "wayland-backend", + "wayland-client", + "wayland-protocols 0.31.2", + "wayland-scanner", +] + +[[package]] +name = "wayland-protocols-wlr" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd993de54a40a40fbe5601d9f1fbcaef0aebcc5fda447d7dc8f6dcbaae4f8953" +dependencies = [ + "bitflags 2.6.0", "wayland-backend", "wayland-client", - "wayland-protocols", + "wayland-protocols 0.32.3", "wayland-scanner", ] [[package]] name = "wayland-scanner" -version = "0.31.1" +version = "0.31.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63b3a62929287001986fb58c789dce9b67604a397c15c611ad9f747300b6c283" +checksum = "d7b56f89937f1cf2ee1f1259cf2936a17a1f45d8f0aa1019fae6d470d304cfa6" dependencies = [ "proc-macro2", "quick-xml", @@ -5334,9 +5535,9 @@ dependencies = [ [[package]] name = "wayland-sys" -version = "0.31.1" +version = "0.31.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15a0c8eaff5216d07f226cb7a549159267f3467b289d9a2e52fd3ef5aae2b7af" +checksum = "43676fe2daf68754ecf1d72026e4e6c15483198b5d24e888b74d3f22f887a148" dependencies = [ "dlib", "log", @@ -5366,15 +5567,15 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.25.2" +version = "0.25.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14247bb57be4f377dfb94c72830b8ce8fc6beac03cf4bf7b9732eadd414123fc" +checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" [[package]] name = "weezl" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9193164d4de03a926d909d3bc7c30543cecb35400c02114792c2cae20d5e2dbb" +checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082" [[package]] name = "wgpu" @@ -5388,7 +5589,7 @@ dependencies = [ "js-sys", "log", "naga", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "profiling", "raw-window-handle", "smallvec", @@ -5409,14 +5610,14 @@ checksum = "28b94525fc99ba9e5c9a9e24764f2bc29bad0911a7446c12f446a8277369bf3a" dependencies = [ "arrayvec", "bit-vec", - "bitflags 2.4.2", + "bitflags 2.6.0", "cfg_aliases 0.1.1", "codespan-reporting", - "indexmap 2.0.0", + "indexmap", "log", "naga", "once_cell", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "profiling", "raw-window-handle", "rustc-hash", @@ -5429,15 +5630,15 @@ dependencies = [ [[package]] name = "wgpu-hal" -version = "0.19.4" +version = "0.19.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc1a4924366df7ab41a5d8546d6534f1f33231aa5b3f72b9930e300f254e39c3" +checksum = "bfabcfc55fd86611a855816326b2d54c3b2fd7972c27ce414291562650552703" dependencies = [ "android_system_properties", "arrayvec", "ash", "bit-set", - "bitflags 2.4.2", + "bitflags 2.6.0", "block", "cfg_aliases 0.1.1", "core-graphics-types", @@ -5451,14 +5652,14 @@ dependencies = [ "js-sys", "khronos-egl", "libc", - "libloading 0.8.1", + "libloading 0.8.5", "log", "metal", "naga", "ndk-sys", "objc", "once_cell", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "profiling", "range-alloc", "raw-window-handle", @@ -5478,27 +5679,28 @@ version = "0.19.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b671ff9fb03f78b46ff176494ee1ebe7d603393f42664be55b64dc8d53969805" dependencies = [ - "bitflags 2.4.2", + "bitflags 2.6.0", "js-sys", "web-sys", ] [[package]] name = "which" -version = "4.4.0" +version = "4.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2441c784c52b289a054b7201fc93253e288f094e2f4be9058343127c4226a269" +checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" dependencies = [ "either", - "libc", + "home", "once_cell", + "rustix", ] [[package]] name = "widestring" -version = "1.0.2" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "653f141f39ec16bba3c5abe400a0c60da7468261cc2cbf36805022876bc721a8" +checksum = "7219d36b6eac893fa81e84ebe06485e7dcbb616177469b142df14f1f4deb1311" [[package]] name = "winapi" @@ -5518,11 +5720,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.5" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "winapi", + "windows-sys 0.59.0", ] [[package]] @@ -5545,15 +5747,6 @@ dependencies = [ "thiserror", ] -[[package]] -name = "windows" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" -dependencies = [ - "windows-targets 0.48.0", -] - [[package]] name = "windows" version = "0.52.0" @@ -5561,7 +5754,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be" dependencies = [ "windows-core", - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] @@ -5570,7 +5763,7 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] @@ -5588,7 +5781,7 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" dependencies = [ - "windows-targets 0.48.0", + "windows-targets 0.48.5", ] [[package]] @@ -5597,7 +5790,16 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.5", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", ] [[package]] @@ -5617,33 +5819,33 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" dependencies = [ - "windows_aarch64_gnullvm 0.48.0", - "windows_aarch64_msvc 0.48.0", - "windows_i686_gnu 0.48.0", - "windows_i686_msvc 0.48.0", - "windows_x86_64_gnu 0.48.0", - "windows_x86_64_gnullvm 0.48.0", - "windows_x86_64_msvc 0.48.0", + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", ] [[package]] name = "windows-targets" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm 0.52.5", - "windows_aarch64_msvc 0.52.5", - "windows_i686_gnu 0.52.5", + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", "windows_i686_gnullvm", - "windows_i686_msvc 0.52.5", - "windows_x86_64_gnu 0.52.5", - "windows_x86_64_gnullvm 0.52.5", - "windows_x86_64_msvc 0.52.5", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", ] [[package]] @@ -5654,15 +5856,15 @@ checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" [[package]] name = "windows_aarch64_gnullvm" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_msvc" @@ -5672,15 +5874,15 @@ checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" [[package]] name = "windows_aarch64_msvc" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_aarch64_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_i686_gnu" @@ -5690,21 +5892,21 @@ checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" [[package]] name = "windows_i686_gnu" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_gnu" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] name = "windows_i686_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_msvc" @@ -5714,15 +5916,15 @@ checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" [[package]] name = "windows_i686_msvc" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_i686_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_x86_64_gnu" @@ -5732,15 +5934,15 @@ checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" [[package]] name = "windows_x86_64_gnu" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnu" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnullvm" @@ -5750,15 +5952,15 @@ checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" [[package]] name = "windows_x86_64_gnullvm" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_msvc" @@ -5768,15 +5970,15 @@ checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" [[package]] name = "windows_x86_64_msvc" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "windows_x86_64_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winit" @@ -5784,12 +5986,12 @@ version = "0.29.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0d59ad965a635657faf09c8f062badd885748428933dad8e8bdd64064d92e5ca" dependencies = [ - "ahash 0.8.11", + "ahash", "android-activity", "atomic-waker", - "bitflags 2.4.2", + "bitflags 2.6.0", "bytemuck", - "calloop", + "calloop 0.12.4", "cfg_aliases 0.1.1", "core-foundation", "core-graphics", @@ -5801,22 +6003,22 @@ dependencies = [ "memmap2 0.9.4", "ndk", "ndk-sys", - "objc2", + "objc2 0.4.1", "once_cell", "orbclient", "percent-encoding", "raw-window-handle", "redox_syscall 0.3.5", - "rustix 0.38.34", + "rustix", "sctk-adwaita", - "smithay-client-toolkit", + "smithay-client-toolkit 0.18.1", "smol_str", "unicode-segmentation", "wasm-bindgen", "wasm-bindgen-futures", "wayland-backend", "wayland-client", - "wayland-protocols", + "wayland-protocols 0.31.2", "wayland-protocols-plasma", "web-sys", "web-time", @@ -5828,9 +6030,9 @@ dependencies = [ [[package]] name = "winnow" -version = "0.4.1" +version = "0.5.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae8970b36c66498d8ff1d66685dc86b91b29db0c7739899012f63a63814b4b28" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" dependencies = [ "memchr", ] @@ -5865,9 +6067,9 @@ dependencies = [ "as-raw-xcb-connection", "gethostname", "libc", - "libloading 0.8.1", + "libloading 0.8.5", "once_cell", - "rustix 0.38.34", + "rustix", "x11rb-protocol", ] @@ -5890,12 +6092,9 @@ dependencies = [ [[package]] name = "xcursor" -version = "0.3.4" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "463705a63313cd4301184381c5e8042f0a7e9b4bb63653f216311d4ae74690b7" -dependencies = [ - "nom", -] +checksum = "0ef33da6b1660b4ddbfb3aef0ade110c8b8a781a3b6382fa5f2b5b040fd55f61" [[package]] name = "xkbcommon-dl" @@ -5903,7 +6102,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5" dependencies = [ - "bitflags 2.4.2", + "bitflags 2.6.0", "dlib", "log", "once_cell", @@ -5912,21 +6111,21 @@ dependencies = [ [[package]] name = "xkeysym" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "054a8e68b76250b253f671d1268cb7f1ae089ec35e195b2efb2a4e9a836d0621" +checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56" [[package]] name = "xml-rs" -version = "0.8.4" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2d7d3948613f75c98fd9328cfdcc45acc4d360655289d0a7d4ec931392200a3" +checksum = "539a77ee7c0de333dcc6da69b177380a0b81e0dacfa4f7344c465a36871ee601" [[package]] name = "xmlparser" -version = "0.13.5" +version = "0.13.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d25c75bf9ea12c4040a97f829154768bbbce366287e2dc044af160cd79a13fd" +checksum = "66fee0b777b0f5ac1c69bb06d361268faafa61cd4682ae064a171c16c433e9e4" [[package]] name = "xmlwriter" @@ -5936,9 +6135,9 @@ checksum = "ec7a2a501ed189703dba8b08142f057e887dfc4b2cc4db2d343ac6376ba3e0b9" [[package]] name = "xxhash-rust" -version = "0.8.10" +version = "0.8.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "927da81e25be1e1a2901d59b81b37dd2efd1fc9c9345a55007f09bf5a2d3ee03" +checksum = "6a5cbf750400958819fb6178eaa83bee5cd9c29a26a40cc241df8c70fdd46984" [[package]] name = "yansi" @@ -5960,22 +6159,23 @@ checksum = "dd15f8e0dbb966fd9245e7498c7e9e5055d9e5c8b676b95bd67091cd11a1e697" [[package]] name = "zerocopy" -version = "0.7.32" +version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ + "byteorder", "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.32" +version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.75", ] [[package]] @@ -5995,7 +6195,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.75", ] [[package]] @@ -6013,9 +6213,9 @@ dependencies = [ [[package]] name = "zune-inflate" -version = "0.2.53" +version = "0.2.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "440a08fd59c6442e4b846ea9b10386c38307eae728b216e1ab2c305d1c9daaf8" +checksum = "73ab332fe2f6680068f3582b16a24f90ad7096d5d39b974d1c0aff0125116f02" dependencies = [ "simd-adler32", ] diff --git a/gui/Cargo.toml b/gui/Cargo.toml index 2f0f9c928..28a4c4071 100644 --- a/gui/Cargo.toml +++ b/gui/Cargo.toml @@ -47,6 +47,7 @@ bitcoin_hashes = "0.12" reqwest = { version = "0.11", default-features=false, features = ["json", "rustls-tls"] } rust-ini = "0.19.0" +ledger_manager = { git = "https://github.com/pythcoiner/ledger_installer.git", branch = "liana", ref = "afcc0e5db74488191b5d9b3f28eaad8717772c58"} [patch.crates-io] iced_style = { git = "https://github.com/edouardparis/iced", branch = "patch-0.12.3"} diff --git a/gui/src/app/message.rs b/gui/src/app/message.rs index 97b77417f..a0f16343f 100644 --- a/gui/src/app/message.rs +++ b/gui/src/app/message.rs @@ -14,6 +14,7 @@ use crate::{ app::{cache::Cache, error::Error, view, wallet::Wallet}, daemon::model::*, hw::HardwareWalletMessage, + ledger_upgrade::UpgradeMessage, }; #[derive(Debug)] @@ -44,4 +45,6 @@ pub enum Message { LabelsUpdated(Result>, Error>), BroadcastModal(Result, Error>), RbfModal(Box, bool, Result, Error>), + UpgradeLedger(String, Network), + Upgrade(UpgradeMessage), } diff --git a/gui/src/app/state/psbt.rs b/gui/src/app/state/psbt.rs index 0573f6bba..bdcc63236 100644 --- a/gui/src/app/state/psbt.rs +++ b/gui/src/app/state/psbt.rs @@ -32,6 +32,7 @@ use crate::{ Daemon, }, hw::{HardwareWallet, HardwareWallets}, + ledger_upgrade::{ledger_upgrade_subscriptions, maybe_start_upgrade, update_upgrade_state}, }; pub trait Action { @@ -410,6 +411,7 @@ pub struct SignAction { signed: HashSet, is_saved: bool, display_modal: bool, + upgrading: bool, } impl SignAction { @@ -428,13 +430,20 @@ impl SignAction { signed, is_saved, display_modal: true, + upgrading: false, } } } impl Action for SignAction { fn subscription(&self) -> Subscription { - self.hws.refresh().map(Message::HardwareWallets) + let mut subs = ledger_upgrade_subscriptions(&self.hws); + subs.push( + self.hws + .refresh(self.wallet.main_descriptor.is_taproot()) + .map(Message::HardwareWallets), + ); + Subscription::batch(subs) } fn update( @@ -467,6 +476,12 @@ impl Action for SignAction { |(fg, res)| Message::Signed(fg, res), ); } + Message::View(view::Message::UpgradeLedger(id, network)) => { + maybe_start_upgrade(id, &mut self.hws, network, &mut self.upgrading); + } + Message::Upgrade(msg) => { + update_upgrade_state(msg, &mut self.hws, &mut self.upgrading); + } Message::Signed(fingerprint, res) => { self.signing.remove(&fingerprint); match res { @@ -526,6 +541,15 @@ impl Action for SignAction { Command::none() } fn view<'a>(&'a self, content: Element<'a, view::Message>) -> Element<'a, view::Message> { + let network = if self + .wallet + .main_descriptor + .all_xpubs_net_is(Network::Bitcoin) + { + Network::Bitcoin + } else { + Network::Testnet + }; let content = toast::Manager::new( content, view::psbt::sign_action_toasts(self.error.as_ref(), &self.hws.list, &self.signing), @@ -544,9 +568,15 @@ impl Action for SignAction { .and_then(|signer| self.wallet.keys_aliases.get(&signer.fingerprint)), &self.signed, &self.signing, + self.upgrading, + network, ), ) - .on_blur(Some(view::Message::Spend(view::SpendTxMessage::Cancel))) + .on_blur(if !self.upgrading { + Some(view::Message::Spend(view::SpendTxMessage::Cancel)) + } else { + None + }) .into() } else { content diff --git a/gui/src/app/state/receive.rs b/gui/src/app/state/receive.rs index 17ef1780c..4e60f74da 100644 --- a/gui/src/app/state/receive.rs +++ b/gui/src/app/state/receive.rs @@ -19,12 +19,12 @@ use crate::{ view, wallet::Wallet, }, + daemon::{ + model::{LabelItem, Labelled}, + Daemon, + }, hw::{HardwareWallet, HardwareWallets}, -}; - -use crate::daemon::{ - model::{LabelItem, Labelled}, - Daemon, + ledger_upgrade::{ledger_upgrade_subscriptions, maybe_start_upgrade, update_upgrade_state}, }; pub enum Modal { @@ -89,7 +89,11 @@ impl State for ReceivePanel { match &self.modal { Modal::VerifyAddress(m) => modal::Modal::new(content, m.view()) - .on_blur(Some(view::Message::Close)) + .on_blur(if !m.upgrading { + Some(view::Message::Close) + } else { + None + }) .into(), Modal::ShowQrCode(m) => modal::Modal::new(content, m.view()) .on_blur(Some(view::Message::Close)) @@ -152,6 +156,7 @@ impl State for ReceivePanel { .derivation_indexes .get(i) .expect("Must be present"), + self.wallet.main_descriptor.is_taproot(), )); Command::none() } @@ -222,6 +227,8 @@ pub struct VerifyAddressModal { hws: HardwareWallets, address: Address, derivation_index: ChildNumber, + taproot: bool, + pub upgrading: bool, } impl VerifyAddressModal { @@ -231,6 +238,7 @@ impl VerifyAddressModal { network: Network, address: Address, derivation_index: ChildNumber, + taproot: bool, ) -> Self { Self { warning: None, @@ -238,23 +246,30 @@ impl VerifyAddressModal { hws: HardwareWallets::new(data_dir, network).with_wallet(wallet), address, derivation_index, + taproot, + upgrading: false, } } } impl VerifyAddressModal { fn view(&self) -> Element { + let network = self.address.network(); view::receive::verify_address_modal( self.warning.as_ref(), &self.hws.list, &self.chosen_hws, &self.address, &self.derivation_index, + self.upgrading, + *network, ) } fn subscription(&self) -> Subscription { - self.hws.refresh().map(Message::HardwareWallets) + let mut subs = ledger_upgrade_subscriptions(&self.hws); + subs.push(self.hws.refresh(self.taproot).map(Message::HardwareWallets)); + Subscription::batch(subs) } fn update( @@ -296,6 +311,14 @@ impl VerifyAddressModal { Command::none() } } + Message::View(view::Message::UpgradeLedger(id, network)) => { + maybe_start_upgrade(id, &mut self.hws, network, &mut self.upgrading); + Command::none() + } + Message::Upgrade(msg) => { + update_upgrade_state(msg, &mut self.hws, &mut self.upgrading); + Command::none() + } _ => Command::none(), } } diff --git a/gui/src/app/state/settings/wallet.rs b/gui/src/app/state/settings/wallet.rs index 34690539e..d9a6363d9 100644 --- a/gui/src/app/state/settings/wallet.rs +++ b/gui/src/app/state/settings/wallet.rs @@ -18,6 +18,7 @@ use crate::{ }, daemon::{Daemon, DaemonBackend}, hw::{HardwareWallet, HardwareWalletConfig, HardwareWallets}, + ledger_upgrade::{ledger_upgrade_subscriptions, maybe_start_upgrade, update_upgrade_state}, }; pub struct WalletSettingsState { @@ -84,7 +85,11 @@ impl State for WalletSettingsState { ); if let Some(m) = &self.modal { modal::Modal::new(content, m.view()) - .on_blur(Some(view::Message::Close)) + .on_blur(if !m.upgrading { + Some(view::Message::Close) + } else { + None + }) .into() } else { content @@ -201,6 +206,7 @@ pub struct RegisterWalletModal { hws: HardwareWallets, registered: HashSet, processing: bool, + pub upgrading: bool, } impl RegisterWalletModal { @@ -217,23 +223,42 @@ impl RegisterWalletModal { wallet, processing: false, registered, + upgrading: false, } } } impl RegisterWalletModal { fn view(&self) -> Element { + let upgrading = self.hws.list.iter().any(|hw| hw.is_upgrade_in_progress()); + let network = if self + .wallet + .main_descriptor + .all_xpubs_net_is(Network::Bitcoin) + { + Network::Bitcoin + } else { + Network::Testnet + }; view::settings::register_wallet_modal( self.warning.as_ref(), &self.hws.list, self.processing, self.chosen_hw, &self.registered, + upgrading, + network, ) } fn subscription(&self) -> Subscription { - self.hws.refresh().map(Message::HardwareWallets) + let mut subs = ledger_upgrade_subscriptions(&self.hws); + subs.push( + self.hws + .refresh(self.wallet.main_descriptor.is_taproot()) + .map(Message::HardwareWallets), + ); + Subscription::batch(subs) } fn update( @@ -298,6 +323,14 @@ impl RegisterWalletModal { Command::none() } } + Message::View(view::Message::UpgradeLedger(id, network)) => { + maybe_start_upgrade(id, &mut self.hws, network, &mut self.upgrading); + Command::none() + } + Message::Upgrade(msg) => { + update_upgrade_state(msg, &mut self.hws, &mut self.upgrading); + Command::none() + } _ => Command::none(), } } diff --git a/gui/src/app/view/hw.rs b/gui/src/app/view/hw.rs index 948047562..82014ed7b 100644 --- a/gui/src/app/view/hw.rs +++ b/gui/src/app/view/hw.rs @@ -1,10 +1,15 @@ use iced::Length; -use liana_ui::{component::hw, theme, widget::*}; +use liana::miniscript::bitcoin::Network; +use liana_ui::{ + component::hw::{self, ledger_need_upgrade, ledger_upgrading}, + theme, + widget::*, +}; use crate::{ app::view::message::*, - hw::{HardwareWallet, UnsupportedReason}, + hw::{ledger_version_supported, HardwareWallet, UnsupportedReason}, }; use async_hwi::DeviceKind; @@ -13,6 +18,8 @@ pub fn hw_list_view( hw: &HardwareWallet, signed: bool, signing: bool, + upgrading: bool, + network: Network, ) -> Element { let mut bttn = Button::new(match hw { HardwareWallet::Supported { @@ -61,9 +68,34 @@ pub fn hw_list_view( HardwareWallet::Locked { kind, pairing_code, .. } => hw::locked_hardware_wallet(kind, pairing_code.as_ref()), + HardwareWallet::NeedUpgrade { + id, + kind, + version, + upgrade_in_progress, + upgrade_log, + upgraded_version, + .. + } => { + match upgrade_in_progress { + true => ledger_upgrading(kind, version.clone(), upgrade_log.clone()), + false => ledger_need_upgrade( + kind, + version.clone(), + Message::UpgradeLedger(id.clone(), network), + upgrading, + if upgraded_version.is_some() { + !ledger_version_supported(upgraded_version.as_ref(), true) + } else { + false + }, + ), + } + } }) .style(theme::Button::Border) - .width(Length::Fill); + .width(Length::Fill) + .padding(1); if !signing { if let HardwareWallet::Supported { registered, .. } = hw { if *registered != Some(false) { @@ -83,7 +115,10 @@ pub fn hw_list_view_for_registration( chosen: bool, processing: bool, registered: bool, + upgrading: bool, + network: Network, ) -> Element { + let mut upgrade = false; let mut bttn = Button::new(match hw { HardwareWallet::Supported { kind, @@ -122,10 +157,36 @@ pub fn hw_list_view_for_registration( HardwareWallet::Locked { kind, pairing_code, .. } => hw::locked_hardware_wallet(kind, pairing_code.as_ref()), + HardwareWallet::NeedUpgrade { + id, + kind, + version, + upgrade_in_progress, + upgrade_log, + upgraded_version, + .. + } => { + upgrade = true; + match upgrade_in_progress { + true => ledger_upgrading(kind, version.clone(), upgrade_log.clone()), + false => ledger_need_upgrade( + kind, + version.clone(), + Message::UpgradeLedger(id.clone(), network), + upgrading, + if upgraded_version.is_some() { + !ledger_version_supported(upgraded_version.as_ref(), true) + } else { + false + }, + ), + } + } }) .style(theme::Button::Border) - .width(Length::Fill); - if !processing && hw.is_supported() { + .width(Length::Fill) + .padding(1); + if !processing && hw.is_supported() && !upgrade { bttn = bttn.on_press(Message::SelectHardwareWallet(i)); } Container::new(bttn) @@ -138,6 +199,8 @@ pub fn hw_list_view_verify_address( i: usize, hw: &HardwareWallet, chosen: bool, + upgrading: bool, + network: Network, ) -> Element { let (content, selectable) = match hw { HardwareWallet::Supported { @@ -199,10 +262,36 @@ pub fn hw_list_view_verify_address( hw::locked_hardware_wallet(kind, pairing_code.as_ref()), false, ), + HardwareWallet::NeedUpgrade { + id, + kind, + version, + upgrade_in_progress, + upgrade_log, + upgraded_version, + .. + } => ( + match upgrade_in_progress { + true => ledger_upgrading(kind, version.clone(), upgrade_log.clone()), + false => ledger_need_upgrade( + kind, + version.clone(), + Message::UpgradeLedger(id.clone(), network), + upgrading, + if upgraded_version.is_some() { + !ledger_version_supported(upgraded_version.as_ref(), true) + } else { + false + }, + ), + }, + false, + ), }; let mut bttn = Button::new(content) .style(theme::Button::Border) - .width(Length::Fill); + .width(Length::Fill) + .padding(1); if selectable && hw.is_supported() { bttn = bttn.on_press(Message::SelectHardwareWallet(i)); } diff --git a/gui/src/app/view/message.rs b/gui/src/app/view/message.rs index 2b7b0e87b..9ef5f70ae 100644 --- a/gui/src/app/view/message.rs +++ b/gui/src/app/view/message.rs @@ -1,5 +1,5 @@ use crate::{app::menu::Menu, bitcoind::RpcAuthType}; -use liana::miniscript::bitcoin::bip32::Fingerprint; +use liana::miniscript::bitcoin::{bip32::Fingerprint, Network}; #[derive(Debug, Clone)] pub enum Message { @@ -19,6 +19,7 @@ pub enum Message { SelectHardwareWallet(usize), CreateRbf(CreateRbfMessage), ShowQrCode(usize), + UpgradeLedger(String, Network), } #[derive(Debug, Clone)] diff --git a/gui/src/app/view/psbt.rs b/gui/src/app/view/psbt.rs index 34b06aeec..944402be4 100644 --- a/gui/src/app/view/psbt.rs +++ b/gui/src/app/view/psbt.rs @@ -1007,6 +1007,7 @@ fn change_view(output: &TxOut, network: Network) -> Element { .into() } +#[allow(clippy::too_many_arguments)] pub fn sign_action<'a>( warning: Option<&Error>, hws: &'a [HardwareWallet], @@ -1014,6 +1015,8 @@ pub fn sign_action<'a>( signer_alias: Option<&'a String>, signed: &HashSet, signing: &HashSet, + upgrading: bool, + network: Network, ) -> Element<'a, Message> { Column::new() .push_maybe(warning.map(|w| warn(Some(w)))) @@ -1039,6 +1042,8 @@ pub fn sign_action<'a>( hw.fingerprint() .map(|f| signing.contains(&f)) .unwrap_or(false), + upgrading, + network, )) }, )) @@ -1059,7 +1064,7 @@ pub fn sign_action<'a>( .width(Length::Fill) .align_items(Alignment::Center), )) - .width(Length::Fixed(500.0)) + .width(Length::Fixed(600.0)) .into() } diff --git a/gui/src/app/view/receive.rs b/gui/src/app/view/receive.rs index 45d582d67..0da6020f2 100644 --- a/gui/src/app/view/receive.rs +++ b/gui/src/app/view/receive.rs @@ -11,7 +11,7 @@ use iced::{ use liana::miniscript::bitcoin::{ self, bip32::{ChildNumber, Fingerprint}, - Address, + Address, Network, }; use liana_ui::{ @@ -138,6 +138,8 @@ pub fn verify_address_modal<'a>( chosen_hws: &HashSet, address: &Address, derivation_index: &ChildNumber, + upgrading: bool, + network: Network, ) -> Element<'a, Message> { Column::new() .push_maybe(warning.map(|w| warn(Some(w)))) @@ -201,6 +203,8 @@ pub fn verify_address_modal<'a>( } else { false }, + upgrading, + network, )) }, )) diff --git a/gui/src/app/view/settings.rs b/gui/src/app/view/settings.rs index 92352f9d9..b53b46301 100644 --- a/gui/src/app/view/settings.rs +++ b/gui/src/app/view/settings.rs @@ -715,6 +715,8 @@ pub fn register_wallet_modal<'a>( processing: bool, chosen_hw: Option, registered: &HashSet, + upgrading: bool, + network: Network, ) -> Element<'a, Message> { Column::new() .push_maybe(warning.map(|w| warn(Some(w)))) @@ -741,6 +743,8 @@ pub fn register_wallet_modal<'a>( } else { false }, + upgrading, + network, )) }, )) @@ -750,6 +754,6 @@ pub fn register_wallet_modal<'a>( .width(Length::Fill) .align_items(Alignment::Center), )) - .width(Length::Fixed(500.0)) + .width(Length::Fixed(600.0)) .into() } diff --git a/gui/src/hw.rs b/gui/src/hw.rs index 0b3d32b69..7f02fe1ae 100644 --- a/gui/src/hw.rs +++ b/gui/src/hw.rs @@ -1,8 +1,10 @@ use iced::Command; +use ledger_manager::utils::InstallStep; use std::{ collections::HashMap, path::PathBuf, sync::{Arc, Mutex}, + time::Duration, }; use crate::app::{settings, wallet::Wallet}; @@ -10,7 +12,8 @@ use async_hwi::{ bitbox::{api::runtime, BitBox02, PairingBitbox02}, coldcard, jade::{self, Jade}, - ledger, specter, DeviceKind, Error as HWIError, Version, HWI, + ledger::{self, DeviceInfo, HidApi}, + specter, DeviceKind, Error as HWIError, Version, HWI, }; use liana::miniscript::bitcoin::{bip32::Fingerprint, hashes::hex::FromHex, Network}; use serde::{Deserialize, Serialize}; @@ -24,6 +27,7 @@ pub enum UnsupportedReason { Method(&'static str), NotPartOfWallet(Fingerprint), WrongNetwork, + Taproot, } // Todo drop the Clone, to remove the Mutex on HardwareWallet::Locked @@ -51,6 +55,17 @@ pub enum HardwareWallet { registered: Option, alias: Option, }, + NeedUpgrade { + id: String, + kind: DeviceKind, + fingerprint: Fingerprint, + version: Option, + upgrade_in_progress: bool, + upgrade_step: Option>, + upgrade_log: Vec, + upgrade_testnet: bool, + upgraded_version: Option, + }, } pub enum LockedDevice { @@ -84,11 +99,12 @@ impl HardwareWallet { }) } - fn id(&self) -> &String { + pub fn id(&self) -> &String { match self { Self::Locked { id, .. } => id, Self::Unsupported { id, .. } => id, Self::Supported { id, .. } => id, + Self::NeedUpgrade { id, .. } => id, } } @@ -97,6 +113,7 @@ impl HardwareWallet { Self::Locked { kind, .. } => kind, Self::Unsupported { kind, .. } => kind, Self::Supported { kind, .. } => kind, + Self::NeedUpgrade { kind, .. } => kind, } } @@ -105,12 +122,81 @@ impl HardwareWallet { Self::Locked { .. } => None, Self::Unsupported { .. } => None, Self::Supported { fingerprint, .. } => Some(*fingerprint), + Self::NeedUpgrade { fingerprint, .. } => Some(*fingerprint), } } pub fn is_supported(&self) -> bool { matches!(self, Self::Supported { .. }) } + + pub fn is_upgrade_in_progress(&self) -> bool { + if let Self::NeedUpgrade { + upgrade_in_progress, + .. + } = self + { + *upgrade_in_progress + } else { + false + } + } + + pub fn start_upgrade(&mut self, network: Network) { + if let Self::NeedUpgrade { + upgrade_in_progress, + upgrade_step, + upgrade_testnet, + .. + } = self + { + *upgrade_step = None; + *upgrade_in_progress = true; + *upgrade_testnet = network != Network::Bitcoin; + } + } + + pub fn upgrade_ended(&mut self, version: Version) { + if let Self::NeedUpgrade { + upgrade_in_progress, + upgrade_step, + upgrade_log, + upgraded_version, + .. + } = self + { + *upgrade_in_progress = false; + *upgrade_step = Some(InstallStep::Completed); + *upgrade_log = Vec::new(); + *upgraded_version = Some(version); + } + } + + pub fn upgrade_failed(&mut self) { + if let Self::NeedUpgrade { + upgrade_in_progress, + upgrade_step, + .. + } = self + { + *upgrade_in_progress = false; + *upgrade_step = Some(InstallStep::Error("Failed to install app".into())); + } + } + + pub fn push_log(&mut self, log: String) { + if let Self::NeedUpgrade { upgrade_log, .. } = self { + upgrade_log.push(log); + } + } + + pub fn logs(&self) -> Vec { + if let Self::NeedUpgrade { upgrade_log, .. } = self { + upgrade_log.clone() + } else { + Vec::new() + } + } } #[derive(Debug, Clone, Deserialize, Serialize)] @@ -145,7 +231,7 @@ pub enum HardwareWalletMessage { #[derive(Debug, Clone)] pub struct ConnectedList { - pub new: Vec, + new: Vec, still: Vec, } @@ -155,6 +241,7 @@ pub struct HardwareWallets { pub aliases: HashMap, wallet: Option>, datadir_path: PathBuf, + refresh_index: u8, } impl std::fmt::Debug for HardwareWallets { @@ -171,6 +258,7 @@ impl HardwareWallets { aliases: HashMap::new(), wallet: None, datadir_path, + refresh_index: 0, } } @@ -211,12 +299,50 @@ impl HardwareWallets { &mut self, message: HardwareWalletMessage, ) -> Result, async_hwi::Error> { + fn upgrade_is_completed(device: &HardwareWallet) -> bool { + if let HardwareWallet::NeedUpgrade { + upgrade_step: Some(step), + upgraded_version: Some(version), + .. + } = device + { + matches!(step, InstallStep::Completed) + && ledger_version_supported(Some(version), true) + } else { + false + } + } + + // reset the refresh state if upgrade completed + if self.list.iter().any(upgrade_is_completed) { + self.reset_refresh(); + } + // then remove the device w/ upgrade completed from the list + self.list.retain(|d| !upgrade_is_completed(d)); + match message { HardwareWalletMessage::Error(e) => Err(async_hwi::Error::Device(e)), - HardwareWalletMessage::List(ConnectedList { still, mut new }) => { + HardwareWalletMessage::List(ConnectedList { still, new }) => { + let hws_upgrading: Vec<_> = self + .list + .iter() + .filter(|dev| matches!(dev, HardwareWallet::NeedUpgrade { .. })) + .cloned() + .collect(); // remove disconnected self.list.retain(|hw| still.contains(hw.id())); - self.list.append(&mut new); + // Upgrading devices are not automaticaly removed + for n in hws_upgrading { + if !self.list.iter().any(|d| *d.id() == *n.id()) { + self.list.push(n); + } + } + // avoid duplicates + for n in new { + if !self.list.iter().any(|d| *d.id() == *n.id()) { + self.list.push(n); + } + } let mut cmds = Vec::new(); for hw in &mut self.list { match hw { @@ -295,6 +421,7 @@ impl HardwareWallets { device, wallet.as_ref().map(|w| w.as_ref()), None, + false, ) .await }, @@ -341,60 +468,156 @@ impl HardwareWallets { } } - pub fn refresh(&self) -> iced::Subscription { + pub fn reset_refresh(&mut self) { + // In order to reset the subscription state we need to change the + // subscription id + self.refresh_index = self.refresh_index.wrapping_add(1); + } + + pub fn refresh(&self, taproot: bool) -> iced::Subscription { + let id = format!( + "refresh-{}-{}-{}", + self.network, self.refresh_index, taproot + ); iced::subscription::unfold( - format!("refresh-{}", self.network), + id, State { network: self.network, keys_aliases: self.aliases.clone(), wallet: self.wallet.clone(), connected_supported_hws: Vec::new(), + hws_upgrade: Vec::new(), api: None, datadir_path: self.datadir_path.clone(), + taproot, + hws: Vec::new(), + still: Vec::new(), + still_upgrade: Vec::new(), + sleep: false, }, refresh, ) } } -struct State { +pub struct State { network: Network, keys_aliases: HashMap, wallet: Option>, connected_supported_hws: Vec, api: Option, datadir_path: PathBuf, + taproot: bool, + hws: Vec, + still: Vec, + hws_upgrade: Vec, + still_upgrade: Vec, + sleep: bool, } async fn refresh(mut state: State) -> (HardwareWalletMessage, State) { - let api = if let Some(api) = &mut state.api { - tokio::time::sleep(std::time::Duration::from_secs(2)).await; - if let Err(e) = api.refresh_devices() { - return (HardwareWalletMessage::Error(e.to_string()), state); - }; + // do not sleep on first call + if state.sleep { + tokio::time::sleep(Duration::from_secs(2)).await; + } else { + state.sleep = true; + } + + let mut api = if let Some(api) = state.api.take() { api } else { match ledger::HidApi::new() { - Ok(api) => { - state.api = Some(api); - state.api.as_mut().unwrap() - } + Ok(api) => api, Err(e) => { return (HardwareWalletMessage::Error(e.to_string()), state); } } }; - let mut hws: Vec = Vec::new(); - let mut still: Vec = Vec::new(); + if let Err(e) = api.refresh_devices() { + return (HardwareWalletMessage::Error(e.to_string()), state); + }; + + poll_specter_simulator(&mut state).await; + poll_specter(&mut state).await; + poll_jade(&mut state).await; + poll_ledger_simulator(&mut state).await; + + for device_info in api.device_list() { + if async_hwi::bitbox::is_bitbox02(device_info) + && handle_bitbox02_device(&mut state, device_info, &api).await + { + continue; + } + if device_info.vendor_id() == coldcard::api::COINKITE_VID + && device_info.product_id() == coldcard::api::CKCC_PID + && handle_coldcard_device(&mut state, device_info, &api).await + { + continue; + } + } + + poll_ledger(&mut state, &api).await; + + if let Some(wallet) = &state.wallet { + let wallet_keys = wallet.descriptor_keys(); + for hw in &mut state.hws { + if let HardwareWallet::Supported { + fingerprint, + id, + kind, + version, + .. + } = &hw + { + if !wallet_keys.contains(fingerprint) { + *hw = HardwareWallet::Unsupported { + id: id.clone(), + kind: *kind, + version: version.clone(), + reason: UnsupportedReason::NotPartOfWallet(*fingerprint), + }; + } + } + } + } + + state.connected_supported_hws = state + .still + .iter() + .chain(state.hws.iter().filter_map(|hw| match hw { + HardwareWallet::Locked { id, .. } => Some(id), + HardwareWallet::Supported { id, .. } => Some(id), + _ => None, + })) + .cloned() + .collect(); + let mut new_upgrade = state + .hws_upgrade + .clone() + .into_iter() + .filter(|d| !state.still_upgrade.contains(d.id())) + .collect(); + state.hws.append(&mut new_upgrade); + state.still.append(&mut state.still_upgrade); + let msg = HardwareWalletMessage::List(ConnectedList { + new: state.hws, + still: state.still, + }); + (state.hws, state.still) = (Vec::new(), Vec::new()); + state.api = Some(api); + (msg, state) +} + +pub async fn poll_specter_simulator(state: &mut State) { match specter::SpecterSimulator::try_connect().await { Ok(device) => { let id = "specter-simulator".to_string(); if state.connected_supported_hws.contains(&id) { - still.push(id); + state.still.push(id); } else { match HardwareWallet::new(id, Arc::new(device), Some(&state.keys_aliases)).await { - Ok(hw) => hws.push(hw), + Ok(hw) => state.hws.push(hw), Err(e) => { debug!("{}", e); } @@ -406,13 +629,15 @@ async fn refresh(mut state: State) -> (HardwareWalletMessage, State) { debug!("{}", e); } } +} +pub async fn poll_specter(state: &mut State) { match specter::SerialTransport::enumerate_potential_ports() { Ok(ports) => { for port in ports { let id = format!("specter-{}", port); if state.connected_supported_hws.contains(&id) { - still.push(id); + state.still.push(id); } else { match specter::Specter::::new(port.clone()) { Err(e) => { @@ -433,7 +658,7 @@ async fn refresh(mut state: State) -> (HardwareWalletMessage, State) { ) .await { - Ok(hw) => hws.push(hw), + Ok(hw) => state.hws.push(hw), Err(e) => { debug!("{}", e); } @@ -446,13 +671,15 @@ async fn refresh(mut state: State) -> (HardwareWalletMessage, State) { } Err(e) => warn!("Error while listing specter wallets: {}", e), } +} +pub async fn poll_jade(state: &mut State) { match jade::SerialTransport::enumerate_potential_ports() { Ok(ports) => { for port in ports { let id = format!("jade-{}", port); if state.connected_supported_hws.contains(&id) { - still.push(id); + state.still.push(id); } else { match jade::SerialTransport::new(port) { Err(e) => { @@ -465,11 +692,12 @@ async fn refresh(mut state: State) -> (HardwareWalletMessage, State) { Jade::new(device).with_network(state.network), state.wallet.as_ref().map(|w| w.as_ref()), Some(&state.keys_aliases), + state.taproot, ) .await { Ok(hw) => { - hws.push(hw); + state.hws.push(hw); } Err(e) => { warn!("{:?}", e); @@ -482,17 +710,19 @@ async fn refresh(mut state: State) -> (HardwareWalletMessage, State) { } Err(e) => warn!("Error while listing jade devices: {}", e), } +} +pub async fn poll_ledger_simulator(state: &mut State) { match ledger::LedgerSimulator::try_connect().await { Ok(mut device) => { let id = "ledger-simulator".to_string(); if state.connected_supported_hws.contains(&id) { - still.push(id); + state.still.push(id); } else { match device.get_master_fingerprint().await { Ok(fingerprint) => { let version = device.get_version().await.ok(); - if ledger_version_supported(version.as_ref()) { + if ledger_version_supported(version.as_ref(), state.taproot) { let mut registered = false; if let Some(w) = &state.wallet { if let Some(cfg) = w @@ -510,7 +740,7 @@ async fn refresh(mut state: State) -> (HardwareWalletMessage, State) { registered = true; } } - hws.push(HardwareWallet::Supported { + state.hws.push(HardwareWallet::Supported { id, kind: device.device_kind(), fingerprint, @@ -520,7 +750,7 @@ async fn refresh(mut state: State) -> (HardwareWalletMessage, State) { alias: state.keys_aliases.get(&fingerprint).cloned(), }); } else { - hws.push(HardwareWallet::Unsupported { + state.hws.push(HardwareWallet::Unsupported { id, kind: device.device_kind(), version, @@ -531,7 +761,7 @@ async fn refresh(mut state: State) -> (HardwareWalletMessage, State) { } } Err(_) => { - hws.push(HardwareWallet::Unsupported { + state.hws.push(HardwareWallet::Unsupported { id, kind: device.device_kind(), version: None, @@ -548,92 +778,24 @@ async fn refresh(mut state: State) -> (HardwareWalletMessage, State) { debug!("{}", e); } } +} - for device_info in api.device_list() { - if async_hwi::bitbox::is_bitbox02(device_info) { - let id = format!( - "bitbox-{:?}-{}-{}", - device_info.path(), - device_info.vendor_id(), - device_info.product_id() - ); - if state.connected_supported_hws.contains(&id) { - still.push(id); - continue; - } - if let Ok(device) = device_info.open_device(api) { - if let Ok(device) = PairingBitbox02::connect( - device, - Some(Box::new(settings::global::PersistedBitboxNoiseConfig::new( - &state.datadir_path, - ))), - ) - .await - { - hws.push(HardwareWallet::Locked { - id, - kind: DeviceKind::BitBox02, - pairing_code: device.pairing_code().map(|s| s.replace('\n', " ")), - device: Arc::new(Mutex::new(Some(LockedDevice::BitBox02(Box::new( - device, - ))))), - }); - } - } - } - if device_info.vendor_id() == coldcard::api::COINKITE_VID - && device_info.product_id() == coldcard::api::CKCC_PID - { - let id = format!( - "coldcard-{:?}-{}-{}", - device_info.path(), - device_info.vendor_id(), - device_info.product_id() - ); - if state.connected_supported_hws.contains(&id) { - still.push(id); - continue; - } - if let Some(sn) = device_info.serial_number() { - if let Ok((cc, _)) = - coldcard::api::Coldcard::open(AsRefWrap { inner: api }, sn, None) - { - match HardwareWallet::new( - id, - if let Some(wallet) = &state.wallet { - coldcard::Coldcard::from(cc) - .with_wallet_name(wallet.name.clone()) - .into() - } else { - coldcard::Coldcard::from(cc).into() - }, - Some(&state.keys_aliases), - ) - .await - { - Err(e) => tracing::error!("Failed to connect to coldcard: {}", e), - Ok(hw) => hws.push(hw), - }; - } - } - } - } +pub async fn poll_ledger(state: &mut State, api: &HidApi) { for detected in ledger::Ledger::::enumerate(api) { - let id = format!( - "ledger-{:?}-{}-{}", - detected.path(), - detected.vendor_id(), - detected.product_id() - ); + let id = ledger_id(detected); + if state.hws_upgrade.iter().any(|d| *d.id() == id) { + state.still_upgrade.push(id.clone()); + continue; + } if state.connected_supported_hws.contains(&id) { - still.push(id); + state.still.push(id); continue; } match ledger::Ledger::::connect(api, detected) { Ok(mut device) => match device.get_master_fingerprint().await { Ok(fingerprint) => { let version = device.get_version().await.ok(); - if ledger_version_supported(version.as_ref()) { + if ledger_version_supported(version.as_ref(), state.taproot) { let mut registered = false; if let Some(w) = &state.wallet { if let Some(cfg) = w @@ -651,7 +813,7 @@ async fn refresh(mut state: State) -> (HardwareWalletMessage, State) { registered = true; } } - hws.push(HardwareWallet::Supported { + state.hws.push(HardwareWallet::Supported { id, kind: device.device_kind(), fingerprint, @@ -660,8 +822,20 @@ async fn refresh(mut state: State) -> (HardwareWalletMessage, State) { registered: Some(registered), alias: state.keys_aliases.get(&fingerprint).cloned(), }); + } else if ledger_need_taproot_upgrade(&version) { + state.hws_upgrade.push(HardwareWallet::NeedUpgrade { + id, + kind: device.device_kind(), + fingerprint, + version, + upgrade_in_progress: false, + upgrade_step: None, + upgrade_log: Vec::new(), + upgrade_testnet: state.network != Network::Bitcoin, + upgraded_version: None, + }); } else { - hws.push(HardwareWallet::Unsupported { + state.hws.push(HardwareWallet::Unsupported { id, kind: device.device_kind(), version, @@ -672,7 +846,7 @@ async fn refresh(mut state: State) -> (HardwareWalletMessage, State) { } } Err(_) => { - hws.push(HardwareWallet::Unsupported { + state.hws.push(HardwareWallet::Unsupported { id, kind: device.device_kind(), version: None, @@ -688,43 +862,52 @@ async fn refresh(mut state: State) -> (HardwareWalletMessage, State) { } } } +} - if let Some(wallet) = &state.wallet { - let wallet_keys = wallet.descriptor_keys(); - for hw in &mut hws { - if let HardwareWallet::Supported { - fingerprint, - id, - kind, - version, - .. - } = &hw - { - if !wallet_keys.contains(fingerprint) { - *hw = HardwareWallet::Unsupported { - id: id.clone(), - kind: *kind, - version: version.clone(), - reason: UnsupportedReason::NotPartOfWallet(*fingerprint), - }; +pub async fn handle_bitbox02_device( + state: &mut State, + device_info: &DeviceInfo, + api: &HidApi, +) -> bool { + let id = format!( + "bitbox-{:?}-{}-{}", + device_info.path(), + device_info.vendor_id(), + device_info.product_id() + ); + if state.connected_supported_hws.contains(&id) { + state.still.push(id); + return true; + } + if let Ok(device) = device_info.open_device(api) { + if let Ok(device) = PairingBitbox02::connect( + device, + Some(Box::new(settings::global::PersistedBitboxNoiseConfig::new( + &state.datadir_path, + ))), + ) + .await + { + let hw = if !state.taproot { + HardwareWallet::Locked { + id, + kind: DeviceKind::BitBox02, + pairing_code: device.pairing_code().map(|s| s.replace('\n', " ")), + device: Arc::new(Mutex::new(Some(LockedDevice::BitBox02(Box::new(device))))), } - } + } else { + HardwareWallet::Unsupported { + id, + kind: DeviceKind::BitBox02, + version: None, + reason: UnsupportedReason::Taproot, + } + }; + state.hws.push(hw); + return true; } } - - state.connected_supported_hws = still - .iter() - .chain(hws.iter().filter_map(|hw| match hw { - HardwareWallet::Locked { id, .. } => Some(id), - HardwareWallet::Supported { id, .. } => Some(id), - HardwareWallet::Unsupported { .. } => None, - })) - .cloned() - .collect(); - ( - HardwareWalletMessage::List(ConnectedList { new: hws, still }), - state, - ) + false } async fn handle_jade_device( @@ -733,11 +916,19 @@ async fn handle_jade_device( device: Jade, wallet: Option<&Wallet>, keys_aliases: Option<&HashMap>, + taproot: bool, ) -> Result { let info = device.get_info().await?; let version = async_hwi::parse_version(&info.jade_version).ok(); // Jade may not be setup for the current network - if (network == Network::Bitcoin + if taproot { + Ok(HardwareWallet::Unsupported { + id, + kind: device.device_kind(), + version, + reason: UnsupportedReason::Taproot, + }) + } else if (network == Network::Bitcoin && info.jade_networks != jade::api::JadeNetworks::Main && info.jade_networks != jade::api::JadeNetworks::All) || (network != Network::Bitcoin && info.jade_networks == jade::api::JadeNetworks::Main) @@ -815,6 +1006,51 @@ async fn handle_jade_device( } } +pub async fn handle_coldcard_device( + state: &mut State, + device_info: &DeviceInfo, + api: &HidApi, +) -> bool { + let id = format!( + "coldcard-{:?}-{}-{}", + device_info.path(), + device_info.vendor_id(), + device_info.product_id() + ); + if state.connected_supported_hws.contains(&id) { + state.still.push(id); + return true; + } + if let Some(sn) = device_info.serial_number() { + if let Ok((cc, _)) = coldcard::api::Coldcard::open(AsRefWrap { inner: api }, sn, None) { + let device = if let Some(wallet) = &state.wallet { + coldcard::Coldcard::from(cc).with_wallet_name(wallet.name.clone()) + } else { + coldcard::Coldcard::from(cc) + }; + let version = device.get_version().await.ok(); + match HardwareWallet::new(id, device.into(), Some(&state.keys_aliases)).await { + Err(e) => tracing::error!("Failed to connect to coldcard: {}", e), + Ok(hw) => { + let hw = if coldcard_version_supported(version.as_ref(), state.taproot) { + hw + } else { + HardwareWallet::Unsupported { + id: hw.id().clone(), + kind: *hw.kind(), + version, + reason: UnsupportedReason::Taproot, + } + }; + state.hws.push(hw); + return true; + } + }; + } + } + false +} + struct AsRefWrap<'a, T> { inner: &'a T, } @@ -825,60 +1061,65 @@ impl<'a, T> AsRef for AsRefWrap<'a, T> { } } -fn ledger_version_supported(version: Option<&Version>) -> bool { +pub fn ledger_id(info: &DeviceInfo) -> String { + format!( + "ledger-{:?}-{}-{}", + info.path(), + info.vendor_id(), + info.product_id(), + ) +} + +pub fn ledger_version_supported(version: Option<&Version>, taproot: bool) -> bool { if let Some(version) = version { if version.major >= 2 { - if version.major == 2 { - version.minor >= 1 + return if version.major == 2 { + if taproot { + version.minor >= 2 + } else { + version.minor >= 1 + } } else { true - } - } else { - false + }; } - } else { - false } + false } -// Kind and minimal version of devices supporting tapminiscript. -// We cannot use a lazy_static HashMap yet, because DeviceKind does not implement Hash. -const DEVICES_COMPATIBLE_WITH_TAPMINISCRIPT: [(DeviceKind, Option); 4] = [ - ( - DeviceKind::Ledger, - Some(Version { - major: 2, - minor: 2, - patch: 0, - prerelease: None, - }), - ), - (DeviceKind::Specter, None), - (DeviceKind::SpecterSimulator, None), - ( - DeviceKind::Coldcard, - Some(Version { - major: 6, - minor: 3, - patch: 3, - prerelease: None, - }), - ), -]; +fn coldcard_version_supported(version: Option<&Version>, taproot: bool) -> bool { + if let Some(version) = version { + if version.major >= 6 { + return if version.major == 6 { + if taproot { + version.minor >= 3 + } else { + version.minor >= 1 + } + } else { + true + }; + } + } + false +} pub fn is_compatible_with_tapminiscript( device_kind: &DeviceKind, version: Option<&Version>, ) -> bool { - DEVICES_COMPATIBLE_WITH_TAPMINISCRIPT - .iter() - .any(|(kind, minimal_version)| { - device_kind == kind - && match (version, minimal_version) { - (Some(v1), Some(v2)) => v1 >= v2, - (None, Some(_)) => false, - (Some(_), None) => true, - (None, None) => true, - } - }) + match device_kind { + DeviceKind::BitBox02 => false, + DeviceKind::Coldcard => coldcard_version_supported(version, true), + DeviceKind::Specter => true, + DeviceKind::SpecterSimulator => true, + DeviceKind::Ledger => ledger_version_supported(version, true), + DeviceKind::LedgerSimulator => ledger_version_supported(version, true), + DeviceKind::Jade => false, + } +} + +pub fn ledger_need_taproot_upgrade(version: &Option) -> bool { + ledger_version_supported(version.as_ref(), false) + && !ledger_version_supported(version.as_ref(), true) } diff --git a/gui/src/installer/message.rs b/gui/src/installer/message.rs index 5c2434d7c..c0a99062b 100644 --- a/gui/src/installer/message.rs +++ b/gui/src/installer/message.rs @@ -1,4 +1,7 @@ -use liana::miniscript::{bitcoin::bip32::Fingerprint, DescriptorPublicKey}; +use liana::miniscript::{ + bitcoin::{bip32::Fingerprint, Network}, + DescriptorPublicKey, +}; use std::path::PathBuf; use super::Error; @@ -6,6 +9,7 @@ use crate::{ bitcoind::{Bitcoind, ConfigField, RpcAuthType}, download::Progress, hw::HardwareWalletMessage, + ledger_upgrade::UpgradeMessage, }; use async_hwi::{DeviceKind, Version}; @@ -37,6 +41,8 @@ pub enum Message { WalletRegistered(Result<(Fingerprint, Option<[u8; 32]>), Error>), MnemonicWord(usize, String), ImportMnemonic(bool), + UpgradeLedger(String, Network), + Upgrade(UpgradeMessage), } #[derive(Debug, Clone)] diff --git a/gui/src/installer/mod.rs b/gui/src/installer/mod.rs index 89bc61097..9e69b9289 100644 --- a/gui/src/installer/mod.rs +++ b/gui/src/installer/mod.rs @@ -158,7 +158,7 @@ impl Installer { Message::ShareXpubs => { self.steps = vec![ Welcome::default().into(), - ShareXpubs::new(self.network, self.signer.clone()).into(), + ShareXpubs::new(self.network, self.signer.clone(), false).into(), ]; self.next() } diff --git a/gui/src/installer/step/descriptor.rs b/gui/src/installer/step/descriptor.rs index 3918d6082..d7dcf1971 100644 --- a/gui/src/installer/step/descriptor.rs +++ b/gui/src/installer/step/descriptor.rs @@ -25,15 +25,16 @@ use liana_ui::{ use async_hwi::{DeviceKind, Version}; -use crate::hw; use crate::{ app::{settings::KeySetting, wallet::wallet_name}, + hw, hw::{HardwareWallet, HardwareWallets}, installer::{ message::{self, Message}, step::{Context, Step}, view, Error, }, + ledger_upgrade::{ledger_upgrade_subscriptions, maybe_start_upgrade, update_upgrade_state}, signer::Signer, }; @@ -726,6 +727,7 @@ pub struct EditXpubModal { network: Network, error: Option, processing: bool, + upgrading: bool, form_name: form::Value, form_xpub: form::Value, @@ -791,6 +793,7 @@ impl EditXpubModal { hot_signer_fingerprint, hot_signer, duplicate_master_fg: false, + upgrading: false, } } fn load(&self) -> Command { @@ -800,7 +803,7 @@ impl EditXpubModal { impl DescriptorEditModal for EditXpubModal { fn processing(&self) -> bool { - self.processing + self.processing || self.upgrading } fn update(&mut self, hws: &mut HardwareWallets, message: Message) -> Command { @@ -989,17 +992,29 @@ impl DescriptorEditModal for EditXpubModal { } } }, + Message::UpgradeLedger(id, network) => { + maybe_start_upgrade(id, hws, network, &mut self.upgrading); + } + Message::Upgrade(msg) => { + update_upgrade_state(msg, hws, &mut self.upgrading); + } _ => {} }; Command::none() } fn subscription(&self, hws: &HardwareWallets) -> Subscription { - hws.refresh().map(Message::HardwareWallets) + let mut subs = ledger_upgrade_subscriptions(hws); + subs.push( + hws.refresh(self.device_must_support_tapminiscript) + .map(Message::HardwareWallets), + ); + Subscription::batch(subs) } fn view<'a>(&'a self, hws: &'a HardwareWallets) -> Element<'a, Message> { let chosen_signer = self.chosen_signer.as_ref().map(|s| s.0); + let upgrading = hws.list.iter().any(|hw| hw.is_upgrade_in_progress()); view::edit_key_modal( self.network, hws.list @@ -1022,7 +1037,8 @@ impl DescriptorEditModal for EditXpubModal { && hw.fingerprint() == chosen_signer && self.form_xpub.valid && !self.form_xpub.value.is_empty(), - self.device_must_support_tapminiscript, + self.network, + upgrading, )) } }) @@ -1195,6 +1211,7 @@ pub struct RegisterDescriptor { /// whether a signing device is used, to explicit this step is not required if the user isn't /// using a signing device. created_desc: bool, + upgrading: bool, } impl RegisterDescriptor { @@ -1208,6 +1225,7 @@ impl RegisterDescriptor { registered: Default::default(), error: Default::default(), done: Default::default(), + upgrading: false, } } @@ -1287,6 +1305,12 @@ impl Step for RegisterDescriptor { Message::UserActionDone(done) => { self.done = done; } + Message::UpgradeLedger(id, network) => { + maybe_start_upgrade(id, hws, network, &mut self.upgrading); + } + Message::Upgrade(msg) => { + update_upgrade_state(msg, hws, &mut self.upgrading); + } _ => {} }; Command::none() @@ -1301,7 +1325,14 @@ impl Step for RegisterDescriptor { true } fn subscription(&self, hws: &HardwareWallets) -> Subscription { - hws.refresh().map(Message::HardwareWallets) + let mut subs = ledger_upgrade_subscriptions(hws); + if let Some(descriptor) = self.descriptor.as_ref() { + subs.push( + hws.refresh(descriptor.is_taproot()) + .map(Message::HardwareWallets), + ) + } + Subscription::batch(subs) } fn load(&self) -> Command { Command::none() @@ -1322,6 +1353,7 @@ impl Step for RegisterDescriptor { self.chosen_hw, self.done, self.created_desc, + self.upgrading, ) } } diff --git a/gui/src/installer/step/share_xpubs.rs b/gui/src/installer/step/share_xpubs.rs index 40dd1f5c0..683ccb0d9 100644 --- a/gui/src/installer/step/share_xpubs.rs +++ b/gui/src/installer/step/share_xpubs.rs @@ -70,14 +70,16 @@ pub struct ShareXpubs { network: Network, hw_xpubs: Vec, xpubs_signer: SignerXpubs, + taproot: bool, } impl ShareXpubs { - pub fn new(network: Network, signer: Arc>) -> Self { + pub fn new(network: Network, signer: Arc>, taproot: bool) -> Self { Self { network, hw_xpubs: Vec::new(), xpubs_signer: SignerXpubs::new(signer), + taproot, } } } @@ -150,7 +152,7 @@ impl Step for ShareXpubs { } fn subscription(&self, hws: &HardwareWallets) -> Subscription { - hws.refresh().map(Message::HardwareWallets) + hws.refresh(self.taproot).map(Message::HardwareWallets) } fn apply(&mut self, ctx: &mut Context) -> bool { diff --git a/gui/src/installer/view.rs b/gui/src/installer/view.rs index e94285fb6..ee20da404 100644 --- a/gui/src/installer/view.rs +++ b/gui/src/installer/view.rs @@ -1,17 +1,25 @@ -use async_hwi::utils::extract_keys_and_template; -use iced::widget::{ - checkbox, container, pick_list, radio, scrollable, scrollable::Properties, slider, Button, - Space, TextInput, +use async_hwi::{bitbox::api::btc::Fingerprint, utils::extract_keys_and_template, DeviceKind}; +use iced::{ + alignment, + widget::{ + checkbox, container, pick_list, progress_bar, radio, scrollable, scrollable::Properties, + slider, Button, Space, TextInput, + }, + Alignment, Length, }; -use iced::{alignment, widget::progress_bar, Alignment, Length}; -use async_hwi::DeviceKind; -use liana_ui::component::text; +use liana::{ + descriptors::LianaDescriptor, + miniscript::bitcoin::{self, Network}, +}; +use liana_ui::component::{ + hw::{ledger_need_upgrade, ledger_upgrading}, + text, +}; use std::net::{Ipv4Addr, Ipv6Addr}; use std::path::PathBuf; use std::{collections::HashSet, str::FromStr}; -use liana::miniscript::bitcoin::{self, bip32::Fingerprint}; use liana_ui::{ color, component::{ @@ -25,7 +33,10 @@ use liana_ui::{ use crate::{ bitcoind::{ConfigField, RpcAuthType, RpcAuthValues, StartInternalBitcoindError}, - hw::{is_compatible_with_tapminiscript, HardwareWallet, UnsupportedReason}, + hw::{ + is_compatible_with_tapminiscript, ledger_version_supported, HardwareWallet, + UnsupportedReason, + }, installer::{ message::{self, Message}, prompt, @@ -558,6 +569,10 @@ pub fn hardware_wallet_xpubs<'a>( HardwareWallet::Locked { kind, pairing_code, .. } => hw::locked_hardware_wallet(kind, pairing_code.as_ref()), + // We should never land there as we pass taproot = false to HardwareWallets.refresh() + // (when sharing an XPub we do not know if the to-be-constructed descriptor will + // be of taproot type) + HardwareWallet::NeedUpgrade { .. } => unreachable!(), }) .style(theme::Button::Secondary) .width(Length::Fill); @@ -645,7 +660,16 @@ pub fn register_descriptor<'a>( chosen_hw: Option, done: bool, created_desc: bool, + upgrading: bool, ) -> Element<'a, Message> { + let network = if LianaDescriptor::from_str(&descriptor) + .expect("Descriptor should be valid") + .all_xpubs_net_is(Network::Bitcoin) + { + Network::Bitcoin + } else { + Network::Testnet + }; let displayed_descriptor = if let Ok((template, keys)) = extract_keys_and_template::(&descriptor) { @@ -758,7 +782,8 @@ pub fn register_descriptor<'a>( hw.fingerprint() .map(|fg| registered.contains(&fg)) .unwrap_or(false), - false, + network, + upgrading )) }), ) @@ -1709,8 +1734,10 @@ pub fn hw_list_view( chosen: bool, processing: bool, selected: bool, - device_must_support_taproot: bool, + network: Network, + upgrading: bool, ) -> Element { + let mut upgrade = false; let mut bttn = Button::new(match hw { HardwareWallet::Supported { kind, @@ -1723,16 +1750,6 @@ pub fn hw_list_view( hw::processing_hardware_wallet(kind, version.as_ref(), fingerprint, alias.as_ref()) } else if selected { hw::selected_hardware_wallet(kind, version.as_ref(), fingerprint, alias.as_ref()) - } else if device_must_support_taproot - && !is_compatible_with_tapminiscript(kind, version.as_ref()) - { - hw::warning_hardware_wallet( - kind, - version.as_ref(), - fingerprint, - alias.as_ref(), - "Device firmware version does not support taproot miniscript", - ) } else { hw::supported_hardware_wallet(kind, version.as_ref(), fingerprint, alias.as_ref()) } @@ -1754,10 +1771,36 @@ pub fn hw_list_view( HardwareWallet::Locked { kind, pairing_code, .. } => hw::locked_hardware_wallet(kind, pairing_code.as_ref()), + HardwareWallet::NeedUpgrade { + id, + kind, + version, + upgrade_in_progress, + upgrade_log, + upgraded_version, + .. + } => { + upgrade = true; + match upgrade_in_progress { + true => ledger_upgrading(kind, version.clone(), upgrade_log.clone()), + false => ledger_need_upgrade( + kind, + version.clone(), + Message::UpgradeLedger(id.clone(), network), + upgrading, + if upgraded_version.is_some() { + !ledger_version_supported(upgraded_version.as_ref(), true) + } else { + false + }, + ), + } + } }) .style(theme::Button::Border) - .width(Length::Fill); - if !processing && hw.is_supported() { + .width(Length::Fill) + .padding(1); + if !processing && hw.is_supported() && !upgrade { bttn = bttn.on_press(Message::Select(i)); } Container::new(bttn) diff --git a/gui/src/ledger_upgrade.rs b/gui/src/ledger_upgrade.rs new file mode 100644 index 000000000..9c5f78540 --- /dev/null +++ b/gui/src/ledger_upgrade.rs @@ -0,0 +1,308 @@ +use std::{ + fmt::Debug, + marker::PhantomData, + sync::mpsc::{self, TryRecvError}, + time::Duration, +}; + +use crate::{ + app::Message as AppMessage, + hw::{ledger_id, HardwareWallet, HardwareWallets}, + installer::Message as InstallerMessage, +}; +use async_hwi::{ + ledger::{self, HidApi}, + Version, HWI, +}; +use iced::{subscription, Subscription}; +use ledger_manager::{ + ledger_transport_hidapi::TransportNativeHID, + utils::{install_app, ledger_api, InstallStep, Step}, +}; +use liana::miniscript::bitcoin::Network; + +#[derive(Debug, Clone)] +pub struct UpgradeProgress { + pub id: String, + pub step: InstallStep, + pub percent: Option, +} + +#[derive(Debug, Clone)] +pub enum UpgradeMessage { + None { id: String }, + Progress(UpgradeProgress), + Completed { id: String, version: Version }, + Error { id: String, msg: String }, + Stopped { id: String }, +} + +impl UpgradeMessage { + pub fn id(&self) -> &String { + match self { + UpgradeMessage::Progress(UpgradeProgress { id, .. }) => id, + UpgradeMessage::Completed { id, .. } => id, + UpgradeMessage::Error { id, .. } => id, + UpgradeMessage::None { id } => id, + UpgradeMessage::Stopped { id } => id, + } + } + + pub fn update(self, hw: &mut HardwareWallet) { + match self { + UpgradeMessage::Progress(UpgradeProgress { step, .. }) => { + if step.is_message() { + let msg = step.message(); + hw.push_log(msg); + } + } + UpgradeMessage::Completed { version, .. } => { + hw.upgrade_ended(version); + } + UpgradeMessage::Error { msg, .. } => { + hw.push_log(msg); + hw.upgrade_failed(); + } + _ => {} + } + } +} + +impl From for AppMessage { + fn from(value: UpgradeMessage) -> Self { + AppMessage::Upgrade(value) + } +} + +impl From for InstallerMessage { + fn from(value: UpgradeMessage) -> Self { + InstallerMessage::Upgrade(value) + } +} + +pub enum State { + Idle, + Running, + Stopped, +} + +pub struct UpgradeState> { + id: String, + state: State, + step: InstallStep, + chunks: usize, + percent: f32, + testnet: bool, + receiver: mpsc::Receiver>, + sender: mpsc::Sender>, + _marker: PhantomData, +} + +impl> UpgradeState { + pub fn new(id: String, testnet: bool) -> Self { + let (sender, receiver) = mpsc::channel(); + UpgradeState:: { + id, + step: InstallStep::Info("Not yet started".into()), + chunks: 0, + percent: 0.0, + receiver, + _marker: Default::default(), + state: State::Idle, + sender, + testnet, + } + } + + fn start(&mut self) { + let sender = self.sender.clone(); + let testnet = self.testnet; + let id = self.id.clone(); + tokio::spawn(async move { + let (i, s) = (id.clone(), sender.clone()); + // install the app + install_app( + id, + connect, + |msg| { + let _ = sender.send(msg); + }, + testnet, + true, + ); + + // then check installed version + let mut installed_version = None; + if let Ok(api) = HidApi::new() { + if let Some(hw) = ledger::Ledger::::enumerate(&api) + .find(|dev| ledger_id(dev) == i) + { + if let Ok(device) = ledger::Ledger::::connect(&api, hw) { + if let Ok(v) = device.get_version().await { + installed_version = Some(v); + } + } + } + } + // report to the GUI the installed version + if let Some(version) = installed_version { + let _ = s.send(InstallStep::InstalledVersion(version)); + } else { + let _ = s.send(InstallStep::Error("Cannot check installed version".into())); + } + }); + self.state = State::Running; + } + + fn update(&mut self, msg: InstallStep) -> T { + if !matches!(msg, InstallStep::Info(_)) { + self.step = msg.clone(); + } + let percent = match &msg { + InstallStep::NotStarted => Some(0.0), + InstallStep::Started => Some(1.0), + InstallStep::CloseApp => Some(5.0), + InstallStep::Info(_) => None, + InstallStep::AllowInstall => Some(10.0), + InstallStep::Chunk => Some(self.chunks as f32 * 4.0 + 10.0), + InstallStep::Completed => Some(99.0), + InstallStep::Error(_) => None, + InstallStep::InstalledVersion(_) => Some(100.0), + }; + if let Some(p) = percent { + self.percent = p; + } + + match msg { + InstallStep::InstalledVersion(v) => { + self.state = State::Stopped; + UpgradeMessage::Completed { + id: self.id.clone(), + version: v, + } + .into() + } + InstallStep::Error(e) => { + self.state = State::Stopped; + UpgradeMessage::Error { + id: self.id.clone(), + msg: e, + } + .into() + } + s => UpgradeMessage::Progress(UpgradeProgress { + id: self.id.clone(), + step: s, + percent: Some(self.percent), + }) + .into(), + } + } +} + +pub fn connect(id: &str) -> Option { + if let Ok(api) = ledger_api() { + let device = TransportNativeHID::list_ledgers(&api).find(|device| { + let dev_id = ledger_id(device); + dev_id == *id + })?; + return TransportNativeHID::open_device(&api, device).ok(); + } + None +} + +pub fn maybe_start_upgrade( + id: String, + hws: &mut HardwareWallets, + network: Network, + upgrading: &mut bool, +) { + if let Some(hw) = hws.list.iter_mut().find(|h| h.id() == &id) { + if !hw.is_upgrade_in_progress() { + *upgrading = true; + hw.start_upgrade(network) + } + } +} + +pub fn update_upgrade_state(msg: UpgradeMessage, hws: &mut HardwareWallets, upgrading: &mut bool) { + match msg { + UpgradeMessage::Error { .. } | UpgradeMessage::Completed { .. } => *upgrading = false, + _ => {} + } + if let Some(hw) = hws.list.iter_mut().find(|hw| hw.id() == msg.id()) { + msg.update(hw) + } +} + +pub fn ledger_upgrade_subscriptions + Debug + Unpin + Send + 'static>( + hws: &HardwareWallets, +) -> Vec> { + hws.list + .iter() + .filter_map(|hw| { + if let HardwareWallet::NeedUpgrade { + upgrade_in_progress, + upgrade_testnet, + upgrade_step, + id, + .. + } = hw + { + if *upgrade_in_progress && upgrade_step.is_none() { + Some(subscription::unfold( + id.clone(), + UpgradeState::new(id.clone(), *upgrade_testnet), + ledger_subscription, + )) + } else { + None + } + } else { + None + } + }) + .collect() +} + +async fn ledger_subscription + Debug>( + mut state: UpgradeState, +) -> (Message, UpgradeState) { + fn poll + Debug>( + mut state: UpgradeState, + ) -> (Option, UpgradeState) { + match &state.state { + State::Idle => { + state.start(); + (Some(state.update(InstallStep::NotStarted)), state) + } + State::Running => match state.receiver.try_recv() { + Ok(msg) => (Some(state.update(msg)), state), + Err(TryRecvError::Empty) => (None, state), + Err(TryRecvError::Disconnected) => { + let error = InstallStep::Error("Disconnected".into()); + (Some(state.update(error)), state) + } + }, + State::Stopped => ( + Some( + UpgradeMessage::Stopped { + id: state.id.clone(), + } + .into(), + ), + state, + ), + } + } + + loop { + let (m, s) = poll(state); + if let Some(message) = m { + return (message, s); + } else { + tokio::time::sleep(Duration::from_millis(500)).await; + state = s; + } + } +} diff --git a/gui/src/lib.rs b/gui/src/lib.rs index 915b579b0..84abde63c 100644 --- a/gui/src/lib.rs +++ b/gui/src/lib.rs @@ -5,6 +5,7 @@ pub mod download; pub mod hw; pub mod installer; pub mod launcher; +pub mod ledger_upgrade; pub mod lianalite; pub mod loader; pub mod logger; diff --git a/gui/ui/src/component/hw.rs b/gui/ui/src/component/hw.rs index 99c7df35c..ff5e7ac5d 100644 --- a/gui/ui/src/component/hw.rs +++ b/gui/ui/src/component/hw.rs @@ -1,10 +1,14 @@ -use crate::{color, component::text, icon, image, theme, widget::*}; +use crate::{ + color, + component::text::{self, caption, p1_regular, p2_regular}, + icon, image, theme, + widget::*, +}; use iced::{ - widget::{column, container, row, tooltip}, + widget::{column, container, row, scrollable::Properties, tooltip, Space}, Alignment, Length, }; -use std::borrow::Cow; -use std::fmt::Display; +use std::{borrow::Cow, fmt::Display}; pub fn locked_hardware_wallet<'a, T: 'a, K: Display>( kind: K, @@ -214,6 +218,89 @@ pub fn selected_hardware_wallet<'a, T: 'a, K: Display, V: Display, F: Display>( .padding(10) } +pub fn ledger_need_upgrade<'a, T: 'a + std::clone::Clone, K: Display, V: Display>( + kind: K, + version: Option, + message: T, + upgrading: bool, + upgrade_failed: bool, +) -> Container<'a, T> { + let message = if !upgrading && !upgrade_failed { + Some(message) + } else { + None + }; + let device = Container::new( + Column::new().push( + Row::new() + .spacing(5) + .push(caption(kind.to_string())) + .push_maybe(version.map(|v| caption(v.to_string()))), + ), + ) + .padding(15) + .style(theme::Container::Card(theme::Card::HalfTop)) + .width(Length::Fill); + + let banner = Container::new( + Row::new() + .push(p2_regular(if !upgrade_failed { + "Your Ledger's Bitcoin app is too old to be used in taproot descriptor." + } else { + "Upgrade your device firmware with Ledger Live." + })) + .push(Space::with_width(Length::Fill)) + .push( + Button::new(" Upgrade ") + .on_press_maybe(message) + .style(theme::Button::Warning), + ), + ) + .padding(15) + .style(theme::Container::Card(theme::Card::HalfBottom)) + .width(Length::Fill); + + Container::new(Column::new().push(device).push(banner)) + .style(theme::Container::Card(theme::Card::Simple)) +} + +pub fn ledger_upgrading<'a, T: 'a + std::clone::Clone, K: Display, V: Display>( + kind: K, + version: Option, + logs: Vec, +) -> Container<'a, T> { + let device = Container::new( + Column::new().push( + Row::new() + .spacing(5) + .push(caption(kind.to_string())) + .push_maybe(version.map(|v| caption(v.to_string()))), + ), + ) + .padding(15) + .style(theme::Container::Card(theme::Card::HalfTop)) + .width(Length::Fill); + + let logs: Vec<_> = logs.into_iter().map(|msg| p2_regular(msg).into()).collect(); + + let banner = Container::new( + Column::new().push(p1_regular("Upgrading:")).push( + Scrollable::new(Column::with_children(logs)) + .height(50) + .width(Length::Fill) + .direction(iced::widget::scrollable::Direction::Vertical( + Properties::new().alignment(iced::widget::scrollable::Alignment::End), + )), + ), + ) + .padding(15) + .style(theme::Container::Card(theme::Card::HalfBottom)) + .width(Length::Fill); + + Container::new(Column::new().push(device).push(banner)) + .style(theme::Container::Card(theme::Card::Simple)) +} + pub fn sign_success_hardware_wallet<'a, T: 'a, K: Display, V: Display, F: Display>( kind: K, version: Option, @@ -313,7 +400,6 @@ pub fn wrong_network_hardware_wallet<'a, T: 'a, K: Display, V: Display>( ]) .align_items(Alignment::Center), ) - .padding(10) } pub fn unsupported_hardware_wallet<'a, T: 'a, K: Display, V: Display>( diff --git a/gui/ui/src/theme.rs b/gui/ui/src/theme.rs index 32c35ce62..51fbb7c29 100644 --- a/gui/ui/src/theme.rs +++ b/gui/ui/src/theme.rs @@ -4,6 +4,7 @@ use iced::{ button, checkbox, container, pick_list, progress_bar, qr_code, radio, scrollable, slider, svg, text, text_input, }, + Border, }; use super::color; @@ -292,6 +293,8 @@ pub enum Card { Invalid, Warning, Error, + HalfTop, + HalfBottom, } impl Card { @@ -334,6 +337,27 @@ impl Card { Card::Warning => container::Appearance { background: Some(color::ORANGE.into()), text_color: color::GREY_2.into(), + border: iced::Border { + radius: 5.0.into(), + ..Border::default() + }, + ..container::Appearance::default() + }, + Card::HalfTop => container::Appearance { + background: Some(color::GREY_2.into()), + border: Border { + radius: [30.0, 30.0, 0.0, 0.0].into(), + ..Border::default() + }, + ..container::Appearance::default() + }, + Card::HalfBottom => container::Appearance { + text_color: color::GREY_2.into(), + background: Some(color::ORANGE.into()), + border: Border { + radius: [0.0, 0.0, 30.0, 30.0].into(), + ..Border::default() + }, ..container::Appearance::default() }, }, @@ -379,6 +403,28 @@ impl Card { Card::Warning => container::Appearance { background: Some(color::ORANGE.into()), text_color: color::LIGHT_BLACK.into(), + border: iced::Border { + radius: 5.0.into(), + ..Border::default() + }, + ..container::Appearance::default() + }, + Card::HalfTop => container::Appearance { + background: Some(color::GREY_6.into()), + border: iced::Border { + color: color::GREY_5, + width: 0.0, + radius: [25.0, 25.0, 0.0, 0.0].into(), + }, + ..container::Appearance::default() + }, + Card::HalfBottom => container::Appearance { + background: Some(color::ORANGE.into()), + text_color: color::LIGHT_BLACK.into(), + border: Border { + radius: [0.0, 0.0, 25.0, 25.0].into(), + ..Border::default() + }, ..container::Appearance::default() }, }, @@ -636,6 +682,7 @@ pub enum Button { TransparentBorder, Border, Menu(bool), + Warning, } impl button::StyleSheet for Theme { @@ -729,6 +776,17 @@ impl button::StyleSheet for Theme { } } } + Button::Warning => button::Appearance { + shadow_offset: iced::Vector::default(), + background: Some(color::ORANGE.into()), + text_color: color::LIGHT_BLACK, + border: iced::Border { + color: color::LIGHT_BLACK, + width: 1.0, + radius: 25.0.into(), + }, + ..button::Appearance::default() + }, }, } } @@ -803,6 +861,17 @@ impl button::StyleSheet for Theme { }, ..button::Appearance::default() }, + Button::Warning => button::Appearance { + shadow_offset: iced::Vector::default(), + background: Some(color::GREEN.into()), + text_color: color::LIGHT_BLACK, + border: iced::Border { + color: color::GREEN, + width: 0.0, + radius: 25.0.into(), + }, + ..button::Appearance::default() + }, }, } }