From 1a68eda8c1293229f79cc533bd70a1ee97a31900 Mon Sep 17 00:00:00 2001 From: akanyan Date: Fri, 11 Apr 2025 15:27:13 +0000 Subject: [PATCH] feat: partial support for patches --- rust/Cargo.lock | 1045 +++++++++-------- rust/Cargo.toml | 1 + rust/src/appdata.rs | 9 +- rust/src/cmd.rs | 12 + rust/src/lib.rs | 3 + rust/src/model/mod.rs | 2 +- rust/src/model/patch.rs | 155 +++ rust/src/modules/segatools.rs | 10 +- rust/src/patcher.rs | 45 + rust/src/pkg.rs | 12 +- rust/src/profiles/mod.rs | 32 +- .../segatools-chunithm.ini} | 51 +- rust/static/segatools-ongeki.ini | 36 + rust/static/standard-chunithm.json5 | 219 ++++ src/components/App.vue | 42 +- src/components/ModTitlecard.vue | 15 +- src/components/OptionCategory.vue | 3 +- src/components/OptionRow.vue | 7 + src/components/PatchEntry.vue | 34 + src/components/PatchList.vue | 54 + src/types.ts | 14 + 21 files changed, 1218 insertions(+), 583 deletions(-) create mode 100644 rust/src/model/patch.rs create mode 100644 rust/src/patcher.rs rename rust/{src/model/segatools_base.rs => static/segatools-chunithm.ini} (71%) create mode 100644 rust/static/segatools-ongeki.ini create mode 100644 rust/static/standard-chunithm.json5 create mode 100644 src/components/PatchEntry.vue create mode 100644 src/components/PatchList.vue diff --git a/rust/Cargo.lock b/rust/Cargo.lock index d173f06..27467dc 100644 --- a/rust/Cargo.lock +++ b/rust/Cargo.lock @@ -155,22 +155,19 @@ checksum = "7d902e3d592a523def97af8f317b08ce16b7ab854c1985a0c671e6f15cebc236" [[package]] name = "ashpd" -version = "0.10.2" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9c39d707614dbcc6bed00015539f488d8e3fe3e66ed60961efc0c90f4b380b3" +checksum = "6cbdf310d77fd3aaee6ea2093db7011dc2d35d2eb3481e5607f1f8d942ed99df" dependencies = [ "enumflags2", "futures-channel", "futures-util", - "rand 0.8.5", + "rand 0.9.0", "raw-window-handle", "serde", "serde_repr", "tokio", "url", - "wayland-backend", - "wayland-client", - "wayland-protocols", "zbus", ] @@ -211,9 +208,9 @@ dependencies = [ [[package]] name = "async-compression" -version = "0.4.20" +version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "310c9bcae737a48ef5cdee3174184e6d548b292739ede61a1f955ef76a738861" +checksum = "59a194f9d963d8099596278594b3107448656ba73831c9d8c783e613ce86da64" dependencies = [ "flate2", "futures-core", @@ -319,7 +316,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -342,9 +339,9 @@ dependencies = [ [[package]] name = "async-std" -version = "1.13.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c634475f29802fde2b8f0b505b1bd00dfe4df7d4a000f0b36f7671197d5c3615" +checksum = "730294c1c08c2e0f85759590518f6333f0d5a0a766a27d519c1b244c3dfd8a24" dependencies = [ "async-channel 1.9.0", "async-global-executor", @@ -374,13 +371,13 @@ checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" [[package]] name = "async-trait" -version = "0.1.87" +version = "0.1.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d556ec1359574147ec0c4fc5eb525f3f23263a592b1a9c07e0a75b427de55c97" +checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -637,9 +634,9 @@ dependencies = [ [[package]] name = "cargo_toml" -version = "0.21.0" +version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fbd1fe9db3ebf71b89060adaf7b0504c2d6a425cf061313099547e382c2e472" +checksum = "02260d489095346e5cafd04dea8e8cb54d1d74fcd759022a9b72986ebe9a1257" dependencies = [ "serde", "toml", @@ -647,9 +644,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.16" +version = "1.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be714c154be609ec7f5dad223a33bf1482fff90472de28f7362806e6d4832b8c" +checksum = "525046617d8376e3db1deffb079e91cef90a89fc3ca5c185bbf8c9ecdd15cd5c" dependencies = [ "jobserver", "libc", @@ -735,18 +732,18 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.31" +version = "4.5.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "027bb0d98429ae334a8698531da7077bdf906419543a35a55c2cb1b66437d767" +checksum = "d8aa86934b44c19c50f87cc2790e19f54f7a67aedb64101c2e1a2e5ecfb73944" dependencies = [ "clap_builder", ] [[package]] name = "clap_builder" -version = "4.5.31" +version = "4.5.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5589e0cba072e0f3d23791efac0fd8627b49c829c196a492e88168e6a669d863" +checksum = "2414dbb2dd0695280da6ea9261e327479e9d37b0630f6b53ba2a11c60c679fd9" dependencies = [ "anstream", "anstyle", @@ -955,9 +952,9 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.14" +version = "0.5.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ba6d68e24814cb8de6bb986db8222d3a027d15872cabc0d18817bc3c0e4471" +checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" dependencies = [ "crossbeam-utils", ] @@ -1008,7 +1005,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" dependencies = [ "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -1018,14 +1015,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501" dependencies = [ "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] name = "darling" -version = "0.20.10" +version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" +checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" dependencies = [ "darling_core", "darling_macro", @@ -1033,27 +1030,27 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.20.10" +version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" +checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", "strsim 0.11.1", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] name = "darling_macro" -version = "0.20.10" +version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" +checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -1064,9 +1061,9 @@ checksum = "da692b8d1080ea3045efaab14434d40468c3d8657e42abddfffca87b428f4c1b" [[package]] name = "deranged" -version = "0.3.11" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" dependencies = [ "powerfmt", "serde", @@ -1080,7 +1077,7 @@ checksum = "30542c1ad912e0e3d22a1935c290e12e8a29d704a420177a31faad4a601a0800" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -1101,7 +1098,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -1111,7 +1108,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" dependencies = [ "derive_builder_core", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -1124,7 +1121,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -1144,7 +1141,7 @@ checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", "unicode-xid", ] @@ -1195,6 +1192,18 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" +[[package]] +name = "dispatch2" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a0d569e003ff27784e0e14e4a594048698e0c0f0b66cabcb51511be55a7caa0" +dependencies = [ + "bitflags 2.9.0", + "block2 0.6.0", + "libc", + "objc2 0.6.0", +] + [[package]] name = "displaydoc" version = "0.2.5" @@ -1203,7 +1212,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -1220,15 +1229,6 @@ dependencies = [ "winsafe 0.0.10", ] -[[package]] -name = "dlib" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412" -dependencies = [ - "libloading 0.8.6", -] - [[package]] name = "dlopen2" version = "0.7.0" @@ -1249,7 +1249,7 @@ checksum = "f2b99bf03862d7f545ebc28ddd33a665b50865f4dfd84031a393823879bd4c54" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -1261,12 +1261,6 @@ dependencies = [ "const-random", ] -[[package]] -name = "downcast-rs" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" - [[package]] name = "dpi" version = "0.1.1" @@ -1356,7 +1350,7 @@ checksum = "fc4caf64a58d7a6d65ab00639b046ff54399a39f5f2554728895ace4b297cd79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -1371,14 +1365,14 @@ dependencies = [ [[package]] name = "env_logger" -version = "0.11.6" +version = "0.11.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcaee3d8e3cfc3fd92428d477bc97fc29ec8716d180c0d74c643bb26166660e0" +checksum = "13c863f0904021b108aa8b2f55046443e6b1ebde8fd4a15c399893aae4fa069f" dependencies = [ "anstream", "anstyle", "env_filter", - "humantime", + "jiff", "log", ] @@ -1400,9 +1394,9 @@ dependencies = [ [[package]] name = "errno" -version = "0.3.10" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" +checksum = "976dd42dc7e85965fe702eb8164f21f450704bdde31faefd6471dba214cb594e" dependencies = [ "libc", "windows-sys 0.59.0", @@ -1427,9 +1421,9 @@ dependencies = [ [[package]] name = "event-listener-strategy" -version = "0.5.3" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c3e4e0dd3673c1139bf041f3008816d9cf2946bbfac2945c09e523b8d7b05b2" +checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" dependencies = [ "event-listener 5.4.0", "pin-project-lite", @@ -1484,12 +1478,12 @@ dependencies = [ [[package]] name = "flate2" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11faaf5a5236997af9848be0bef4db95824b1d534ebc64d0f0c6cf3e67bd38dc" +checksum = "7ced92e76e966ca2fd84c8f7aa01a4aea65b0eb6648d72f7c8f3e2764a67fece" dependencies = [ "crc32fast", - "miniz_oxide 0.8.5", + "miniz_oxide 0.8.8", ] [[package]] @@ -1500,9 +1494,9 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "foldhash" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0d2fde1f7b3d48b8395d5f2de76c18a528bd6a9cdde438df747bfcba3e05d6f" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" [[package]] name = "foreign-types" @@ -1531,7 +1525,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -1634,7 +1628,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -1811,14 +1805,16 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8" +checksum = "73fea8450eea4bac3940448fb7ae50d91f034f941199fcd9d909a5a07aa455f0" dependencies = [ "cfg-if", + "js-sys", "libc", - "wasi 0.13.3+wasi-0.2.2", - "windows-targets 0.52.6", + "r-efi", + "wasi 0.14.2+wasi-0.2.4", + "wasm-bindgen", ] [[package]] @@ -1893,7 +1889,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -1984,7 +1980,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -1999,7 +1995,7 @@ dependencies = [ "futures-core", "futures-sink", "http", - "indexmap 2.7.1", + "indexmap 2.9.0", "slab", "tokio", "tokio-util", @@ -2103,9 +2099,9 @@ dependencies = [ [[package]] name = "http" -version = "1.2.0" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea" +checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" dependencies = [ "bytes", "fnv", @@ -2124,12 +2120,12 @@ dependencies = [ [[package]] name = "http-body-util" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" +checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" dependencies = [ "bytes", - "futures-util", + "futures-core", "http", "http-body", "pin-project-lite", @@ -2147,12 +2143,6 @@ version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" -[[package]] -name = "humantime" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" - [[package]] name = "hyper" version = "1.6.0" @@ -2209,9 +2199,9 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.10" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" +checksum = "497bbc33a26fdd4af9ed9c70d63f61cf56a938375fbb32df34db9b1cd6d643f2" dependencies = [ "bytes", "futures-channel", @@ -2219,6 +2209,7 @@ dependencies = [ "http", "http-body", "hyper", + "libc", "pin-project-lite", "socket2", "tokio", @@ -2228,16 +2219,17 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.61" +version = "0.1.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" +checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", + "log", "wasm-bindgen", - "windows-core 0.52.0", + "windows-core 0.61.0", ] [[package]] @@ -2300,9 +2292,9 @@ dependencies = [ [[package]] name = "icu_locid_transform_data" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" +checksum = "7515e6d781098bf9f7205ab3fc7e9709d34554ae0b21ddbcb5febfa4bc7df11d" [[package]] name = "icu_normalizer" @@ -2324,9 +2316,9 @@ dependencies = [ [[package]] name = "icu_normalizer_data" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" +checksum = "c5e8338228bdc8ab83303f16b797e177953730f601a96c25d10cb3ab0daa0cb7" [[package]] name = "icu_properties" @@ -2345,9 +2337,9 @@ dependencies = [ [[package]] name = "icu_properties_data" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" +checksum = "85fb8799753b75aee8d2a21d7c14d9f38921b54b3dbda10f5a3c7a7b82dba5e2" [[package]] name = "icu_provider" @@ -2374,7 +2366,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -2423,9 +2415,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.7.1" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652" +checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" dependencies = [ "equivalent", "hashbrown 0.15.2", @@ -2516,6 +2508,30 @@ dependencies = [ "system-deps", ] +[[package]] +name = "jiff" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f33145a5cbea837164362c7bd596106eb7c5198f97d1ba6f6ebb3223952e488" +dependencies = [ + "jiff-static", + "log", + "portable-atomic", + "portable-atomic-util", + "serde", +] + +[[package]] +name = "jiff-static" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43ce13c40ec6956157a3635d97a1ee2df323b263f09ea14165131289cb0f5c19" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] + [[package]] name = "jni" version = "0.21.1" @@ -2540,10 +2556,11 @@ checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" [[package]] name = "jobserver" -version = "0.1.32" +version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" +checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a" dependencies = [ + "getrandom 0.3.2", "libc", ] @@ -2648,15 +2665,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e9ec52138abedcc58dc17a7c6c0c00a2bdb4f3427c7f63fa97fd0d859155caf" dependencies = [ "gtk-sys", - "libloading 0.7.4", + "libloading", "once_cell", ] [[package]] name = "libc" -version = "0.2.170" +version = "0.2.171" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "875b3680cb2f8f71bdcf9a30f38d48282f5d3c95cbf9b3fa57269bb5d5c06828" +checksum = "c19937216e9d3aa9956d9bb8dfc0b0c8beb6058fc4f7a4dc4d850edf86a237d6" [[package]] name = "libloading" @@ -2668,16 +2685,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "libloading" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34" -dependencies = [ - "cfg-if", - "windows-targets 0.52.6", -] - [[package]] name = "libredox" version = "0.1.3" @@ -2697,9 +2704,9 @@ checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" [[package]] name = "linux-raw-sys" -version = "0.9.3" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe7db12097d22ec582439daf8618b8fdd1a7bef6270e9af3b1ebcd30893cf413" +checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" [[package]] name = "litemap" @@ -2725,9 +2732,9 @@ checksum = "9374ef4228402d4b7e403e5838cb880d9ee663314b0a900d5a6aabf0c213552e" [[package]] name = "log" -version = "0.4.26" +version = "0.4.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30bde2b3dc3671ae49d8e2e9f044c7c005836e7a023ee57cffa25ab82764bb9e" +checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" dependencies = [ "value-bag", ] @@ -2742,6 +2749,17 @@ dependencies = [ "crc", ] +[[package]] +name = "lzma-sys" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fda04ab3764e6cde78b9974eec4f779acaba7c4e84b36eca3cf77c581b85d27" +dependencies = [ + "cc", + "libc", + "pkg-config", +] + [[package]] name = "mac" version = "0.1.1" @@ -2806,9 +2824,9 @@ dependencies = [ [[package]] name = "miniz_oxide" -version = "0.8.5" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e3e04debbb59698c15bacbb6d93584a8c0ca9cc3213cb423d31f760d8843ce5" +checksum = "3be647b768db090acb35d5ec5db2b0e1f1de11133ca123b9eacf5137868f892a" dependencies = [ "adler2", "simd-adler32", @@ -2836,7 +2854,7 @@ dependencies = [ "gtk", "keyboard-types", "objc2 0.6.0", - "objc2-app-kit 0.3.0", + "objc2-app-kit", "objc2-core-foundation", "objc2-foundation 0.3.0", "once_cell", @@ -2948,10 +2966,10 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" dependencies = [ - "proc-macro-crate 3.2.0", + "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -2989,22 +3007,6 @@ dependencies = [ "objc2-exception-helper", ] -[[package]] -name = "objc2-app-kit" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" -dependencies = [ - "bitflags 2.9.0", - "block2 0.5.1", - "libc", - "objc2 0.5.2", - "objc2-core-data 0.2.2", - "objc2-core-image 0.2.2", - "objc2-foundation 0.2.2", - "objc2-quartz-core 0.2.2", -] - [[package]] name = "objc2-app-kit" version = "0.3.0" @@ -3016,10 +3018,10 @@ dependencies = [ "libc", "objc2 0.6.0", "objc2-cloud-kit", - "objc2-core-data 0.3.0", + "objc2-core-data", "objc2-core-foundation", "objc2-core-graphics", - "objc2-core-image 0.3.0", + "objc2-core-image", "objc2-foundation 0.3.0", "objc2-quartz-core 0.3.0", ] @@ -3035,18 +3037,6 @@ dependencies = [ "objc2-foundation 0.3.0", ] -[[package]] -name = "objc2-core-data" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" -dependencies = [ - "bitflags 2.9.0", - "block2 0.5.1", - "objc2 0.5.2", - "objc2-foundation 0.2.2", -] - [[package]] name = "objc2-core-data" version = "0.3.0" @@ -3080,18 +3070,6 @@ dependencies = [ "objc2-io-surface", ] -[[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 0.2.2", - "objc2-metal", -] - [[package]] name = "objc2-core-image" version = "0.3.0" @@ -3125,7 +3103,6 @@ checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" dependencies = [ "bitflags 2.9.0", "block2 0.5.1", - "dispatch", "libc", "objc2 0.5.2", ] @@ -3174,7 +3151,7 @@ checksum = "a1ac59da3ceebc4a82179b35dc550431ad9458f9cc326e053f49ba371ce76c5a" dependencies = [ "bitflags 2.9.0", "objc2 0.6.0", - "objc2-app-kit 0.3.0", + "objc2-app-kit", "objc2-foundation 0.3.0", ] @@ -3223,7 +3200,7 @@ dependencies = [ "bitflags 2.9.0", "block2 0.6.0", "objc2 0.6.0", - "objc2-app-kit 0.3.0", + "objc2-app-kit", "objc2-core-foundation", "objc2-foundation 0.3.0", ] @@ -3239,9 +3216,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.20.3" +version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] name = "open" @@ -3257,9 +3234,9 @@ dependencies = [ [[package]] name = "openssl" -version = "0.10.71" +version = "0.10.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e14130c6a98cd258fdcb0fb6d744152343ff729cbfcb28c656a9d12b999fbcd" +checksum = "fedfea7d58a1f73118430a55da6a286e7b044961736ce96a16a17068ea25e5da" dependencies = [ "bitflags 2.9.0", "cfg-if", @@ -3278,7 +3255,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -3289,9 +3266,9 @@ checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] name = "openssl-sys" -version = "0.9.106" +version = "0.9.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bb61ea9811cc39e3c2069f40b8b8e2e70d8569b361f879786cc7ed48b777cdd" +checksum = "8288979acd84749c744a9014b4382d42b8f7b2592847b5afb2ed29e5d16ede07" dependencies = [ "cc", "libc", @@ -3433,9 +3410,9 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pest" -version = "2.7.15" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b7cafe60d6cf8e62e1b9b2ea516a089c008945bb5a275416789e7db0bc199dc" +checksum = "198db74531d58c70a361c42201efde7e2591e976d518caf7662a47dc5720e7b6" dependencies = [ "memchr", "thiserror 2.0.12", @@ -3444,9 +3421,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.7.15" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "816518421cfc6887a0d62bf441b6ffb4536fcc926395a69e1a85852d4363f57e" +checksum = "d725d9cfd79e87dccc9341a2ef39d1b6f6353d68c4b33c177febbe1a402c97c5" dependencies = [ "pest", "pest_generator", @@ -3454,22 +3431,22 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.7.15" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d1396fd3a870fc7838768d171b4616d5c91f6cc25e377b673d714567d99377b" +checksum = "db7d01726be8ab66ab32f9df467ae8b1148906685bbe75c82d1e65d7f5b3f841" dependencies = [ "pest", "pest_meta", "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] name = "pest_meta" -version = "2.7.15" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1e58089ea25d717bfd31fb534e4f3afcc2cc569c70de3e239778991ea3b7dea" +checksum = "7f9f832470494906d1fca5329f8ab5791cc60beb230c74815dff541cbd2b5ca0" dependencies = [ "once_cell", "pest", @@ -3580,7 +3557,7 @@ dependencies = [ "phf_shared 0.11.3", "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -3641,13 +3618,13 @@ checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" [[package]] name = "plist" -version = "1.7.0" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42cf17e9a1800f5f396bc67d193dc9411b59012a5876445ef450d449881e1016" +checksum = "eac26e981c03a6e53e0aee43c113e3202f5581d5360dae7bd2c70e800dd0451d" dependencies = [ "base64 0.22.1", - "indexmap 2.7.1", - "quick-xml 0.32.0", + "indexmap 2.9.0", + "quick-xml", "serde", "time", ] @@ -3662,7 +3639,7 @@ dependencies = [ "crc32fast", "fdeflate", "flate2", - "miniz_oxide 0.8.5", + "miniz_oxide 0.8.8", ] [[package]] @@ -3680,6 +3657,21 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "portable-atomic" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e" + +[[package]] +name = "portable-atomic-util" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" +dependencies = [ + "portable-atomic", +] + [[package]] name = "powerfmt" version = "0.2.0" @@ -3688,9 +3680,9 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "ppv-lite86" -version = "0.2.20" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" dependencies = [ "zerocopy", ] @@ -3722,9 +3714,9 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "3.2.0" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" +checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" dependencies = [ "toml_edit 0.22.24", ] @@ -3777,22 +3769,14 @@ dependencies = [ "memchr", ] -[[package]] -name = "quick-xml" -version = "0.37.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "165859e9e55f79d67b96c5d96f4e88b6f2695a1972849c15a6a3f5c59fc2c003" -dependencies = [ - "memchr", -] - [[package]] name = "quinn" -version = "0.11.6" +version = "0.11.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62e96808277ec6f97351a2380e6c25114bc9e67037775464979f3037c92d05ef" +checksum = "c3bd15a6f2967aef83887dcb9fec0014580467e33720d073560cf015a5683012" dependencies = [ "bytes", + "cfg_aliases", "pin-project-lite", "quinn-proto", "quinn-udp", @@ -3802,17 +3786,18 @@ dependencies = [ "thiserror 2.0.12", "tokio", "tracing", + "web-time", ] [[package]] name = "quinn-proto" -version = "0.11.9" +version = "0.11.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2fe5ef3495d7d2e377ff17b1a8ce2ee2ec2a18cde8b6ad6619d65d0701c135d" +checksum = "b820744eb4dc9b57a3398183639c511b5a26d2ed702cedd3febaa1393caa22cc" dependencies = [ "bytes", - "getrandom 0.2.15", - "rand 0.8.5", + "getrandom 0.3.2", + "rand 0.9.0", "ring", "rustc-hash", "rustls", @@ -3826,9 +3811,9 @@ dependencies = [ [[package]] name = "quinn-udp" -version = "0.5.10" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e46f3055866785f6b92bc6164b76be02ca8f2eb4b002c0354b28cf4c119e5944" +checksum = "541d0f57c6ec747a90738a52741d3221f7960e8ac2f0ff4b1a63680e033b4ab5" dependencies = [ "cfg_aliases", "libc", @@ -3840,13 +3825,19 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.39" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1f1914ce909e1658d9907913b4b91947430c7d9be598b15a1912935b8c04801" +checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" dependencies = [ "proc-macro2", ] +[[package]] +name = "r-efi" +version = "5.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" + [[package]] name = "rand" version = "0.7.3" @@ -3872,6 +3863,17 @@ dependencies = [ "rand_core 0.6.4", ] +[[package]] +name = "rand" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3779b94aeb87e8bd4e834cee3650289ee9e0d5677f976ecdb6d219e5f4f6cd94" +dependencies = [ + "rand_chacha 0.9.0", + "rand_core 0.9.3", + "zerocopy", +] + [[package]] name = "rand_chacha" version = "0.2.2" @@ -3892,6 +3894,16 @@ dependencies = [ "rand_core 0.6.4", ] +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core 0.9.3", +] + [[package]] name = "rand_core" version = "0.5.1" @@ -3910,6 +3922,15 @@ dependencies = [ "getrandom 0.2.15", ] +[[package]] +name = "rand_core" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +dependencies = [ + "getrandom 0.3.2", +] + [[package]] name = "rand_hc" version = "0.2.0" @@ -3936,9 +3957,9 @@ checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" [[package]] name = "redox_syscall" -version = "0.5.10" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b8c0c260b63a8219631167be35e6a988e9554dbd323f8bd08439c8ed1302bd1" +checksum = "d2f103c6d277498fbceb16e84d317e2a400f160f46904d5f5410848c829511a3" dependencies = [ "bitflags 2.9.0", ] @@ -3985,9 +4006,9 @@ checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "reqwest" -version = "0.12.12" +version = "0.12.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43e734407157c3c2034e0258f5e4473ddb361b1e85f95a66690d67264d7cd1da" +checksum = "d19c46a6fdd48bc4dab94b6103fccc55d34c67cc0ad04653aad4ea2a07cd7bbb" dependencies = [ "base64 0.22.1", "bytes", @@ -4031,27 +4052,27 @@ dependencies = [ "wasm-streams", "web-sys", "webpki-roots", - "windows-registry 0.2.0", + "windows-registry 0.4.0", ] [[package]] name = "rfd" -version = "0.15.2" +version = "0.15.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a24763657bff09769a8ccf12c8b8a50416fb035fe199263b4c5071e4e3f006f" +checksum = "80c844748fdc82aae252ee4594a89b6e7ebef1063de7951545564cbc4e57075d" dependencies = [ "ashpd", - "block2 0.5.1", - "core-foundation 0.10.0", - "core-foundation-sys", + "block2 0.6.0", + "dispatch2", "glib-sys", "gobject-sys", "gtk-sys", "js-sys", "log", - "objc2 0.5.2", - "objc2-app-kit 0.2.2", - "objc2-foundation 0.2.2", + "objc2 0.6.0", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-foundation 0.3.0", "raw-window-handle", "wasm-bindgen", "wasm-bindgen-futures", @@ -4061,9 +4082,9 @@ dependencies = [ [[package]] name = "ring" -version = "0.17.11" +version = "0.17.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da5349ae27d3887ca812fb375b45a4fbb36d8d12d2df394968cd86e35683fe73" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" dependencies = [ "cc", "cfg-if", @@ -4120,22 +4141,22 @@ dependencies = [ [[package]] name = "rustix" -version = "1.0.3" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e56a18552996ac8d29ecc3b190b4fdbb2d91ca4ec396de7bbffaf43f3d637e96" +checksum = "d97817398dd4bb2e6da002002db259209759911da105da92bec29ccb12cf58bf" dependencies = [ "bitflags 2.9.0", "errno", "libc", - "linux-raw-sys 0.9.3", + "linux-raw-sys 0.9.4", "windows-sys 0.59.0", ] [[package]] name = "rustls" -version = "0.23.23" +version = "0.23.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47796c98c480fce5406ef69d1c76378375492c3b0a0de587be0c1d9feb12f395" +checksum = "df51b5869f3a441595eac5e8ff14d486ff285f7b8c0df8770e49c3b56351f0f0" dependencies = [ "once_cell", "ring", @@ -4165,9 +4186,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.102.8" +version = "0.103.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" +checksum = "fef8b8769aaccf73098557a87cd1816b4f9c7c16811c9c77142aa695c16f2c03" dependencies = [ "ring", "rustls-pki-types", @@ -4228,15 +4249,9 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 2.0.99", + "syn 2.0.100", ] -[[package]] -name = "scoped-tls" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" - [[package]] name = "scopeguard" version = "1.2.0" @@ -4297,9 +4312,9 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.218" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8dfc9d19bdbf6d17e22319da49161d5d0108e4188e8b680aef6299eed22df60" +checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" dependencies = [ "serde_derive", ] @@ -4317,13 +4332,13 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.218" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f09503e191f4e797cb8aac08e9a4a4695c5edf6a2e70e376d961ddd5c969f82b" +checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -4334,7 +4349,7 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -4368,7 +4383,7 @@ checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -4402,7 +4417,7 @@ dependencies = [ "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.7.1", + "indexmap 2.9.0", "serde", "serde_derive", "serde_json", @@ -4419,7 +4434,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -4476,6 +4491,19 @@ dependencies = [ "digest", ] +[[package]] +name = "sha256" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f880fc8562bdeb709793f00eb42a2ad0e672c4f883bbe59122b926eca935c8f6" +dependencies = [ + "async-trait", + "bytes", + "hex", + "sha2", + "tokio", +] + [[package]] name = "sharded-slab" version = "0.1.7" @@ -4551,15 +4579,15 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.14.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd" +checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9" [[package]] name = "socket2" -version = "0.5.8" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" +checksum = "4f5fd57c80058a56cf5c777ab8a126398ece8e442983605d280a44ce79d0edef" dependencies = [ "libc", "windows-sys 0.52.0", @@ -4643,6 +4671,7 @@ dependencies = [ "serde_derive", "serde_json", "serde_json5", + "sha256", "simple_logger", "tauri", "tauri-build", @@ -4668,9 +4697,9 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] name = "string_cache" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "938d512196766101d333398efde81bc1f37b00cb42c2f8350e5df639f040bbbe" +checksum = "bf776ba3fa74f83bf4b63c3dcbbf82173db2632ed8452cb2d891d33f459de70f" dependencies = [ "new_debug_unreachable", "parking_lot", @@ -4757,9 +4786,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.99" +version = "2.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e02e925281e18ffd9d640e234264753c43edc62d64b2d4cf898f1bc5e75f3fc2" +checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0" dependencies = [ "proc-macro2", "quote", @@ -4783,7 +4812,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -4822,9 +4851,9 @@ dependencies = [ [[package]] name = "tao" -version = "0.32.7" +version = "0.32.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e7f38988a68dfb559899ea307b97577f008d3254f6cfdd219a67e27ce34c95b" +checksum = "63c8b1020610b9138dd7b1e06cf259ae91aa05c30f3bd0d6b42a03997b92dec1" dependencies = [ "bitflags 2.9.0", "core-foundation 0.10.0", @@ -4844,7 +4873,7 @@ dependencies = [ "ndk-context", "ndk-sys", "objc2 0.6.0", - "objc2-app-kit 0.3.0", + "objc2-app-kit", "objc2-foundation 0.3.0", "once_cell", "parking_lot", @@ -4867,7 +4896,7 @@ checksum = "f4e16beb8b2ac17db28eab8bca40e62dbfbb34c0fcdc6d9826b11b7b5d047dfd" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -4889,9 +4918,9 @@ checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" [[package]] name = "tauri" -version = "2.3.1" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3be747b26bf28674977fac47bdf6963fd9c7578271c3fbeb25d8686de6596f35" +checksum = "4d08db1ff9e011e04014e737ec022610d756c0eae0b3b3a9037bccaf3003173a" dependencies = [ "anyhow", "bytes", @@ -4911,7 +4940,7 @@ dependencies = [ "mime", "muda", "objc2 0.6.0", - "objc2-app-kit 0.3.0", + "objc2-app-kit", "objc2-foundation 0.3.0", "percent-encoding", "plist", @@ -4940,9 +4969,9 @@ dependencies = [ [[package]] name = "tauri-build" -version = "2.0.6" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51a2e96f3c0baa0581656bb58e6fdd0f7c9c31eaf6721a0c08689d938fe85f2d" +checksum = "0fd20e4661c2cce65343319e6e8da256958f5af958cafc47c0d0af66a55dcd17" dependencies = [ "anyhow", "cargo_toml", @@ -4962,9 +4991,9 @@ dependencies = [ [[package]] name = "tauri-codegen" -version = "2.0.5" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e357ec3daf8faad1029bc7109e7f5b308ceb63b6073d110d7388923a4cce5e55" +checksum = "458258b19032450ccf975840116ecf013e539eadbb74420bd890e8c56ab2b1a4" dependencies = [ "base64 0.22.1", "brotli", @@ -4978,7 +5007,7 @@ dependencies = [ "serde", "serde_json", "sha2", - "syn 2.0.99", + "syn 2.0.100", "tauri-utils", "thiserror 2.0.12", "time", @@ -4989,23 +5018,23 @@ dependencies = [ [[package]] name = "tauri-macros" -version = "2.0.5" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "447ee4dd94690d77f1422f2b57e783c654ba75c535ad6f6e727887330804fff2" +checksum = "d402813d3b9c773a0fa58697c457c771f10e735498fdcb7b343264d18e5a601f" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", "tauri-codegen", "tauri-utils", ] [[package]] name = "tauri-plugin" -version = "2.0.5" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ad3021d8e60ec7672f51ecb67c5e1a514a4d7a9a5ffc9d85090739378047502" +checksum = "a4190775d6ff73fe66d9af44c012739a2659720efd9c0e1e56a918678038699d" dependencies = [ "anyhow", "glob", @@ -5024,7 +5053,7 @@ version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5458ae16eac81bdbe8d9da2a9f3e01e8cdedbc381cc1727c01127542c8a61c5" dependencies = [ - "clap 4.5.31", + "clap 4.5.35", "log", "serde", "serde_json", @@ -5035,9 +5064,9 @@ dependencies = [ [[package]] name = "tauri-plugin-deep-link" -version = "2.2.0" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35d51ffd286073414d26353bcfc9e83e3cd63f96fa7f7a912f92f2118e5de5a6" +checksum = "dba4412f30eaff6f5d210e20383c2d6835593977402092e95b72497a4f8632fa" dependencies = [ "dunce", "rust-ini", @@ -5049,15 +5078,15 @@ dependencies = [ "thiserror 2.0.12", "tracing", "url", - "windows-registry 0.3.0", - "windows-result 0.2.0", + "windows-registry 0.5.1", + "windows-result", ] [[package]] name = "tauri-plugin-dialog" -version = "2.2.0" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b59fd750551b1066744ab956a1cd6b1ea3e1b3763b0b9153ac27a044d596426" +checksum = "bcaf6e5d6062423a0f711a23c2a573ccba222b6a16a9322d8499928f27e41376" dependencies = [ "log", "raw-window-handle", @@ -5073,9 +5102,9 @@ dependencies = [ [[package]] name = "tauri-plugin-fs" -version = "2.2.0" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1a1edf18000f02903a7c2e5997fb89aca455ecbc0acc15c6535afbb883be223" +checksum = "88371e340ad2f07409a3b68294abe73f20bc9c1bc1b631a31dc37a3d0161f682" dependencies = [ "anyhow", "dunce", @@ -5102,7 +5131,7 @@ checksum = "2fdc6cb608e04b7d2b6d1f21e9444ad49245f6d03465ba53323d692d1ceb1a30" dependencies = [ "dunce", "glob", - "objc2-app-kit 0.3.0", + "objc2-app-kit", "objc2-foundation 0.3.0", "open", "schemars", @@ -5118,9 +5147,9 @@ dependencies = [ [[package]] name = "tauri-plugin-shell" -version = "2.2.0" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb2c50a63e60fb8925956cc5b7569f4b750ac197a4d39f13b8dd46ea8e2bad79" +checksum = "69d5eb3368b959937ad2aeaf6ef9a8f5d11e01ffe03629d3530707bbcb27ff5d" dependencies = [ "encoding_rs", "log", @@ -5139,9 +5168,9 @@ dependencies = [ [[package]] name = "tauri-plugin-single-instance" -version = "2.2.2" +version = "2.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25bbc73eed15bba8ad290a52614f2711280df4bf575b36ce78f64367074b90b7" +checksum = "1320af4d866a7fb5f5721d299d14d0dd9e4e6bc0359ff3e263124a2bf6814efa" dependencies = [ "serde", "serde_json", @@ -5155,9 +5184,9 @@ dependencies = [ [[package]] name = "tauri-plugin-updater" -version = "2.6.1" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a31bfcfb4a8318008d2108ccfba439d8263cf48867baabf372cb0e9f24771896" +checksum = "d82da763248e635d60ee4aed56c862290e523acc838d83097171f9a544708387" dependencies = [ "base64 0.22.1", "dirs", @@ -5187,10 +5216,11 @@ dependencies = [ [[package]] name = "tauri-runtime" -version = "2.4.0" +version = "2.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e758a405ab39e25f4d1235c5f06fe563f44b01ee18bbe38ddec5356d4f581908" +checksum = "00ada7ac2f9276f09b8c3afffd3215fd5d9bff23c22df8a7c70e7ef67cacd532" dependencies = [ + "cookie", "dpi", "gtk", "http", @@ -5206,16 +5236,16 @@ dependencies = [ [[package]] name = "tauri-runtime-wry" -version = "2.4.1" +version = "2.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b2beb90decade4c71e8b09c9e4a9245837a8a97693f945b77e32baf13f51fec" +checksum = "cf2e5842c57e154af43a20a49c7efee0ce2578c20b4c2bdf266852b422d2e421" dependencies = [ "gtk", "http", "jni", "log", "objc2 0.6.0", - "objc2-app-kit 0.3.0", + "objc2-app-kit", "objc2-foundation 0.3.0", "once_cell", "percent-encoding", @@ -5233,10 +5263,11 @@ dependencies = [ [[package]] name = "tauri-utils" -version = "2.2.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "107a959dbd5ff53d89a98f6f2e3e987c611334141a43630caae1d80e79446dd6" +checksum = "1f037e66c7638cc0a2213f61566932b9a06882b8346486579c90e4b019bac447" dependencies = [ + "anyhow", "brotli", "cargo_metadata", "ctor", @@ -5280,15 +5311,14 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.17.1" +version = "3.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22e5a0acb1f3f55f65cc4a866c361b2fb2a0ff6366785ae6fbb5f85df07ba230" +checksum = "7437ac7763b9b123ccf33c338a5cc1bac6f69b45a136c19bdd8a65e3916435bf" dependencies = [ - "cfg-if", "fastrand", - "getrandom 0.3.1", + "getrandom 0.3.2", "once_cell", - "rustix 0.38.44", + "rustix 1.0.5", "windows-sys 0.59.0", ] @@ -5344,7 +5374,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -5355,7 +5385,7 @@ checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -5370,9 +5400,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.38" +version = "0.3.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb041120f25f8fbe8fd2dbe4671c7c2ed74d83be2e7a77529bf7e0790ae3f472" +checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" dependencies = [ "deranged", "itoa 1.0.15", @@ -5387,15 +5417,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "765c97a5b985b7c11d7bc27fa927dc4fe6af3a6dfb021d28deb60d3bf51e76ef" +checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" [[package]] name = "time-macros" -version = "0.2.20" +version = "0.2.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8093bc3e81c3bc5f7879de09619d06c9a5a5e45ca44dfeeb7225bae38005c5c" +checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" dependencies = [ "num-conv", "time-core", @@ -5437,9 +5467,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.43.0" +version = "1.44.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d61fa4ffa3de412bfea335c6ecff681de2b609ba3c77ef3e00e521813a9ed9e" +checksum = "e6b88822cbe49de4185e3a4cbf8321dd487cf5fe0c5c65695fef6346371e9c48" dependencies = [ "backtrace", "bytes", @@ -5462,7 +5492,7 @@ checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -5487,9 +5517,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.13" +version = "0.7.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" +checksum = "6b9590b93e6fcc1739458317cccd391ad3955e2bde8913edf6f95f9e65a8f034" dependencies = [ "bytes", "futures-core", @@ -5525,7 +5555,7 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.7.1", + "indexmap 2.9.0", "toml_datetime", "winnow 0.5.40", ] @@ -5536,7 +5566,7 @@ version = "0.20.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81" dependencies = [ - "indexmap 2.7.1", + "indexmap 2.9.0", "toml_datetime", "winnow 0.5.40", ] @@ -5547,11 +5577,11 @@ version = "0.22.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "17b4795ff5edd201c7cd6dca065ae59972ce77d1b80fa0a84d94950ece7d1474" dependencies = [ - "indexmap 2.7.1", + "indexmap 2.9.0", "serde", "serde_spanned", "toml_datetime", - "winnow 0.7.3", + "winnow 0.7.6", ] [[package]] @@ -5600,7 +5630,7 @@ checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -5645,7 +5675,7 @@ dependencies = [ "libappindicator", "muda", "objc2 0.6.0", - "objc2-app-kit 0.3.0", + "objc2-app-kit", "objc2-core-foundation", "objc2-core-graphics", "objc2-foundation 0.3.0", @@ -5818,11 +5848,11 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.15.1" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0f540e3240398cce6128b64ba83fdbdd86129c16a3aa1a3a252efd66eb3d587" +checksum = "458f7a779bf54acc9f347480ac654f68407d3aab21269a6e3c9f922acd9e2da9" dependencies = [ - "getrandom 0.3.1", + "getrandom 0.3.2", "serde", ] @@ -5834,9 +5864,9 @@ checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" [[package]] name = "value-bag" -version = "1.10.0" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ef4c4aa54d5d05a279399bfa921ec387b7aba77caf7a682ae8d86785b8fdad2" +checksum = "943ce29a8a743eb10d6082545d861b24f9d1b160b7d741e0f2cdf726bec909c5" [[package]] name = "vcpkg" @@ -5915,9 +5945,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasi" -version = "0.13.3+wasi-0.2.2" +version = "0.14.2+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26816d2e1a4a36a2940b96c5296ce403917633dff8f3440e9b236ed6f6bacad2" +checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" dependencies = [ "wit-bindgen-rt", ] @@ -5944,7 +5974,7 @@ dependencies = [ "log", "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", "wasm-bindgen-shared", ] @@ -5979,7 +6009,7 @@ checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -6006,66 +6036,6 @@ dependencies = [ "web-sys", ] -[[package]] -name = "wayland-backend" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7208998eaa3870dad37ec8836979581506e0c5c64c20c9e79e9d2a10d6f47bf" -dependencies = [ - "cc", - "downcast-rs", - "rustix 0.38.44", - "scoped-tls", - "smallvec", - "wayland-sys", -] - -[[package]] -name = "wayland-client" -version = "0.31.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2120de3d33638aaef5b9f4472bff75f07c56379cf76ea320bd3a3d65ecaf73f" -dependencies = [ - "bitflags 2.9.0", - "rustix 0.38.44", - "wayland-backend", - "wayland-scanner", -] - -[[package]] -name = "wayland-protocols" -version = "0.32.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0781cf46869b37e36928f7b432273c0995aa8aed9552c556fb18754420541efc" -dependencies = [ - "bitflags 2.9.0", - "wayland-backend", - "wayland-client", - "wayland-scanner", -] - -[[package]] -name = "wayland-scanner" -version = "0.31.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "896fdafd5d28145fce7958917d69f2fd44469b1d4e861cb5961bcbeebc6d1484" -dependencies = [ - "proc-macro2", - "quick-xml 0.37.2", - "quote", -] - -[[package]] -name = "wayland-sys" -version = "0.31.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbcebb399c77d5aa9fa5db874806ee7b4eba4e73650948e8f93963f128896615" -dependencies = [ - "dlib", - "log", - "pkg-config", -] - [[package]] name = "web-sys" version = "0.3.77" @@ -6149,7 +6119,7 @@ dependencies = [ "webview2-com-sys", "windows", "windows-core 0.60.1", - "windows-implement", + "windows-implement 0.59.0", "windows-interface", ] @@ -6161,7 +6131,7 @@ checksum = "1d228f15bba3b9d56dde8bddbee66fa24545bd17b48d5128ccf4a8742b18e431" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -6213,7 +6183,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9bec5a31f3f9362f2258fd0e9c9dd61a9ca432e7306cc78c444258f0dce9a9c" dependencies = [ "objc2 0.6.0", - "objc2-app-kit 0.3.0", + "objc2-app-kit", "objc2-core-foundation", "objc2-foundation 0.3.0", "raw-window-handle", @@ -6243,28 +6213,32 @@ dependencies = [ "windows-core 0.60.1", ] -[[package]] -name = "windows-core" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" -dependencies = [ - "windows-targets 0.52.6", -] - [[package]] name = "windows-core" version = "0.60.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ca21a92a9cae9bf4ccae5cf8368dce0837100ddf6e6d57936749e85f152f6247" dependencies = [ - "windows-implement", + "windows-implement 0.59.0", "windows-interface", "windows-link", - "windows-result 0.3.1", + "windows-result", "windows-strings 0.3.1", ] +[[package]] +name = "windows-core" +version = "0.61.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4763c1de310c86d75a878046489e2e5ba02c649d185f21c67d4cf8a56d098980" +dependencies = [ + "windows-implement 0.60.0", + "windows-interface", + "windows-link", + "windows-result", + "windows-strings 0.4.0", +] + [[package]] name = "windows-future" version = "0.1.1" @@ -6283,25 +6257,36 @@ checksum = "83577b051e2f49a058c308f17f273b570a6a758386fc291b5f6a934dd84e48c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", +] + +[[package]] +name = "windows-implement" +version = "0.60.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", ] [[package]] name = "windows-interface" -version = "0.59.0" +version = "0.59.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb26fd936d991781ea39e87c3a27285081e3c0da5ca0fcbc02d368cc6f52ff01" +checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] name = "windows-link" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dccfd733ce2b1753b03b6d3c65edf020262ea35e20ccdf3e288043e6dd620e3" +checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38" [[package]] name = "windows-numerics" @@ -6315,61 +6300,33 @@ dependencies = [ [[package]] name = "windows-registry" -version = "0.2.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" +checksum = "4286ad90ddb45071efd1a66dfa43eb02dd0dfbae1545ad6cc3c51cf34d7e8ba3" dependencies = [ - "windows-result 0.2.0", - "windows-strings 0.1.0", - "windows-targets 0.52.6", + "windows-result", + "windows-strings 0.3.1", + "windows-targets 0.53.0", ] [[package]] name = "windows-registry" -version = "0.3.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bafa604f2104cf5ae2cc2db1dee84b7e6a5d11b05f737b60def0ffdc398cbc0a" -dependencies = [ - "windows-result 0.2.0", - "windows-strings 0.2.0", - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-result" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" -dependencies = [ - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-result" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06374efe858fab7e4f881500e6e86ec8bc28f9462c47e5a9941a0142ad86b189" +checksum = "ad1da3e436dc7653dfdf3da67332e22bff09bb0e28b0239e1624499c7830842e" dependencies = [ "windows-link", + "windows-result", + "windows-strings 0.4.0", ] [[package]] -name = "windows-strings" -version = "0.1.0" +name = "windows-result" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" +checksum = "c64fd11a4fd95df68efcfee5f44a294fe71b8bc6a91993e2791938abcc712252" dependencies = [ - "windows-result 0.2.0", - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-strings" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978d65aedf914c664c510d9de43c8fd85ca745eaff1ed53edf409b479e441663" -dependencies = [ - "windows-targets 0.52.6", + "windows-link", ] [[package]] @@ -6381,6 +6338,15 @@ dependencies = [ "windows-link", ] +[[package]] +name = "windows-strings" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a2ba9642430ee452d5a7aa78d72907ebe8cfda358e8cb7918a2050581322f97" +dependencies = [ + "windows-link", +] + [[package]] name = "windows-sys" version = "0.45.0" @@ -6456,7 +6422,7 @@ dependencies = [ "windows_aarch64_gnullvm 0.52.6", "windows_aarch64_msvc 0.52.6", "windows_i686_gnu 0.52.6", - "windows_i686_gnullvm", + "windows_i686_gnullvm 0.52.6", "windows_i686_msvc 0.52.6", "windows_x86_64_gnu 0.52.6", "windows_x86_64_gnullvm 0.52.6", @@ -6464,10 +6430,26 @@ dependencies = [ ] [[package]] -name = "windows-version" -version = "0.1.3" +name = "windows-targets" +version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bfbcc4996dd183ff1376a20ade1242da0d2dcaff83cc76710a588d24fd4c5db" +checksum = "b1e4c7e8ceaaf9cb7d7507c974735728ab453b67ef8f18febdd7c11fe59dca8b" +dependencies = [ + "windows_aarch64_gnullvm 0.53.0", + "windows_aarch64_msvc 0.53.0", + "windows_i686_gnu 0.53.0", + "windows_i686_gnullvm 0.53.0", + "windows_i686_msvc 0.53.0", + "windows_x86_64_gnu 0.53.0", + "windows_x86_64_gnullvm 0.53.0", + "windows_x86_64_msvc 0.53.0", +] + +[[package]] +name = "windows-version" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e04a5c6627e310a23ad2358483286c7df260c964eb2d003d8efd6d0f4e79265c" dependencies = [ "windows-link", ] @@ -6490,6 +6472,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" + [[package]] name = "windows_aarch64_msvc" version = "0.42.2" @@ -6508,6 +6496,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" +[[package]] +name = "windows_aarch64_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" + [[package]] name = "windows_i686_gnu" version = "0.42.2" @@ -6526,12 +6520,24 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" +[[package]] +name = "windows_i686_gnu" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" + [[package]] name = "windows_i686_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" +[[package]] +name = "windows_i686_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" + [[package]] name = "windows_i686_msvc" version = "0.42.2" @@ -6550,6 +6556,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" +[[package]] +name = "windows_i686_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" + [[package]] name = "windows_x86_64_gnu" version = "0.42.2" @@ -6568,6 +6580,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" +[[package]] +name = "windows_x86_64_gnu" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" + [[package]] name = "windows_x86_64_gnullvm" version = "0.42.2" @@ -6586,6 +6604,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" + [[package]] name = "windows_x86_64_msvc" version = "0.42.2" @@ -6604,6 +6628,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" +[[package]] +name = "windows_x86_64_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" + [[package]] name = "winnow" version = "0.5.40" @@ -6615,9 +6645,9 @@ dependencies = [ [[package]] name = "winnow" -version = "0.7.3" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e7f4ea97f6f78012141bcdb6a216b2609f0979ada50b20ca5b52dde2eac2bb1" +checksum = "63d3fcd9bba44b03821e7d699eeee959f3126dcc4aa8e4ae18ec617c2a5cea10" dependencies = [ "memchr", ] @@ -6646,9 +6676,9 @@ checksum = "a096fc628cb2c601e13c401ca0c354806424a7f5716000d69b76044eb8e624b9" [[package]] name = "wit-bindgen-rt" -version = "0.33.0" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c" +checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" dependencies = [ "bitflags 2.9.0", ] @@ -6667,9 +6697,9 @@ checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" [[package]] name = "wry" -version = "0.50.3" +version = "0.50.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2ec139df5102db821f92a42033c3fa0467c5ab434511e79c65881d6bdf2b369" +checksum = "b19b78efae8b853c6c817e8752fc1dbf9cab8a8ffe9c30f399bd750ccf0f0730" dependencies = [ "base64 0.22.1", "block2 0.6.0", @@ -6687,7 +6717,7 @@ dependencies = [ "libc", "ndk", "objc2 0.6.0", - "objc2-app-kit 0.3.0", + "objc2-app-kit", "objc2-core-foundation", "objc2-foundation 0.3.0", "objc2-ui-kit", @@ -6737,7 +6767,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0d65cbf2f12c15564212d48f4e3dfb87923d25d611f2aed18f4cb23f0413d89e" dependencies = [ "libc", - "rustix 1.0.3", + "rustix 1.0.5", ] [[package]] @@ -6751,10 +6781,19 @@ dependencies = [ ] [[package]] -name = "yaml-rust2" -version = "0.10.0" +name = "xz2" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "232bdb534d65520716bef0bbb205ff8f2db72d807b19c0bc3020853b92a0cd4b" +checksum = "388c44dc09d76f1536602ead6d325eb532f5c122f17782bd57fb47baeeb767e2" +dependencies = [ + "lzma-sys", +] + +[[package]] +name = "yaml-rust2" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "818913695e83ece1f8d2a1c52d54484b7b46d0f9c06beeb2649b9da50d9b512d" dependencies = [ "arraydeque", "encoding_rs", @@ -6781,7 +6820,7 @@ checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", "synstructure", ] @@ -6815,7 +6854,7 @@ dependencies = [ "tracing", "uds_windows", "windows-sys 0.59.0", - "winnow 0.7.3", + "winnow 0.7.6", "xdg-home", "zbus_macros", "zbus_names", @@ -6828,10 +6867,10 @@ version = "5.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f325ad10eb0d0a3eb060203494c3b7ec3162a01a59db75d2deee100339709fc0" dependencies = [ - "proc-macro-crate 3.2.0", + "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", "zbus_names", "zvariant", "zvariant_utils", @@ -6845,29 +6884,28 @@ checksum = "7be68e64bf6ce8db94f63e72f0c7eb9a60d733f7e0499e628dfab0f84d6bcb97" dependencies = [ "serde", "static_assertions", - "winnow 0.7.3", + "winnow 0.7.6", "zvariant", ] [[package]] name = "zerocopy" -version = "0.7.35" +version = "0.8.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +checksum = "2586fea28e186957ef732a5f8b3be2da217d65c5969d4b1e17f973ebbe876879" dependencies = [ - "byteorder", "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.35" +version = "0.8.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +checksum = "a996a8f63c5c4448cd959ac1bab0aaa3306ccfd060472f85943ee0750f0169be" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -6887,7 +6925,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", "synstructure", ] @@ -6908,7 +6946,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -6930,14 +6968,14 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] name = "zip" -version = "2.2.3" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b280484c454e74e5fff658bbf7df8fdbe7a07c6b2de4a53def232c15ef138f3a" +checksum = "1dcb24d0152526ae49b9b96c1dcf71850ca1e0b882e4e28ed898a93c41334744" dependencies = [ "aes", "arbitrary", @@ -6946,17 +6984,16 @@ dependencies = [ "crc32fast", "crossbeam-utils", "deflate64", - "displaydoc", "flate2", + "getrandom 0.3.2", "hmac", - "indexmap 2.7.1", + "indexmap 2.9.0", "lzma-rs", "memchr", "pbkdf2", - "rand 0.8.5", "sha1", - "thiserror 2.0.12", "time", + "xz2", "zeroize", "zopfli", "zstd", @@ -6987,18 +7024,18 @@ dependencies = [ [[package]] name = "zstd-safe" -version = "7.2.3" +version = "7.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3051792fbdc2e1e143244dc28c60f73d8470e93f3f9cbd0ead44da5ed802722" +checksum = "8f49c4d5f0abb602a93fb8736af2a4f4dd9512e36f7f570d66e65ff867ed3b9d" dependencies = [ "zstd-sys", ] [[package]] name = "zstd-sys" -version = "2.0.14+zstd.1.5.7" +version = "2.0.15+zstd.1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fb060d4926e4ac3a3ad15d864e99ceb5f343c6b34f5bd6d81ae6ed417311be5" +checksum = "eb81183ddd97d0c74cedf1d50d85c8d08c1b8b68ee863bdee9e706eedba1a237" dependencies = [ "cc", "pkg-config", @@ -7015,7 +7052,7 @@ dependencies = [ "serde", "static_assertions", "url", - "winnow 0.7.3", + "winnow 0.7.6", "zvariant_derive", "zvariant_utils", ] @@ -7026,10 +7063,10 @@ version = "5.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74170caa85b8b84cc4935f2d56a57c7a15ea6185ccdd7eadb57e6edd90f94b2f" dependencies = [ - "proc-macro-crate 3.2.0", + "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", "zvariant_utils", ] @@ -7043,6 +7080,6 @@ dependencies = [ "quote", "serde", "static_assertions", - "syn 2.0.99", - "winnow 0.7.3", + "syn 2.0.100", + "winnow 0.7.6", ] diff --git a/rust/Cargo.toml b/rust/Cargo.toml index 47dae6d..425ac32 100644 --- a/rust/Cargo.toml +++ b/rust/Cargo.toml @@ -42,6 +42,7 @@ junction = "1.2.0" tauri-plugin-fs = "2" yaml-rust2 = "0.10.0" enumflags2 = { version = "0.7.11", features = ["serde"] } +sha256 = "1.6.0" [target.'cfg(not(any(target_os = "android", target_os = "ios")))'.dependencies] tauri-plugin-cli = "2" diff --git a/rust/src/appdata.rs b/rust/src/appdata.rs index b9ec149..a265db7 100644 --- a/rust/src/appdata.rs +++ b/rust/src/appdata.rs @@ -1,5 +1,6 @@ use std::hash::{DefaultHasher, Hash, Hasher}; use crate::model::config::GlobalConfig; +use crate::model::patch::PatchFileVec; use crate::pkg::{Feature, Status}; use crate::profiles::Profile; use crate::{model::misc::Game, pkg::PkgKey}; @@ -17,6 +18,7 @@ pub struct AppData { pub pkgs: PackageStore, pub cfg: GlobalConfig, pub state: GlobalState, + pub patch_set: PatchFileVec, } #[derive(PartialEq, Debug, Copy, Clone)] @@ -37,13 +39,18 @@ impl AppData { None => None }; + let patch_set = PatchFileVec::new(util::config_dir()) + .map_err(|e| log::error!("unable to load patch set: {e}")) + .unwrap_or_default(); + log::debug!("Recent profile: {:?}", profile); AppData { profile: profile, pkgs: PackageStore::new(apph.clone()), cfg, - state: GlobalState { remain_open: true } + state: GlobalState { remain_open: true }, + patch_set } } diff --git a/rust/src/cmd.rs b/rust/src/cmd.rs index 0cd8159..ca131ed 100644 --- a/rust/src/cmd.rs +++ b/rust/src/cmd.rs @@ -7,6 +7,7 @@ use tokio::fs; use tauri::{AppHandle, Manager, State}; use crate::model::config::GlobalConfigField; use crate::model::misc::Game; +use crate::model::patch::Patch; use crate::pkg::{Package, PkgKey}; use crate::pkg_store::{InstallResult, PackageStore}; use crate::profiles::{self, Profile, ProfileData, ProfileMeta, ProfilePaths}; @@ -442,4 +443,15 @@ pub async fn list_directories() -> Result { #[tauri::command] pub async fn file_exists(path: String) -> Result { Ok(std::fs::exists(path).unwrap_or(false)) +} + +#[tauri::command] +pub async fn list_patches(state: State<'_, Mutex>, target: String) -> Result, String> { + log::debug!("invoke: list_patches({})", target); + + let mut appd = state.lock().await; + appd.fix(); + let list = appd.patch_set.find_patches(target).map_err(|e| e.to_string())?; + + Ok(list) } \ No newline at end of file diff --git a/rust/src/lib.rs b/rust/src/lib.rs index 304f7a5..d146335 100644 --- a/rust/src/lib.rs +++ b/rust/src/lib.rs @@ -7,6 +7,7 @@ mod download_handler; mod appdata; mod modules; mod profiles; +mod patcher; use std::sync::OnceLock; use anyhow::anyhow; @@ -208,6 +209,8 @@ pub async fn run(_args: Vec) { cmd::list_platform_capabilities, cmd::list_directories, cmd::file_exists, + + cmd::list_patches ]) .build(tauri::generate_context!()) .expect("error while building tauri application"); diff --git a/rust/src/model/mod.rs b/rust/src/model/mod.rs index 98d9a10..0f461ab 100644 --- a/rust/src/model/mod.rs +++ b/rust/src/model/mod.rs @@ -3,4 +3,4 @@ pub mod misc; pub mod rainy; pub mod profile; pub mod config; -pub mod segatools_base; \ No newline at end of file +pub mod patch; \ No newline at end of file diff --git a/rust/src/model/patch.rs b/rust/src/model/patch.rs new file mode 100644 index 0000000..25bc4bf --- /dev/null +++ b/rust/src/model/patch.rs @@ -0,0 +1,155 @@ +use std::collections::BTreeMap; +use serde::{de, Deserialize, Deserializer, Serialize}; +use serde::ser::{Serializer, SerializeStruct}; +use serde_json::Value; +use anyhow::Result; + +#[derive(Deserialize, Serialize, Clone, Debug)] +pub struct PatchSelection(pub BTreeMap); + +#[derive(Deserialize, Serialize, Clone, Debug)] +pub enum PatchSelectionData { + Enabled, + Number(i8), + Hex(Vec) +} + +#[derive(Default)] +pub struct PatchFileVec(pub Vec); + +#[derive(Deserialize, Serialize, Clone, Debug)] +pub struct PatchFile(pub Vec); + +#[derive(Deserialize, Serialize, Clone, Debug)] +pub struct PatchList { + pub filename: String, + pub version: String, + pub sha256: String, + pub patches: Vec +} + +#[derive(Clone, Debug)] +pub struct Patch { + pub id: String, + pub name: String, + pub tooltip: Option, + pub data: PatchData +} + +#[derive(Deserialize, Serialize, Clone, Debug)] +#[serde(untagged)] +pub enum PatchData { + Normal(NormalPatch), + Number(NumberPatch), +} + +#[derive(Deserialize, Serialize, Clone, Debug)] +pub struct NormalPatch { + pub patches: Vec +} + +#[derive(Deserialize, Serialize, Clone, Debug)] +pub struct NormalPatchField { + pub offset: u64, + pub off: Vec, + pub on: Vec +} + +#[derive(Deserialize, Serialize, Clone, Debug)] +pub struct NumberPatch { + pub offset: u64, + pub size: i64, + pub min: i32, + pub max: i32 +} + +impl Serialize for Patch { + fn serialize(&self, serializer: S) -> Result + where S: Serializer { + let mut state = serializer.serialize_struct("Patch", 7)?; + state.serialize_field("id", &self.id)?; + state.serialize_field("name", &self.name)?; + state.serialize_field("tooltip", &self.tooltip)?; + match &self.data { + PatchData::Normal(patch) => { + state.serialize_field("patches", &patch.patches)?; + } + PatchData::Number(patch) => { + state.serialize_field("type", "number")?; + state.serialize_field("offset", &patch.offset)?; + state.serialize_field("size", &patch.size)?; + state.serialize_field("min", &patch.min)?; + state.serialize_field("max", &patch.max)?; + } + } + state.end() + } +} + +impl<'de> serde::Deserialize<'de> for Patch { + fn deserialize>(d: D) -> Result { + let value = Value::deserialize(d)?; + + let data = Ok(match value.get("type").and_then(Value::as_str) { + Some("number") => PatchData::Number(NumberPatch { + offset: value.get("offset") + .and_then(Value::as_u64) + .ok_or_else(|| de::Error::missing_field("offset"))?, + size: value.get("size") + .and_then(Value::as_i64) + .ok_or_else(|| de::Error::missing_field("size"))?, + min: i32::try_from(value.get("min") + .and_then(Value::as_i64) + .ok_or_else(|| de::Error::missing_field("min"))? + ).map_err(|_| de::Error::missing_field("min"))?, + max: i32::try_from(value.get("min") + .and_then(Value::as_i64) + .ok_or_else(|| de::Error::missing_field("min"))? + ).map_err(|_| de::Error::missing_field("min"))? + }), + None => { + let mut patches = vec![]; + for patch in value.get("patches").and_then(Value::as_array).unwrap() { + let mut off_list: Vec = Vec::new(); + let mut on_list: Vec = Vec::new(); + for off in patch.get("off").and_then(Value::as_array).unwrap() { + off_list.push(u8::try_from( + off.as_u64().ok_or_else(|| de::Error::missing_field("off"))? + ).map_err(|_| de::Error::missing_field("off"))?); + } + for on in patch.get("on").and_then(Value::as_array).unwrap() { + on_list.push(u8::try_from( + on.as_u64().ok_or_else(|| de::Error::missing_field("on"))? + ).map_err(|_| de::Error::missing_field("on"))?); + } + patches.push(NormalPatchField { + offset: patch.get("offset") + .and_then(Value::as_u64) + .ok_or_else(|| de::Error::missing_field("offset"))?, + off: off_list, + on: on_list + }) + } + PatchData::Normal(NormalPatch { + patches + }) + }, + Some(&_) => return Err(de::Error::custom("unsupported type")) + }); + + Ok(Patch { + id: value.get("id") + .and_then(Value::as_str) + .ok_or_else(|| de::Error::missing_field("id"))? + .to_owned(), + name: value.get("name") + .and_then(Value::as_str) + .ok_or_else(|| de::Error::missing_field("name"))? + .to_owned(), + tooltip: value.get("tooltip") + .and_then(Value::as_str) + .and_then(|s| Some(s.to_owned())), + data: data? + }) + } +} \ No newline at end of file diff --git a/rust/src/modules/segatools.rs b/rust/src/modules/segatools.rs index a7c6374..2771d68 100644 --- a/rust/src/modules/segatools.rs +++ b/rust/src/modules/segatools.rs @@ -1,7 +1,7 @@ use std::path::{PathBuf, Path}; use anyhow::{anyhow, Result}; use ini::Ini; -use crate::{model::{misc::Game, profile::{Aime, Segatools}, segatools_base::segatools_base}, profiles::ProfilePaths, util::{self, PathStr}}; +use crate::{model::{misc::Game, profile::{Aime, Segatools}}, profiles::ProfilePaths, util::{self, PathStr}}; use crate::pkg_store::PackageStore; impl Segatools { @@ -66,8 +66,12 @@ impl Segatools { let ini_path = p.config_dir().join("segatools-base.ini"); if !ini_path.exists() { - tokio::fs::write(&ini_path, segatools_base(game)).await - .map_err(|e| anyhow!("Error creating {:?}: {}", ini_path, e))?; + match game { + Game::Ongeki => tokio::fs::write(&ini_path, include_bytes!("../../static/segatools-ongeki.ini")) + .await.map_err(|e| anyhow!("Error creating {:?}: {}", ini_path, e))?, + Game::Chunithm => tokio::fs::write(&ini_path, include_bytes!("../../static/segatools-chunithm.ini")) + .await.map_err(|e| anyhow!("Error creating {:?}: {}", ini_path, e))? + } } if !pfx_dir.exists() { tokio::fs::create_dir(&pfx_dir).await diff --git a/rust/src/patcher.rs b/rust/src/patcher.rs new file mode 100644 index 0000000..28c6d99 --- /dev/null +++ b/rust/src/patcher.rs @@ -0,0 +1,45 @@ +use std::path::Path; + +use anyhow::Result; +use sha256::try_digest; + +use crate::model::patch::{Patch, PatchFile, PatchFileVec}; + +impl PatchFileVec { + pub fn new(config_path: impl AsRef) -> Result { + let path = config_path.as_ref().join("patches"); + if !path.exists() { + std::fs::create_dir(&path)?; + } + std::fs::write(path.join("builtin-chunithm.json5"), include_bytes!("../static/standard-chunithm.json5"))?; + let mut res = Vec::new(); + for f in std::fs::read_dir(path)? { + let f = f?; + let f = f.path(); + res.push( + serde_json5::from_str::(&std::fs::read_to_string(f)?)? + ); + } + Ok(PatchFileVec(res)) + } + + pub fn find_patches(&self, target: impl AsRef) -> Result> { + let checksum = try_digest(target.as_ref())?; + + let mut res = Vec::new(); + for pfile in &self.0 { + for plist in &pfile.0 { + log::debug!("checking {}", plist.sha256); + if plist.sha256 == checksum { + let mut cloned = plist.clone().patches; + res.append(&mut cloned); + } + } + } + + if res.len() == 0 { + log::warn!("no matching patchset for {:?} ({})", target.as_ref(), checksum); + } + Ok(res) + } +} \ No newline at end of file diff --git a/rust/src/pkg.rs b/rust/src/pkg.rs index 1aa503d..659b1ca 100644 --- a/rust/src/pkg.rs +++ b/rust/src/pkg.rs @@ -39,7 +39,7 @@ pub enum Status { } #[bitflags] -#[repr(u8)] +#[repr(u16)] #[derive(Copy, Clone, Debug, PartialEq, Serialize, Deserialize)] pub enum Feature { Mod, @@ -48,6 +48,10 @@ pub enum Feature { Mu3Hook, Mu3IO, ChusanHook, + ChuniIO, + Mempatcher, + GameDLL, + AmdDLL } #[derive(Clone, Serialize, Deserialize)] @@ -224,6 +228,12 @@ impl Package { flags |= Feature::Aime; } else if module == "mu3io" { flags |= Feature::Mu3IO; + } else if module == "chuniio" { + flags |= Feature::ChuniIO; + } else if module == "mempatcher" { + flags |= Feature::Mempatcher; + } else if module == "game-dll" { + flags |= Feature::GameDLL; } } return Status::OK(flags); diff --git a/rust/src/profiles/mod.rs b/rust/src/profiles/mod.rs index 012fb6d..7cfcaf1 100644 --- a/rust/src/profiles/mod.rs +++ b/rust/src/profiles/mod.rs @@ -1,11 +1,11 @@ use serde::{Deserialize, Serialize}; use tauri::AppHandle; -use std::{collections::BTreeSet, path::{Path, PathBuf}}; -use crate::{model::{misc::Game, profile::{Aime, ChunithmKeyboard, Keyboard, Mu3Ini, OngekiKeyboard, ProfileModule}}, modules::package::prepare_packages, pkg::PkgKey, pkg_store::PackageStore, util}; +use std::{collections::{BTreeMap, BTreeSet}, path::{Path, PathBuf}}; +use crate::{model::{misc::Game, patch::PatchSelection, profile::{Aime, ChunithmKeyboard, Keyboard, Mu3Ini, OngekiKeyboard, ProfileModule}}, modules::package::prepare_packages, pkg::PkgKey, pkg_store::PackageStore, util}; use tauri::Emitter; use std::process::Stdio; use crate::model::profile::BepInEx; -use crate::model::{profile::{Display, DisplayMode, Network, Segatools}, segatools_base::segatools_base}; +use crate::model::profile::{Display, DisplayMode, Network, Segatools}; use anyhow::{anyhow, Result}; use std::fs::File; use tokio::process::Command; @@ -57,7 +57,10 @@ pub struct ProfileData { pub mu3_ini: Option, #[serde(skip_serializing_if = "Option::is_none")] - pub keyboard: Option + pub keyboard: Option, + + #[serde(skip_serializing_if = "Option::is_none")] + pub patches: Option, } impl Profile { @@ -83,13 +86,18 @@ impl Profile { } else { Some(Keyboard::Chunithm(ChunithmKeyboard::default())) }, + patches: if meta.game == Game::Chunithm { Some(PatchSelection(BTreeMap::new())) } else { None } }, meta: meta.clone() }; p.save()?; std::fs::create_dir_all(p.config_dir())?; std::fs::create_dir_all(p.data_dir())?; - std::fs::write(p.config_dir().join("segatools-base.ini"), segatools_base(meta.game))?; + + match meta.game { + Game::Ongeki => std::fs::write(p.config_dir().join("segatools-base.ini"), include_bytes!("../../static/segatools-ongeki.ini"))?, + Game::Chunithm => std::fs::write(p.config_dir().join("segatools-base.ini"), include_bytes!("../../static/segatools-chunithm.ini"))?, + }; Ok(p) } @@ -101,11 +109,17 @@ impl Profile { log::debug!("{:?}", data); + // Backwards compat if game == Game::Ongeki && data.keyboard.is_none() { data.keyboard = Some(Keyboard::Ongeki(OngekiKeyboard::default())); } - if game == Game::Chunithm && data.keyboard.is_none() { - data.keyboard = Some(Keyboard::Chunithm(ChunithmKeyboard::default())); + if game == Game::Chunithm { + if data.keyboard.is_none() { + data.keyboard = Some(Keyboard::Chunithm(ChunithmKeyboard::default())); + } + if data.patches.is_none() { + data.patches = Some(PatchSelection(BTreeMap::new())); + } } Ok(Profile { @@ -183,6 +197,10 @@ impl Profile { if self.meta.game.has_module(ProfileModule::Keyboard) && source.keyboard.is_some() { self.data.keyboard = source.keyboard; } + + if self.data.patches.is_some() && source.patches.is_some() { + self.data.patches = source.patches; + } } pub async fn line_up(&self, pkg_hash: String, refresh: bool, _app: AppHandle) -> Result<()> { let info = match &self.data.display { diff --git a/rust/src/model/segatools_base.rs b/rust/static/segatools-chunithm.ini similarity index 71% rename from rust/src/model/segatools_base.rs rename to rust/static/segatools-chunithm.ini index e3d0c96..a29a927 100644 --- a/rust/src/model/segatools_base.rs +++ b/rust/static/segatools-chunithm.ini @@ -1,45 +1,3 @@ -use super::misc::Game; - -pub fn segatools_base(game: Game) -> String { - match game { - Game::Ongeki => -"[vfd] -; Enable VFD emulation. Disable to use a real VFD -; GP1232A02A FUTABA assembly. -enable=1 - -[system] -; Enable ALLS system settings. -enable=1 - -; Enable freeplay mode. This will disable the coin slot and set the game to -; freeplay. Keep in mind that some game modes (e.g. Freedom/Time Modes) will not -; allow you to start a game in freeplay mode. -freeplay=0 - -; LAN Install: Set this to 1 on all machines. -dipsw1=1 - -[gfx] -; Enables the graphics hook. -enable=1 - -[led15093] -; Enable emulation of the 15093-06 controlled lights, which handle the air tower -; RGBs and the rear LED panel (billboard) on the cabinet. -enable=1 - -[led] -; Output billboard LED strip data to a named pipe called \"\\\\.\\pipe\\ongeki_led\" -cabLedOutputPipe=1 -; Output billboard LED strip data to serial -cabLedOutputSerial=0 - -; Output slider LED data to the named pipe -controllerLedOutputPipe=1 -; Output slider LED data to the serial port -controllerLedOutputSerial=0".to_owned(), - Game::Chunithm => " [vfd] ; Enable VFD emulation. Disable to use a real VFD ; GP1232A02A FUTABA assembly. @@ -87,7 +45,7 @@ monitor=0 enable=1 [led] -; Output billboard LED strip data to a named pipe called \"\\\\.\\pipe\\chuni_led\" +; Output billboard LED strip data to a named pipe called "\\.\pipe\chuni_led" cabLedOutputPipe=1 ; Output billboard LED strip data to serial cabLedOutputSerial=0 @@ -105,7 +63,7 @@ controllerLedOutputOpeNITHM=0 ;serialBaud=921600 ; Data output a sequence of bytes, with JVS-like framing. -; Each \"packet\" starts with 0xE0 as a sync. To avoid E0 appearing elsewhere, +; Each "packet" starts with 0xE0 as a sync. To avoid E0 appearing elsewhere, ; 0xD0 is used as an escape character -- if you receive D0 in the output, ignore ; it and use the next sent byte plus one instead. ; @@ -136,7 +94,4 @@ controllerLedOutputOpeNITHM=0 ; Uncomment both of these if you have custom chuniio implementation comprised of two DLLs. ; x86 chuniio to path32, x64 to path64. Both are necessary. ;path32= -;path64= -".to_owned() - } -} \ No newline at end of file +;path64= \ No newline at end of file diff --git a/rust/static/segatools-ongeki.ini b/rust/static/segatools-ongeki.ini new file mode 100644 index 0000000..23cfb06 --- /dev/null +++ b/rust/static/segatools-ongeki.ini @@ -0,0 +1,36 @@ +[vfd] +; Enable VFD emulation. Disable to use a real VFD +; GP1232A02A FUTABA assembly. +enable=1 + +[system] +; Enable ALLS system settings. +enable=1 + +; Enable freeplay mode. This will disable the coin slot and set the game to +; freeplay. Keep in mind that some game modes (e.g. Freedom/Time Modes) will not +; allow you to start a game in freeplay mode. +freeplay=0 + +; LAN Install: Set this to 1 on all machines. +dipsw1=1 + +[gfx] +; Enables the graphics hook. +enable=1 + +[led15093] +; Enable emulation of the 15093-06 controlled lights, which handle the air tower +; RGBs and the rear LED panel (billboard) on the cabinet. +enable=1 + +[led] +; Output billboard LED strip data to a named pipe called \"\\\\.\\pipe\\ongeki_led\" +cabLedOutputPipe=1 +; Output billboard LED strip data to serial +cabLedOutputSerial=0 + +; Output slider LED data to the named pipe +controllerLedOutputPipe=1 +; Output slider LED data to the serial port +controllerLedOutputSerial=0 \ No newline at end of file diff --git a/rust/static/standard-chunithm.json5 b/rust/static/standard-chunithm.json5 new file mode 100644 index 0000000..4dddb19 --- /dev/null +++ b/rust/static/standard-chunithm.json5 @@ -0,0 +1,219 @@ +[ + { + filename: 'chusanApp.exe', + version: '2.30.00', + sha256: 'd624da8a397c2885b3937e7b8bd0de6fc4e8da4beaf5c229569b29bb2847d694', + patches: [ + { + id: 'standard-shared-audio', + name: 'Force shared audio mode, system audio sample rate must be 48000Hz', + tooltip: 'Improves compatibility, but may increase latency', + patches: [ + { + offset: 16181386, + off: [1], + on: [0], + }, + ], + }, + { + id: 'standard-2ch', + name: 'Force 2 channel audio output', + tooltip: 'May cause bass overload', + patches: [ + { + offset: 16181601, + off: [117, 63], + on: [144, 144], + }, + ], + }, + { + id: 'standard-song-timer', + name: 'Disable song select timer', + patches: [ + { + offset: 10766682, + off: [116], + on: [235], + }, + ], + }, + { + id: 'standard-map-timer', + name: 'Map selection timer', + tooltip: 'If set to negative, the timer becomes 968 + value (e.g. 968 + -1 = 967)', + type: 'number', + default: 30, + offset: 10111639, + size: 1, + min: -128, + max: 127, + }, + { + id: 'standard-ticket-timer', + name: 'Ticket selection timer', + tooltip: 'If set to negative, the timer becomes 968 + value (e.g. 968 + -1 = 967)', + type: 'number', + default: 60, + offset: 10060322, + size: 1, + min: -128, + max: 127, + }, + { + id: 'standard-course-timer', + name: 'Course selection timer', + tooltip: 'If set to negative, the timer becomes 968 + value (e.g. 968 + -1 = 967)', + type: 'number', + default: 30, + offset: 10812315, + size: 1, + min: -128, + max: 127, + }, + { + id: 'standard-unlimited-tracks', + name: 'Unlimited maximum tracks', + tooltip: 'Must check to play more than 7 tracks per credit', + patches: [ + { + offset: 7635328, + off: [240], + on: [192], + }, + ], + }, + { + id: 'standard-maximum-tracks', + name: 'Maximum tracks', + type: 'number', + default: 3, + offset: 3768513, + size: 4, + min: 3, + max: 12, + }, + { + id: 'standard-no-encryption', + name: 'No encryption', + tooltip: 'Will also disable TLS', + patches: [ + { + offset: 31812584, + off: [230], + on: [0], + }, + { + offset: 31812588, + off: [230], + on: [0], + }, + ], + }, + { + id: 'standard-no-tls', + name: 'No TLS', + tooltip: 'Title server workaround', + patches: [ + { + offset: 16062679, + off: [128], + on: [0], + }, + ], + }, + { + id: 'standard-head-to-head', + name: 'Patch for head-to-head play', + tooltip: 'Fix infinite sync while trying to connect to head to head play', + patches: [ + { + offset: 6795139, + off: [1], + on: [0], + }, + ], + }, + { + id: 'standard-bypass-1080p', + name: 'Bypass 1080p monitor check', + patches: [ + { + offset: 117951, + off: [ + 129, 188, 36, 184, 2, 0, 0, 128, 7, 0, 0, 117, 31, + 129, 188, 36, 188, 2, 0, 0, 56, 4, 0, 0, 117, 18, + ], + on: [ + 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, + ], + }, + ], + }, + { + id: 'standard-bypass-120hz', + name: 'Bypass 120Hz monitor check', + patches: [ + { + offset: 117937, + off: [133, 192, 116, 63], + on: [235, 48, 235, 46], + }, + ], + }, + { + id: 'standard-force-free-play-text', + name: 'Force FREE PLAY credit text', + tooltip: 'Replaces the credit count with FREE PLAY', + patches: [ + { + offset: 3700132, + off: [60, 1], + on: [56, 192], + }, + ], + }, + ], + }, + { + filename: 'amdaemon.exe', + version: '2.30.00', + sha256: 'd4809220578374865370e31c541ed6e406b854d8c26cfe7464c2c15145113bfd', + patches: [ + { + id: 'standard-localhost', + name: 'Allow 127.0.0.1/localhost as the network server', + patches: [ + { + offset: 0x6e1ca4, + off: [0x31, 0x32, 0x37, 0x2f], + on: [0x30, 0x2f, 0x38, 0x00], + }, + { + offset: 0x3c88c4, + off: [0xff, 0x15, 0xc6, 0x2f, 0x1b, 0x00, 0x8b], + on: [0x33, 0xc0, 0x48, 0x83, 0xc4, 0x28, 0xc3], + }, + ], + }, + { + id: 'standard-credit-freeze', + name: 'Credit freeze', + tooltip: 'Prevents credits from being used. At least one credit must be available to start the game or purchase premium tickets.', + patches: [{ offset: 0x2bafc8, off: [0x28], on: [0x08] }], + }, + { + id: 'standard-openssl-fix', + name: 'OpenSSL SHA crash bug fix', + tooltip: 'Fix crashes on 10th generation and newer Intel CPUs', + patches: [ + { offset: 0x4d4a43, off: [0x48], on: [0x4c] }, + { offset: 0x4d4a4b, off: [0x48], on: [0x49] }, + ], + }, + ], + }, +] diff --git a/src/components/App.vue b/src/components/App.vue index 7abe54b..c54325c 100644 --- a/src/components/App.vue +++ b/src/components/App.vue @@ -15,6 +15,7 @@ import { listen } from '@tauri-apps/api/event'; import ModList from './ModList.vue'; import ModStore from './ModStore.vue'; import OptionList from './OptionList.vue'; +import PatchList from './PatchList.vue'; import ProfileList from './ProfileList.vue'; import StartButton from './StartButton.vue'; import { invoke } from '../invoke'; @@ -55,14 +56,26 @@ onMounted(async () => { } fetch_promise.then(async () => { - await invoke('install_package', { - key: 'segatools-mu3hook', - force: false, - }); - await invoke('install_package', { - key: 'segatools-chusanhook', - force: false, - }); + const promises = []; + promises.push( + invoke('install_package', { + key: 'segatools-mu3hook', + force: false, + }) + ); + promises.push( + invoke('install_package', { + key: 'segatools-chusanhook', + force: false, + }) + ); + promises.push( + invoke('install_package', { + key: 'mempatcher-mempatcher', + force: false, + }) + ); + await Promise.all(promises); }); }); @@ -163,7 +176,10 @@ listen<{ message: string; header: string }>('invoke-error', (event) => {
-
+
@@ -240,13 +256,7 @@ listen<{ message: string; header: string }>('invoke-error', (event) => { - CHUNITHM patches are not implemented yet.
Use - patcher.two-torial.xyz +
diff --git a/src/components/ModTitlecard.vue b/src/components/ModTitlecard.vue index 6726782..1e60cb1 100644 --- a/src/components/ModTitlecard.vue +++ b/src/components/ModTitlecard.vue @@ -62,7 +62,10 @@ const iconSrc = computed(() => { > @@ -73,6 +76,16 @@ const iconSrc = computed(() => { class="pi pi-credit-card ml-1 text-purple-400" > + + @@ -14,7 +15,7 @@ defineProps({
diff --git a/src/components/OptionRow.vue b/src/components/OptionRow.vue index a33961f..6b6ccc4 100644 --- a/src/components/OptionRow.vue +++ b/src/components/OptionRow.vue @@ -9,6 +9,7 @@ const props = defineProps({ title: String, tooltip: String, dangerousTooltip: String, + greytext: String, }); const searched = computed(() => { @@ -38,6 +39,12 @@ const searched = computed(() => { class="pi pi-exclamation-circle ml-2 text-red-500" v-tooltip="dangerousTooltip" > + {{ greytext }}
diff --git a/src/components/PatchEntry.vue b/src/components/PatchEntry.vue new file mode 100644 index 0000000..f724a75 --- /dev/null +++ b/src/components/PatchEntry.vue @@ -0,0 +1,34 @@ + + + diff --git a/src/components/PatchList.vue b/src/components/PatchList.vue new file mode 100644 index 0000000..9376e62 --- /dev/null +++ b/src/components/PatchList.vue @@ -0,0 +1,54 @@ + + + diff --git a/src/types.ts b/src/types.ts index 1cedf4d..4f18439 100644 --- a/src/types.ts +++ b/src/types.ts @@ -30,6 +30,10 @@ export enum Feature { Mu3Hook = 1 << 3, Mu3IO = 1 << 4, ChusanHook = 1 << 5, + ChuniIO = 1 << 6, + Mempatcher = 1 << 7, + GameDLL = 1 << 8, + AmdDLL = 1 << 9, } export type Status = @@ -54,6 +58,9 @@ export interface ProfileData { bepinex: BepInExConfig; mu3_ini: Mu3IniConfig | undefined; keyboard: KeyboardConfig | undefined; + patches: { + [key: string]: 'Enabled' | { Number: number } | { Hex: Int8Array }; + }; } export interface SegatoolsConfig { @@ -149,3 +156,10 @@ export interface Dirs { data_dir: string; cache_dir: string; } + +export interface Patch { + id: string; + name: string; + tooltip: string; + type: undefined | 'number'; +}