aboutsummaryrefslogtreecommitdiff
path: root/src-tauri
diff options
context:
space:
mode:
Diffstat (limited to 'src-tauri')
-rw-r--r--src-tauri/.gitignore7
-rw-r--r--src-tauri/Cargo.lock4060
-rw-r--r--src-tauri/Cargo.toml28
-rw-r--r--src-tauri/bindings/CommitHead.ts4
-rw-r--r--src-tauri/bindings/FlightCoreVersion.ts3
-rw-r--r--src-tauri/bindings/InstallProgress.ts4
-rw-r--r--src-tauri/bindings/InstallState.ts3
-rw-r--r--src-tauri/bindings/InstallType.ts6
-rw-r--r--src-tauri/bindings/NorthstarLaunchOptions.ts3
-rw-r--r--src-tauri/bindings/NorthstarMod.ts6
-rw-r--r--src-tauri/bindings/NorthstarThunderstoreRelease.ts3
-rw-r--r--src-tauri/bindings/NorthstarThunderstoreReleaseWrapper.ts4
-rw-r--r--src-tauri/bindings/Project.ts3
-rw-r--r--src-tauri/bindings/PullRequestType.ts3
-rw-r--r--src-tauri/bindings/PullsApiResponseElement.ts4
-rw-r--r--src-tauri/bindings/ReleaseInfo.ts3
-rw-r--r--src-tauri/bindings/Repo.ts3
-rw-r--r--src-tauri/bindings/Tag.ts3
-rw-r--r--src-tauri/bindings/TagWrapper.ts7
-rw-r--r--src-tauri/bindings/ThunderstoreMod.ts4
-rw-r--r--src-tauri/bindings/ThunderstoreModVersion.ts3
-rw-r--r--src-tauri/capabilities/default.json10
-rw-r--r--src-tauri/icons/128x128.pngbin13206 -> 3512 bytes
-rw-r--r--src-tauri/icons/128x128@2x.pngbin34089 -> 7012 bytes
-rw-r--r--src-tauri/icons/32x32.pngbin2387 -> 974 bytes
-rw-r--r--src-tauri/icons/Square107x107Logo.pngbin10298 -> 2863 bytes
-rw-r--r--src-tauri/icons/Square142x142Logo.pngbin15078 -> 3858 bytes
-rw-r--r--src-tauri/icons/Square150x150Logo.pngbin16193 -> 3966 bytes
-rw-r--r--src-tauri/icons/Square284x284Logo.pngbin39890 -> 7737 bytes
-rw-r--r--src-tauri/icons/Square30x30Logo.pngbin2265 -> 903 bytes
-rw-r--r--src-tauri/icons/Square310x310Logo.pngbin45552 -> 8591 bytes
-rw-r--r--src-tauri/icons/Square44x44Logo.pngbin3760 -> 1299 bytes
-rw-r--r--src-tauri/icons/Square71x71Logo.pngbin6574 -> 2011 bytes
-rw-r--r--src-tauri/icons/Square89x89Logo.pngbin8435 -> 2468 bytes
-rw-r--r--src-tauri/icons/StoreLogo.pngbin4264 -> 1523 bytes
-rw-r--r--src-tauri/icons/icon.icnsbin234809 -> 98451 bytes
-rw-r--r--src-tauri/icons/icon.icobin4286 -> 86642 bytes
-rw-r--r--src-tauri/icons/icon.pngbin97132 -> 14183 bytes
-rw-r--r--src-tauri/src/constants.rs60
-rw-r--r--src-tauri/src/development/mod.rs84
-rw-r--r--src-tauri/src/github/mod.rs312
-rw-r--r--src-tauri/src/github/pull_requests.rs398
-rw-r--r--src-tauri/src/github/release_notes.rs244
-rw-r--r--src-tauri/src/lib.rs14
-rw-r--r--src-tauri/src/main.rs221
-rw-r--r--src-tauri/src/mod_management/legacy.rs213
-rw-r--r--src-tauri/src/mod_management/mod.rs797
-rw-r--r--src-tauri/src/mod_management/plugins.rs26
-rw-r--r--src-tauri/src/northstar/install.rs358
-rw-r--r--src-tauri/src/northstar/mod.rs276
-rw-r--r--src-tauri/src/northstar/profile.rs121
-rw-r--r--src-tauri/src/platform_specific/linux.rs98
-rw-r--r--src-tauri/src/platform_specific/mod.rs50
-rw-r--r--src-tauri/src/platform_specific/windows.rs104
-rw-r--r--src-tauri/src/repair_and_verify/mod.rs137
-rw-r--r--src-tauri/src/thunderstore/mod.rs86
-rw-r--r--src-tauri/src/util.rs324
-rw-r--r--src-tauri/tauri.conf.json87
58 files changed, 2161 insertions, 6023 deletions
diff --git a/src-tauri/.gitignore b/src-tauri/.gitignore
new file mode 100644
index 00000000..b21bd681
--- /dev/null
+++ b/src-tauri/.gitignore
@@ -0,0 +1,7 @@
+# Generated by Cargo
+# will have compiled files and executables
+/target/
+
+# Generated by Tauri
+# will have schema files for capabilities auto-completion
+/gen/schemas
diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock
index bf6d8e3a..1700ce57 100644
--- a/src-tauri/Cargo.lock
+++ b/src-tauri/Cargo.lock
@@ -1,27 +1,27 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
-version = 3
+version = 4
[[package]]
name = "addr2line"
-version = "0.20.0"
+version = "0.24.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f4fa78e18c64fce05e902adecd7a5eed15a5e0a3439f7b0e169f0252214865e3"
+checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1"
dependencies = [
"gimli",
]
[[package]]
-name = "adler"
-version = "1.0.2"
+name = "adler2"
+version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627"
[[package]]
name = "aes"
-version = "0.8.3"
+version = "0.8.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ac1f845298e95f983ff1944b728ae08b8cebab80d684f0a832ed0fc74dfa27e2"
+checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0"
dependencies = [
"cfg-if",
"cipher",
@@ -30,9 +30,9 @@ dependencies = [
[[package]]
name = "aho-corasick"
-version = "1.0.2"
+version = "1.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "43f6cb1bf222025340178f382c426f13757b2960e89779dfcb319c32542a5a41"
+checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916"
dependencies = [
"memchr",
]
@@ -69,128 +69,120 @@ dependencies = [
[[package]]
name = "anyhow"
-version = "1.0.89"
+version = "1.0.95"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "86fdf8605db99b54d3cd748a44c6d04df638eb5dafb219b135d0149bd0db01f6"
+checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04"
[[package]]
-name = "arboard"
-version = "3.2.1"
+name = "arbitrary"
+version = "1.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ac57f2b058a76363e357c056e4f74f1945bf734d37b8b3ef49066c4787dde0fc"
+checksum = "dde20b3d026af13f561bdd0f15edf01fc734f0dafcedbaf42bba506a9517f223"
dependencies = [
- "clipboard-win",
- "core-graphics",
- "image",
- "log",
- "objc",
- "objc-foundation",
- "objc_id",
- "parking_lot",
- "thiserror",
- "winapi",
- "wl-clipboard-rs",
- "x11rb",
+ "derive_arbitrary",
]
[[package]]
name = "arc-swap"
-version = "1.6.0"
+version = "1.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6"
+checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457"
[[package]]
name = "async-broadcast"
-version = "0.5.1"
+version = "0.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7c48ccdbf6ca6b121e0f586cbc0e73ae440e56c67c30fa0873b4e110d9c26d2b"
+checksum = "20cd0e2e25ea8e5f7e9df04578dc6cf5c83577fd09b1a46aaf5c85e1c33f2a7e"
dependencies = [
"event-listener",
+ "event-listener-strategy",
"futures-core",
+ "pin-project-lite",
]
[[package]]
name = "async-channel"
-version = "1.9.0"
+version = "2.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35"
+checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a"
dependencies = [
"concurrent-queue",
- "event-listener",
+ "event-listener-strategy",
"futures-core",
+ "pin-project-lite",
]
[[package]]
name = "async-executor"
-version = "1.5.1"
+version = "1.13.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6fa3dc5f2a8564f07759c008b9109dc0d39de92a88d5588b8a5036d286383afb"
+checksum = "30ca9a001c1e8ba5149f91a74362376cc6bc5b919d92d988668657bd570bdcec"
dependencies = [
- "async-lock",
"async-task",
"concurrent-queue",
- "fastrand 1.9.0",
+ "fastrand",
"futures-lite",
"slab",
]
[[package]]
name = "async-fs"
-version = "1.6.0"
+version = "2.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "279cf904654eeebfa37ac9bb1598880884924aab82e290aa65c9e77a0e142e06"
+checksum = "ebcd09b382f40fcd159c2d695175b2ae620ffa5f3bd6f664131efff4e8b9e04a"
dependencies = [
"async-lock",
- "autocfg",
"blocking",
"futures-lite",
]
[[package]]
name = "async-io"
-version = "1.13.0"
+version = "2.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af"
+checksum = "43a2b323ccce0a1d90b449fd71f2a06ca7faa7c54c2751f06c9bd851fc061059"
dependencies = [
"async-lock",
- "autocfg",
"cfg-if",
"concurrent-queue",
+ "futures-io",
"futures-lite",
- "log",
"parking",
"polling",
- "rustix 0.37.23",
+ "rustix",
"slab",
- "socket2 0.4.9",
- "waker-fn",
+ "tracing",
+ "windows-sys 0.59.0",
]
[[package]]
name = "async-lock"
-version = "2.7.0"
+version = "3.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fa24f727524730b077666307f2734b4a1a1c57acb79193127dcc8914d5242dd7"
+checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18"
dependencies = [
"event-listener",
+ "event-listener-strategy",
+ "pin-project-lite",
]
[[package]]
name = "async-process"
-version = "1.7.0"
+version = "2.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7a9d28b1d97e08915212e2e45310d47854eafa69600756fc735fb788f75199c9"
+checksum = "63255f1dc2381611000436537bbedfe83183faa303a5a0edaf191edef06526bb"
dependencies = [
+ "async-channel",
"async-io",
"async-lock",
- "autocfg",
+ "async-signal",
+ "async-task",
"blocking",
"cfg-if",
"event-listener",
"futures-lite",
- "rustix 0.37.23",
- "signal-hook",
- "windows-sys 0.48.0",
+ "rustix",
+ "tracing",
]
[[package]]
@@ -201,94 +193,105 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.91",
+]
+
+[[package]]
+name = "async-signal"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "637e00349800c0bdf8bfc21ebbc0b6524abea702b0da4168ac00d070d0c0b9f3"
+dependencies = [
+ "async-io",
+ "async-lock",
+ "atomic-waker",
+ "cfg-if",
+ "futures-core",
+ "futures-io",
+ "rustix",
+ "signal-hook-registry",
+ "slab",
+ "windows-sys 0.59.0",
]
[[package]]
name = "async-task"
-version = "4.4.0"
+version = "4.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ecc7ab41815b3c653ccd2978ec3255c81349336702dfdf62ee6f7069b12a3aae"
+checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de"
[[package]]
name = "async-trait"
-version = "0.1.72"
+version = "0.1.83"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cc6dde6e4ed435a4c1ee4e73592f5ba9da2151af10076cc04858746af9352d09"
+checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.91",
]
[[package]]
name = "atk"
-version = "0.15.1"
+version = "0.18.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2c3d816ce6f0e2909a96830d6911c2aff044370b1ef92d7f267b43bae5addedd"
+checksum = "241b621213072e993be4f6f3a9e4b45f65b7e6faad43001be957184b7bb1824b"
dependencies = [
"atk-sys",
- "bitflags 1.3.2",
"glib",
"libc",
]
[[package]]
name = "atk-sys"
-version = "0.15.1"
+version = "0.18.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "58aeb089fb698e06db8089971c7ee317ab9644bade33383f63631437b03aafb6"
+checksum = "c5e48b684b0ca77d2bbadeef17424c2ea3c897d44d566a1617e7e8f30614d086"
dependencies = [
"glib-sys",
"gobject-sys",
"libc",
- "system-deps 6.1.1",
+ "system-deps",
]
[[package]]
name = "atomic-waker"
-version = "1.1.1"
+version = "1.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1181e1e0d1fce796a03db1ae795d67167da795f9cf4a39c37589e85ef57f26d3"
+checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"
[[package]]
name = "autocfg"
-version = "1.1.0"
+version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26"
[[package]]
name = "backtrace"
-version = "0.3.68"
+version = "0.3.74"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4319208da049c43661739c5fade2ba182f09d1dc2299b32298d3a31692b17e12"
+checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a"
dependencies = [
"addr2line",
- "cc",
"cfg-if",
"libc",
"miniz_oxide",
"object",
"rustc-demangle",
+ "windows-targets 0.52.6",
]
[[package]]
name = "base64"
-version = "0.13.1"
+version = "0.21.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
+checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567"
[[package]]
name = "base64"
-version = "0.21.2"
+version = "0.22.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d"
-
-[[package]]
-name = "base64"
-version = "0.22.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9475866fec1451be56a3c2400fd081ff546538961565ccb5b7142cbd22bc7a51"
+checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
[[package]]
name = "base64ct"
@@ -304,9 +307,12 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]]
name = "bitflags"
-version = "2.3.3"
+version = "2.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "630be753d4e58660abd17930c71b647fe46c27ea6b63cc59e1e3851406972e42"
+checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de"
+dependencies = [
+ "serde",
+]
[[package]]
name = "block"
@@ -324,25 +330,32 @@ dependencies = [
]
[[package]]
+name = "block2"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c132eebf10f5cad5289222520a4a058514204aed6d791f1cf4fe8088b82d15f"
+dependencies = [
+ "objc2",
+]
+
+[[package]]
name = "blocking"
-version = "1.3.1"
+version = "1.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "77231a1c8f801696fc0123ec6150ce92cffb8e164a02afb9c8ddee0e9b65ad65"
+checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea"
dependencies = [
"async-channel",
- "async-lock",
"async-task",
- "atomic-waker",
- "fastrand 1.9.0",
+ "futures-io",
"futures-lite",
- "log",
+ "piper",
]
[[package]]
name = "brotli"
-version = "3.3.4"
+version = "7.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a1a0b1dbcc8ae29329621f8d4f0d835787c1c38bb1401979b49d13b0b305ff68"
+checksum = "cc97b8f16f944bba54f0433f07e30be199b6dc2bd25937444bbad560bcea29bd"
dependencies = [
"alloc-no-stdlib",
"alloc-stdlib",
@@ -351,53 +364,37 @@ dependencies = [
[[package]]
name = "brotli-decompressor"
-version = "2.3.4"
+version = "4.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4b6561fd3f895a11e8f72af2cb7d22e08366bebc2b6b57f7744c4bda27034744"
+checksum = "9a45bd2e4095a8b518033b128020dd4a55aab1c0a381ba4404a472630f4bc362"
dependencies = [
"alloc-no-stdlib",
"alloc-stdlib",
]
[[package]]
-name = "bstr"
-version = "1.6.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6798148dccfbff0fae41c7574d2fa8f1ef3492fba0face179de5d8d447d67b05"
-dependencies = [
- "memchr",
- "serde",
-]
-
-[[package]]
name = "bumpalo"
-version = "3.13.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1"
-
-[[package]]
-name = "bytecount"
-version = "0.6.7"
+version = "3.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e1e5f035d16fc623ae5f74981db80a439803888314e3a555fd6f04acd51a3205"
+checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c"
[[package]]
name = "bytemuck"
-version = "1.13.1"
+version = "1.21.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea"
+checksum = "ef657dfab802224e671f5818e9a4935f9b1957ed18e58292690cc39e7a4092a3"
[[package]]
name = "byteorder"
-version = "1.4.3"
+version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
[[package]]
name = "bytes"
-version = "1.4.0"
+version = "1.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be"
+checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b"
dependencies = [
"serde",
]
@@ -425,46 +422,80 @@ dependencies = [
[[package]]
name = "cairo-rs"
-version = "0.15.12"
+version = "0.18.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c76ee391b03d35510d9fa917357c7f1855bd9a6659c95a1b392e33f49b3369bc"
+checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2"
dependencies = [
- "bitflags 1.3.2",
+ "bitflags 2.6.0",
"cairo-sys-rs",
"glib",
"libc",
- "thiserror",
+ "once_cell",
+ "thiserror 1.0.69",
]
[[package]]
name = "cairo-sys-rs"
-version = "0.15.1"
+version = "0.18.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3c55d429bef56ac9172d25fecb85dc8068307d17acd74b377866b7a1ef25d3c8"
+checksum = "685c9fa8e590b8b3d678873528d83411db17242a73fccaed827770ea0fedda51"
dependencies = [
"glib-sys",
"libc",
- "system-deps 6.1.1",
+ "system-deps",
+]
+
+[[package]]
+name = "camino"
+version = "1.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b96ec4966b5813e2c0507c1f86115c8c5abaadc3980879c3424042a02fd1ad3"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "cargo-platform"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "cargo_metadata"
+version = "0.18.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037"
+dependencies = [
+ "camino",
+ "cargo-platform",
+ "semver",
+ "serde",
+ "serde_json",
+ "thiserror 1.0.69",
]
[[package]]
name = "cargo_toml"
-version = "0.15.3"
+version = "0.17.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "599aa35200ffff8f04c1925aa1acc92fa2e08874379ef42e210a80e527e60838"
+checksum = "8a969e13a7589e9e3e4207e153bae624ade2b5622fb4684a4923b23ec3d57719"
dependencies = [
"serde",
- "toml 0.7.6",
+ "toml 0.8.2",
]
[[package]]
name = "cc"
-version = "1.0.83"
+version = "1.2.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
+checksum = "c31a0499c1dc64f458ad13872de75c0eb7e3fdb0e67964610c914b034fc5956e"
dependencies = [
"jobserver",
"libc",
+ "shlex",
]
[[package]]
@@ -486,18 +517,9 @@ dependencies = [
[[package]]
name = "cfg-expr"
-version = "0.9.1"
+version = "0.15.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3431df59f28accaf4cb4eed4a9acc66bea3f3c3753aa6cdc2f024174ef232af7"
-dependencies = [
- "smallvec",
-]
-
-[[package]]
-name = "cfg-expr"
-version = "0.15.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b40ccee03b5175c18cde8f37e7d2a33bcef6f8ec8f7cc0d81090d1bb380949c9"
+checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02"
dependencies = [
"smallvec",
"target-lexicon",
@@ -510,10 +532,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
[[package]]
+name = "cfg_aliases"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724"
+
+[[package]]
name = "chrono"
-version = "0.4.38"
+version = "0.4.39"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401"
+checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825"
dependencies = [
"android-tzdata",
"iana-time-zone",
@@ -521,7 +549,7 @@ dependencies = [
"num-traits",
"serde",
"wasm-bindgen",
- "windows-targets 0.52.0",
+ "windows-targets 0.52.6",
]
[[package]]
@@ -535,58 +563,40 @@ dependencies = [
]
[[package]]
-name = "clipboard-win"
-version = "4.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7191c27c2357d9b7ef96baac1773290d4ca63b24205b82a3fd8a0637afcf0362"
-dependencies = [
- "error-code",
- "str-buf",
- "winapi",
-]
-
-[[package]]
name = "cocoa"
-version = "0.24.1"
+version = "0.26.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f425db7937052c684daec3bd6375c8abe2d146dca4b8b143d6db777c39138f3a"
+checksum = "f79398230a6e2c08f5c9760610eb6924b52aa9e7950a619602baba59dcbbdbb2"
dependencies = [
- "bitflags 1.3.2",
+ "bitflags 2.6.0",
"block",
"cocoa-foundation",
- "core-foundation",
+ "core-foundation 0.10.0",
"core-graphics",
- "foreign-types",
+ "foreign-types 0.5.0",
"libc",
"objc",
]
[[package]]
name = "cocoa-foundation"
-version = "0.1.1"
+version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "931d3837c286f56e3c58423ce4eba12d08db2374461a785c86f672b08b5650d6"
+checksum = "e14045fb83be07b5acf1c0884b2180461635b433455fa35d1cd6f17f1450679d"
dependencies = [
- "bitflags 1.3.2",
+ "bitflags 2.6.0",
"block",
- "core-foundation",
+ "core-foundation 0.10.0",
"core-graphics-types",
- "foreign-types",
"libc",
"objc",
]
[[package]]
-name = "color_quant"
-version = "1.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
-
-[[package]]
name = "combine"
-version = "4.6.6"
+version = "4.6.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4"
+checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd"
dependencies = [
"bytes",
"memchr",
@@ -594,27 +604,27 @@ dependencies = [
[[package]]
name = "concurrent-queue"
-version = "2.2.0"
+version = "2.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "62ec6771ecfa0762d24683ee5a32ad78487a3d3afdc0fb8cae19d2c5deb50b7c"
+checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973"
dependencies = [
"crossbeam-utils",
]
[[package]]
name = "const_format"
-version = "0.2.33"
+version = "0.2.34"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "50c655d81ff1114fb0dcdea9225ea9f0cc712a6f8d189378e82bdf62a473a64b"
+checksum = "126f97965c8ad46d6d9163268ff28432e8f6a1196a55578867832e3049df63dd"
dependencies = [
"const_format_proc_macros",
]
[[package]]
name = "const_format_proc_macros"
-version = "0.2.33"
+version = "0.2.34"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eff1a44b93f47b1bac19a27932f5c591e43d1ba357ee4f61526c8a25603f0eb1"
+checksum = "1d57c2eccfb16dbac1f4e61e206105db5820c9d26c3c472bc17c774259ef7744"
dependencies = [
"proc-macro2",
"quote",
@@ -634,10 +644,30 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e"
[[package]]
+name = "cookie"
+version = "0.18.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ddef33a339a91ea89fb53151bd0a4689cfce27055c291dfa69945475d22c747"
+dependencies = [
+ "time",
+ "version_check",
+]
+
+[[package]]
name = "core-foundation"
-version = "0.9.3"
+version = "0.9.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b55271e5c8c478ad3f38ad24ef34923091e0548492a266d19b3c0b4d82574c63"
dependencies = [
"core-foundation-sys",
"libc",
@@ -645,39 +675,39 @@ dependencies = [
[[package]]
name = "core-foundation-sys"
-version = "0.8.4"
+version = "0.8.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
+checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
[[package]]
name = "core-graphics"
-version = "0.22.3"
+version = "0.24.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb"
+checksum = "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1"
dependencies = [
- "bitflags 1.3.2",
- "core-foundation",
+ "bitflags 2.6.0",
+ "core-foundation 0.10.0",
"core-graphics-types",
- "foreign-types",
+ "foreign-types 0.5.0",
"libc",
]
[[package]]
name = "core-graphics-types"
-version = "0.1.2"
+version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2bb142d41022986c1d8ff29103a1411c8a3dfad3552f87a4f8dc50d61d4f4e33"
+checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb"
dependencies = [
- "bitflags 1.3.2",
- "core-foundation",
+ "bitflags 2.6.0",
+ "core-foundation 0.10.0",
"libc",
]
[[package]]
name = "cpufeatures"
-version = "0.2.9"
+version = "0.2.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1"
+checksum = "16b80225097f2e5ae4e7179dd2266824648f3e2f49d9134d584b76389d31c4c3"
dependencies = [
"libc",
]
@@ -699,55 +729,46 @@ checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5"
[[package]]
name = "crc32fast"
-version = "1.3.2"
+version = "1.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3"
dependencies = [
"cfg-if",
]
[[package]]
name = "crossbeam-channel"
-version = "0.5.8"
+version = "0.5.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200"
+checksum = "06ba6d68e24814cb8de6bb986db8222d3a027d15872cabc0d18817bc3c0e4471"
dependencies = [
- "cfg-if",
"crossbeam-utils",
]
[[package]]
name = "crossbeam-deque"
-version = "0.8.3"
+version = "0.8.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
+checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51"
dependencies = [
- "cfg-if",
"crossbeam-epoch",
"crossbeam-utils",
]
[[package]]
name = "crossbeam-epoch"
-version = "0.9.15"
+version = "0.9.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7"
+checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e"
dependencies = [
- "autocfg",
- "cfg-if",
"crossbeam-utils",
- "memoffset 0.9.0",
- "scopeguard",
]
[[package]]
name = "crossbeam-utils"
-version = "0.8.16"
+version = "0.8.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294"
-dependencies = [
- "cfg-if",
-]
+checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
[[package]]
name = "crypto-common"
@@ -783,24 +804,24 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331"
dependencies = [
"quote",
- "syn 2.0.90",
+ "syn 2.0.91",
]
[[package]]
name = "ctor"
-version = "0.2.6"
+version = "0.2.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "30d2b3721e861707777e3195b0158f950ae6dc4a27e4d02ff9f67e3eb3de199e"
+checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501"
dependencies = [
"quote",
- "syn 2.0.90",
+ "syn 2.0.91",
]
[[package]]
name = "darling"
-version = "0.20.3"
+version = "0.20.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0209d94da627ab5605dcccf08bb18afa5009cfbef48d8a8b7d7bdbc79be25c5e"
+checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989"
dependencies = [
"darling_core",
"darling_macro",
@@ -808,27 +829,27 @@ dependencies = [
[[package]]
name = "darling_core"
-version = "0.20.3"
+version = "0.20.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "177e3443818124b357d8e76f53be906d60937f0d3a90773a664fa63fa253e621"
+checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5"
dependencies = [
"fnv",
"ident_case",
"proc-macro2",
"quote",
"strsim",
- "syn 2.0.90",
+ "syn 2.0.91",
]
[[package]]
name = "darling_macro"
-version = "0.20.3"
+version = "0.20.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5"
+checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806"
dependencies = [
"darling_core",
"quote",
- "syn 2.0.90",
+ "syn 2.0.91",
]
[[package]]
@@ -863,27 +884,27 @@ dependencies = [
]
[[package]]
-name = "derive-new"
-version = "0.5.9"
+name = "derive_arbitrary"
+version = "1.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3418329ca0ad70234b9735dc4ceed10af4df60eff9c8e7b06cb5e520d92c3535"
+checksum = "30542c1ad912e0e3d22a1935c290e12e8a29d704a420177a31faad4a601a0800"
dependencies = [
"proc-macro2",
"quote",
- "syn 1.0.109",
+ "syn 2.0.91",
]
[[package]]
name = "derive_more"
-version = "0.99.17"
+version = "0.99.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321"
+checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce"
dependencies = [
"convert_case",
"proc-macro2",
"quote",
"rustc_version",
- "syn 1.0.109",
+ "syn 2.0.91",
]
[[package]]
@@ -907,16 +928,6 @@ dependencies = [
]
[[package]]
-name = "dirs-next"
-version = "2.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1"
-dependencies = [
- "cfg-if",
- "dirs-sys-next",
-]
-
-[[package]]
name = "dirs-sys"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -929,27 +940,53 @@ dependencies = [
]
[[package]]
-name = "dirs-sys-next"
-version = "0.1.2"
+name = "dispatch"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b"
+
+[[package]]
+name = "displaydoc"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.91",
+]
+
+[[package]]
+name = "dlopen2"
+version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d"
+checksum = "9e1297103d2bbaea85724fcee6294c2d50b1081f9ad47d0f6f6f61eda65315a6"
dependencies = [
+ "dlopen2_derive",
"libc",
- "redox_users",
+ "once_cell",
"winapi",
]
[[package]]
-name = "dispatch"
-version = "0.2.0"
+name = "dlopen2_derive"
+version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b"
+checksum = "f2b99bf03862d7f545ebc28ddd33a665b50865f4dfd84031a393823879bd4c54"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.91",
+]
[[package]]
-name = "downcast-rs"
-version = "1.2.0"
+name = "dpi"
+version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650"
+checksum = "f25c0e292a7ca6d6498557ff1df68f32c99850012b6ea401cf8daf771f22ff53"
+dependencies = [
+ "serde",
+]
[[package]]
name = "dtoa"
@@ -959,36 +996,43 @@ checksum = "dcbb2bf8e87535c23f7a8a321e364ce21462d0ff10cb6407820e8e96dfff6653"
[[package]]
name = "dtoa-short"
-version = "0.3.4"
+version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dbaceec3c6e4211c79e7b1800fb9680527106beb2f9c51904a3210c03a448c74"
+checksum = "cd1511a7b6a56299bd043a9c167a6d2bfb37bf84a6dfceaba651168adfb43c87"
dependencies = [
"dtoa",
]
[[package]]
name = "dunce"
-version = "1.0.4"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813"
+
+[[package]]
+name = "dyn-clone"
+version = "1.0.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b"
+checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125"
[[package]]
name = "either"
-version = "1.9.0"
+version = "1.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
+checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0"
[[package]]
name = "embed-resource"
-version = "2.2.0"
+version = "2.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f7f1e82a60222fc67bfd50d752a9c89da5cce4c39ed39decc84a443b07bbd69a"
+checksum = "b68b6f9f63a0b6a38bc447d4ce84e2b388f3ec95c99c641c8ff0dd3ef89a6379"
dependencies = [
"cc",
+ "memchr",
"rustc_version",
- "toml 0.7.6",
+ "toml 0.8.2",
"vswhom",
- "winreg 0.11.0",
+ "winreg 0.52.0",
]
[[package]]
@@ -999,18 +1043,24 @@ checksum = "4ef6b89e5b37196644d8796de5268852ff179b44e96276cf4290264843743bb7"
[[package]]
name = "encoding_rs"
-version = "0.8.32"
+version = "0.8.35"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394"
+checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3"
dependencies = [
"cfg-if",
]
[[package]]
+name = "endi"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3d8a32ae18130a3c84dd492d4215c3d913c3b07c6b63c2eb3eb7ff1101ab7bf"
+
+[[package]]
name = "enumflags2"
-version = "0.7.7"
+version = "0.7.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c041f5090df68b32bcd905365fd51769c8b9d553fe87fde0b683534f10c01bd2"
+checksum = "d232db7f5956f3f14313dc2f87985c58bd2c695ce124c8cdd984e08e15ac133d"
dependencies = [
"enumflags2_derive",
"serde",
@@ -1018,20 +1068,20 @@ dependencies = [
[[package]]
name = "enumflags2_derive"
-version = "0.7.7"
+version = "0.7.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5e9a1f9f7d83e59740248a6e14ecf93929ade55027844dfcea78beafccc15745"
+checksum = "de0d48a183585823424a4ce1aa132d174a6a81bd540895822eb4c8373a8e49e8"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.91",
]
[[package]]
name = "env_logger"
-version = "0.10.0"
+version = "0.10.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0"
+checksum = "4cd405aab171cb85d6735e5c8d9db038c17d3ca007a4d2c25f337935c3d90580"
dependencies = [
"humantime",
"is-terminal",
@@ -1047,62 +1097,57 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
[[package]]
-name = "errno"
-version = "0.3.2"
+name = "erased-serde"
+version = "0.4.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6b30f669a7961ef1631673d2766cc92f52d64f7ef354d4fe0ddfd30ed52f0f4f"
+checksum = "24e2389d65ab4fab27dc2a5de7b191e1f6617d1f1c8855c0dc569c94a4cbb18d"
dependencies = [
- "errno-dragonfly",
- "libc",
- "windows-sys 0.48.0",
+ "serde",
+ "typeid",
]
[[package]]
-name = "errno-dragonfly"
-version = "0.1.2"
+name = "errno"
+version = "0.3.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d"
dependencies = [
- "cc",
"libc",
+ "windows-sys 0.59.0",
]
[[package]]
-name = "error-code"
-version = "2.3.1"
+name = "event-listener"
+version = "5.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "64f18991e7bf11e7ffee451b5318b5c1a73c52d0d0ada6e5a3017c8c1ced6a21"
+checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba"
dependencies = [
- "libc",
- "str-buf",
+ "concurrent-queue",
+ "parking",
+ "pin-project-lite",
]
[[package]]
-name = "event-listener"
-version = "2.5.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0"
-
-[[package]]
-name = "fastrand"
-version = "1.9.0"
+name = "event-listener-strategy"
+version = "0.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
+checksum = "3c3e4e0dd3673c1139bf041f3008816d9cf2946bbfac2945c09e523b8d7b05b2"
dependencies = [
- "instant",
+ "event-listener",
+ "pin-project-lite",
]
[[package]]
name = "fastrand"
-version = "2.0.0"
+version = "2.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6999dc1837253364c2ebb0704ba97994bd874e8f195d665c50b7548f6ea92764"
+checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be"
[[package]]
name = "fdeflate"
-version = "0.3.0"
+version = "0.3.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d329bdeac514ee06249dabc27877490f17f5d371ec693360768b838e19f3ae10"
+checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c"
dependencies = [
"simd-adler32",
]
@@ -1113,20 +1158,20 @@ version = "0.3.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f"
dependencies = [
- "memoffset 0.9.0",
+ "memoffset",
"rustc_version",
]
[[package]]
name = "filetime"
-version = "0.2.21"
+version = "0.2.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5cbc844cecaee9d4443931972e1289c8ff485cb4cc2767cb03ca139ed6885153"
+checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586"
dependencies = [
"cfg-if",
"libc",
- "redox_syscall 0.2.16",
- "windows-sys 0.48.0",
+ "libredox",
+ "windows-sys 0.59.0",
]
[[package]]
@@ -1142,16 +1187,10 @@ dependencies = [
]
[[package]]
-name = "fixedbitset"
-version = "0.4.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80"
-
-[[package]]
name = "flate2"
-version = "1.0.26"
+version = "1.0.35"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743"
+checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c"
dependencies = [
"crc32fast",
"miniz_oxide",
@@ -1171,7 +1210,7 @@ dependencies = [
"libthermite",
"log",
"octocrab",
- "open 5.3.0",
+ "open",
"pretty_env_logger",
"rand 0.8.5",
"regex",
@@ -1186,12 +1225,12 @@ dependencies = [
"sysinfo",
"tauri",
"tauri-build",
- "tauri-plugin-store",
+ "tauri-plugin-opener",
"tokio",
"ts-rs",
"winapi",
"winreg 0.52.0",
- "zip",
+ "zip 0.6.6",
"zip-extract",
]
@@ -1207,7 +1246,28 @@ version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
dependencies = [
- "foreign-types-shared",
+ "foreign-types-shared 0.1.1",
+]
+
+[[package]]
+name = "foreign-types"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965"
+dependencies = [
+ "foreign-types-macros",
+ "foreign-types-shared 0.3.1",
+]
+
+[[package]]
+name = "foreign-types-macros"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.91",
]
[[package]]
@@ -1217,10 +1277,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
[[package]]
+name = "foreign-types-shared"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b"
+
+[[package]]
name = "form_urlencoded"
-version = "1.2.0"
+version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652"
+checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456"
dependencies = [
"percent-encoding",
]
@@ -1237,9 +1303,9 @@ dependencies = [
[[package]]
name = "futures"
-version = "0.3.28"
+version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40"
+checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876"
dependencies = [
"futures-channel",
"futures-core",
@@ -1252,9 +1318,9 @@ dependencies = [
[[package]]
name = "futures-channel"
-version = "0.3.28"
+version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2"
+checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10"
dependencies = [
"futures-core",
"futures-sink",
@@ -1262,15 +1328,15 @@ dependencies = [
[[package]]
name = "futures-core"
-version = "0.3.28"
+version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c"
+checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e"
[[package]]
name = "futures-executor"
-version = "0.3.28"
+version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0"
+checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f"
dependencies = [
"futures-core",
"futures-task",
@@ -1279,53 +1345,51 @@ dependencies = [
[[package]]
name = "futures-io"
-version = "0.3.28"
+version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964"
+checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6"
[[package]]
name = "futures-lite"
-version = "1.13.0"
+version = "2.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce"
+checksum = "cef40d21ae2c515b51041df9ed313ed21e572df340ea58a922a0aefe7e8891a1"
dependencies = [
- "fastrand 1.9.0",
+ "fastrand",
"futures-core",
"futures-io",
- "memchr",
"parking",
"pin-project-lite",
- "waker-fn",
]
[[package]]
name = "futures-macro"
-version = "0.3.28"
+version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
+checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.91",
]
[[package]]
name = "futures-sink"
-version = "0.3.28"
+version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e"
+checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7"
[[package]]
name = "futures-task"
-version = "0.3.28"
+version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65"
+checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988"
[[package]]
name = "futures-util"
-version = "0.3.28"
+version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
+checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81"
dependencies = [
"futures-channel",
"futures-core",
@@ -1350,11 +1414,10 @@ dependencies = [
[[package]]
name = "gdk"
-version = "0.15.4"
+version = "0.18.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a6e05c1f572ab0e1f15be94217f0dc29088c248b14f792a5ff0af0d84bcda9e8"
+checksum = "d9f245958c627ac99d8e529166f9823fb3b838d1d41fd2b297af3075093c2691"
dependencies = [
- "bitflags 1.3.2",
"cairo-rs",
"gdk-pixbuf",
"gdk-sys",
@@ -1366,35 +1429,35 @@ dependencies = [
[[package]]
name = "gdk-pixbuf"
-version = "0.15.11"
+version = "0.18.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ad38dd9cc8b099cceecdf41375bb6d481b1b5a7cd5cd603e10a69a9383f8619a"
+checksum = "50e1f5f1b0bfb830d6ccc8066d18db35c487b1b2b1e8589b5dfe9f07e8defaec"
dependencies = [
- "bitflags 1.3.2",
"gdk-pixbuf-sys",
"gio",
"glib",
"libc",
+ "once_cell",
]
[[package]]
name = "gdk-pixbuf-sys"
-version = "0.15.10"
+version = "0.18.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "140b2f5378256527150350a8346dbdb08fadc13453a7a2d73aecd5fab3c402a7"
+checksum = "3f9839ea644ed9c97a34d129ad56d38a25e6756f99f3a88e15cd39c20629caf7"
dependencies = [
"gio-sys",
"glib-sys",
"gobject-sys",
"libc",
- "system-deps 6.1.1",
+ "system-deps",
]
[[package]]
name = "gdk-sys"
-version = "0.15.1"
+version = "0.18.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "32e7a08c1e8f06f4177fb7e51a777b8c1689f743a7bc11ea91d44d2226073a88"
+checksum = "5c2d13f38594ac1e66619e188c6d5a1adb98d11b2fcf7894fc416ad76aa2f3f7"
dependencies = [
"cairo-sys-rs",
"gdk-pixbuf-sys",
@@ -1404,47 +1467,48 @@ dependencies = [
"libc",
"pango-sys",
"pkg-config",
- "system-deps 6.1.1",
+ "system-deps",
]
[[package]]
name = "gdkwayland-sys"
-version = "0.15.3"
+version = "0.18.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cca49a59ad8cfdf36ef7330fe7bdfbe1d34323220cc16a0de2679ee773aee2c2"
+checksum = "140071d506d223f7572b9f09b5e155afbd77428cd5cc7af8f2694c41d98dfe69"
dependencies = [
"gdk-sys",
"glib-sys",
"gobject-sys",
"libc",
"pkg-config",
- "system-deps 6.1.1",
+ "system-deps",
]
[[package]]
-name = "gdkx11-sys"
-version = "0.15.1"
+name = "gdkx11"
+version = "0.18.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b4b7f8c7a84b407aa9b143877e267e848ff34106578b64d1e0a24bf550716178"
+checksum = "3caa00e14351bebbc8183b3c36690327eb77c49abc2268dd4bd36b856db3fbfe"
dependencies = [
- "gdk-sys",
- "glib-sys",
+ "gdk",
+ "gdkx11-sys",
+ "gio",
+ "glib",
"libc",
- "system-deps 6.1.1",
"x11",
]
[[package]]
-name = "generator"
-version = "0.7.5"
+name = "gdkx11-sys"
+version = "0.18.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5cc16584ff22b460a382b7feec54b23d2908d858152e5739a120b949293bd74e"
+checksum = "6e2e7445fe01ac26f11601db260dd8608fe172514eb63b3b5e261ea6b0f4428d"
dependencies = [
- "cc",
+ "gdk-sys",
+ "glib-sys",
"libc",
- "log",
- "rustversion",
- "windows 0.48.0",
+ "system-deps",
+ "x11",
]
[[package]]
@@ -1458,16 +1522,6 @@ dependencies = [
]
[[package]]
-name = "gethostname"
-version = "0.2.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e"
-dependencies = [
- "libc",
- "winapi",
-]
-
-[[package]]
name = "getrandom"
version = "0.1.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1480,9 +1534,9 @@ dependencies = [
[[package]]
name = "getrandom"
-version = "0.2.10"
+version = "0.2.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
+checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7"
dependencies = [
"cfg-if",
"js-sys",
@@ -1493,83 +1547,87 @@ dependencies = [
[[package]]
name = "gimli"
-version = "0.27.3"
+version = "0.31.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e"
+checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f"
[[package]]
name = "gio"
-version = "0.15.12"
+version = "0.18.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "68fdbc90312d462781a395f7a16d96a2b379bb6ef8cd6310a2df272771c4283b"
+checksum = "d4fc8f532f87b79cbc51a79748f16a6828fb784be93145a322fa14d06d354c73"
dependencies = [
- "bitflags 1.3.2",
"futures-channel",
"futures-core",
"futures-io",
+ "futures-util",
"gio-sys",
"glib",
"libc",
"once_cell",
- "thiserror",
+ "pin-project-lite",
+ "smallvec",
+ "thiserror 1.0.69",
]
[[package]]
name = "gio-sys"
-version = "0.15.10"
+version = "0.18.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "32157a475271e2c4a023382e9cab31c4584ee30a97da41d3c4e9fdd605abcf8d"
+checksum = "37566df850baf5e4cb0dfb78af2e4b9898d817ed9263d1090a2df958c64737d2"
dependencies = [
"glib-sys",
"gobject-sys",
"libc",
- "system-deps 6.1.1",
+ "system-deps",
"winapi",
]
[[package]]
name = "glib"
-version = "0.15.12"
+version = "0.18.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "edb0306fbad0ab5428b0ca674a23893db909a98582969c9b537be4ced78c505d"
+checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5"
dependencies = [
- "bitflags 1.3.2",
+ "bitflags 2.6.0",
"futures-channel",
"futures-core",
"futures-executor",
"futures-task",
+ "futures-util",
+ "gio-sys",
"glib-macros",
"glib-sys",
"gobject-sys",
"libc",
+ "memchr",
"once_cell",
"smallvec",
- "thiserror",
+ "thiserror 1.0.69",
]
[[package]]
name = "glib-macros"
-version = "0.15.13"
+version = "0.18.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "10c6ae9f6fa26f4fb2ac16b528d138d971ead56141de489f8111e259b9df3c4a"
+checksum = "0bb0228f477c0900c880fd78c8759b95c7636dbd7842707f49e132378aa2acdc"
dependencies = [
- "anyhow",
"heck 0.4.1",
- "proc-macro-crate",
+ "proc-macro-crate 2.0.2",
"proc-macro-error",
"proc-macro2",
"quote",
- "syn 1.0.109",
+ "syn 2.0.91",
]
[[package]]
name = "glib-sys"
-version = "0.15.10"
+version = "0.18.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ef4b192f8e65e9cf76cbf4ea71fa8e3be4a0e18ffe3d68b8da6836974cc5bad4"
+checksum = "063ce2eb6a8d0ea93d2bf8ba1957e78dbab6be1c2220dd3daca57d5a9d869898"
dependencies = [
"libc",
- "system-deps 6.1.1",
+ "system-deps",
]
[[package]]
@@ -1579,37 +1637,23 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
[[package]]
-name = "globset"
-version = "0.4.12"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "aca8bbd8e0707c1887a8bbb7e6b40e228f251ff5d62c8220a4a7a53c73aff006"
-dependencies = [
- "aho-corasick",
- "bstr",
- "fnv",
- "log",
- "regex",
-]
-
-[[package]]
name = "gobject-sys"
-version = "0.15.10"
+version = "0.18.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0d57ce44246becd17153bd035ab4d32cfee096a657fc01f2231c9278378d1e0a"
+checksum = "0850127b514d1c4a4654ead6dedadb18198999985908e6ffe4436f53c785ce44"
dependencies = [
"glib-sys",
"libc",
- "system-deps 6.1.1",
+ "system-deps",
]
[[package]]
name = "gtk"
-version = "0.15.5"
+version = "0.18.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "92e3004a2d5d6d8b5057d2b57b3712c9529b62e82c77f25c1fecde1fd5c23bd0"
+checksum = "fd56fb197bfc42bd5d2751f4f017d44ff59fbb58140c6b49f9b3b2bdab08506a"
dependencies = [
"atk",
- "bitflags 1.3.2",
"cairo-rs",
"field-offset",
"futures-channel",
@@ -1620,16 +1664,15 @@ dependencies = [
"gtk-sys",
"gtk3-macros",
"libc",
- "once_cell",
"pango",
"pkg-config",
]
[[package]]
name = "gtk-sys"
-version = "0.15.3"
+version = "0.18.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d5bc2f0587cba247f60246a0ca11fe25fb733eabc3de12d1965fc07efab87c84"
+checksum = "8f29a1c21c59553eb7dd40e918be54dccd60c52b049b75119d5d96ce6b624414"
dependencies = [
"atk-sys",
"cairo-sys-rs",
@@ -1640,36 +1683,35 @@ dependencies = [
"gobject-sys",
"libc",
"pango-sys",
- "system-deps 6.1.1",
+ "system-deps",
]
[[package]]
name = "gtk3-macros"
-version = "0.15.6"
+version = "0.18.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "684c0456c086e8e7e9af73ec5b84e35938df394712054550e81558d21c44ab0d"
+checksum = "52ff3c5b21f14f0736fed6dcfc0bfb4225ebf5725f3c0209edeec181e4d73e9d"
dependencies = [
- "anyhow",
- "proc-macro-crate",
+ "proc-macro-crate 1.3.1",
"proc-macro-error",
"proc-macro2",
"quote",
- "syn 1.0.109",
+ "syn 2.0.91",
]
[[package]]
name = "h2"
-version = "0.3.20"
+version = "0.3.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "97ec8491ebaf99c8eaa73058b045fe58073cd6be7f596ac993ced0b0a0c01049"
+checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8"
dependencies = [
"bytes",
"fnv",
"futures-core",
"futures-sink",
"futures-util",
- "http 0.2.9",
- "indexmap 1.9.3",
+ "http 0.2.12",
+ "indexmap 2.7.0",
"slab",
"tokio",
"tokio-util",
@@ -1684,18 +1726,9 @@ checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
[[package]]
name = "hashbrown"
-version = "0.14.3"
+version = "0.15.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604"
-
-[[package]]
-name = "heck"
-version = "0.3.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
-dependencies = [
- "unicode-segmentation",
-]
+checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289"
[[package]]
name = "heck"
@@ -1711,9 +1744,9 @@ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
[[package]]
name = "hermit-abi"
-version = "0.3.9"
+version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024"
+checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc"
[[package]]
name = "hex"
@@ -1731,6 +1764,15 @@ dependencies = [
]
[[package]]
+name = "home"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf"
+dependencies = [
+ "windows-sys 0.59.0",
+]
+
+[[package]]
name = "hostname"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1757,77 +1799,71 @@ dependencies = [
[[package]]
name = "http"
-version = "0.2.9"
+version = "0.2.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482"
+checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1"
dependencies = [
"bytes",
"fnv",
- "itoa 1.0.9",
+ "itoa 1.0.14",
]
[[package]]
name = "http"
-version = "1.0.0"
+version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b32afd38673a8016f7c9ae69e5af41a58f81b1d31689040f2f1959594ce194ea"
+checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea"
dependencies = [
"bytes",
"fnv",
- "itoa 1.0.9",
+ "itoa 1.0.14",
]
[[package]]
name = "http-body"
-version = "0.4.5"
+version = "0.4.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
+checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2"
dependencies = [
"bytes",
- "http 0.2.9",
+ "http 0.2.12",
"pin-project-lite",
]
[[package]]
name = "http-body"
-version = "1.0.0"
+version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1cac85db508abc24a2e48553ba12a996e87244a0395ce011e62b37158745d643"
+checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184"
dependencies = [
"bytes",
- "http 1.0.0",
+ "http 1.2.0",
]
[[package]]
name = "http-body-util"
-version = "0.1.0"
+version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "41cb79eb393015dadd30fc252023adb0b2400a0caee0fa2a077e6e21a551e840"
+checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f"
dependencies = [
"bytes",
"futures-util",
- "http 1.0.0",
- "http-body 1.0.0",
+ "http 1.2.0",
+ "http-body 1.0.1",
"pin-project-lite",
]
[[package]]
-name = "http-range"
-version = "0.1.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "21dec9db110f5f872ed9699c3ecf50cf16f423502706ba5c72462e28d3157573"
-
-[[package]]
name = "httparse"
-version = "1.8.0"
+version = "1.9.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
+checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946"
[[package]]
name = "httpdate"
-version = "1.0.2"
+version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
+checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
[[package]]
name = "humantime"
@@ -1837,22 +1873,22 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
[[package]]
name = "hyper"
-version = "0.14.27"
+version = "0.14.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468"
+checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7"
dependencies = [
"bytes",
"futures-channel",
"futures-core",
"futures-util",
"h2",
- "http 0.2.9",
- "http-body 0.4.5",
+ "http 0.2.12",
+ "http-body 0.4.6",
"httparse",
"httpdate",
- "itoa 1.0.9",
+ "itoa 1.0.14",
"pin-project-lite",
- "socket2 0.4.9",
+ "socket2",
"tokio",
"tower-service",
"tracing",
@@ -1861,18 +1897,19 @@ dependencies = [
[[package]]
name = "hyper"
-version = "1.1.0"
+version = "1.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fb5aa53871fc917b1a9ed87b683a5d86db645e23acb32c2e0785a353e522fb75"
+checksum = "256fb8d4bd6413123cc9d91832d78325c48ff41677595be797d90f42969beae0"
dependencies = [
"bytes",
"futures-channel",
"futures-util",
- "http 1.0.0",
- "http-body 1.0.0",
+ "http 1.2.0",
+ "http-body 1.0.1",
"httparse",
- "itoa 1.0.9",
+ "itoa 1.0.14",
"pin-project-lite",
+ "smallvec",
"tokio",
"want",
]
@@ -1884,11 +1921,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a0bea761b46ae2b24eb4aef630d8d1c398157b6fc29e6350ecf090a0b70c952c"
dependencies = [
"futures-util",
- "http 1.0.0",
- "hyper 1.1.0",
+ "http 1.2.0",
+ "hyper 1.5.2",
"hyper-util",
"log",
- "rustls 0.22.2",
+ "rustls 0.22.4",
"rustls-native-certs",
"rustls-pki-types",
"tokio",
@@ -1898,11 +1935,11 @@ dependencies = [
[[package]]
name = "hyper-timeout"
-version = "0.5.1"
+version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3203a961e5c83b6f5498933e78b6b263e208c197b63e9c6c53cc82ffd3f63793"
+checksum = "2b90d566bffbce6a75bd8b09a05aa8c2cb1fabb6cb348f8840c9e4c90a0d83b0"
dependencies = [
- "hyper 1.1.0",
+ "hyper 1.5.2",
"hyper-util",
"pin-project-lite",
"tokio",
@@ -1916,7 +1953,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905"
dependencies = [
"bytes",
- "hyper 0.14.27",
+ "hyper 0.14.32",
"native-tls",
"tokio",
"tokio-native-tls",
@@ -1930,7 +1967,7 @@ checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0"
dependencies = [
"bytes",
"http-body-util",
- "hyper 1.1.0",
+ "hyper 1.5.2",
"hyper-util",
"native-tls",
"tokio",
@@ -1940,36 +1977,35 @@ dependencies = [
[[package]]
name = "hyper-util"
-version = "0.1.3"
+version = "0.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ca38ef113da30126bbff9cd1705f9273e15d45498615d138b0c20279ac7a76aa"
+checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4"
dependencies = [
"bytes",
"futures-channel",
"futures-util",
- "http 1.0.0",
- "http-body 1.0.0",
- "hyper 1.1.0",
+ "http 1.2.0",
+ "http-body 1.0.1",
+ "hyper 1.5.2",
"pin-project-lite",
- "socket2 0.5.5",
+ "socket2",
"tokio",
- "tower",
"tower-service",
"tracing",
]
[[package]]
name = "iana-time-zone"
-version = "0.1.57"
+version = "0.1.61"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613"
+checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220"
dependencies = [
"android_system_properties",
"core-foundation-sys",
"iana-time-zone-haiku",
"js-sys",
"wasm-bindgen",
- "windows 0.48.0",
+ "windows-core 0.52.0",
]
[[package]]
@@ -1992,51 +2028,148 @@ dependencies = [
]
[[package]]
-name = "ident_case"
-version = "1.0.1"
+name = "icu_collections"
+version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
+checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526"
+dependencies = [
+ "displaydoc",
+ "yoke",
+ "zerofrom",
+ "zerovec",
+]
[[package]]
-name = "idna"
-version = "0.4.0"
+name = "icu_locid"
+version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c"
+checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637"
dependencies = [
- "unicode-bidi",
- "unicode-normalization",
+ "displaydoc",
+ "litemap",
+ "tinystr",
+ "writeable",
+ "zerovec",
]
[[package]]
-name = "ignore"
-version = "0.4.20"
+name = "icu_locid_transform"
+version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dbe7873dab538a9a44ad79ede1faf5f30d49f9a5c883ddbab48bce81b64b7492"
+checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e"
dependencies = [
- "globset",
- "lazy_static",
- "log",
- "memchr",
- "regex",
- "same-file",
- "thread_local",
- "walkdir",
- "winapi-util",
+ "displaydoc",
+ "icu_locid",
+ "icu_locid_transform_data",
+ "icu_provider",
+ "tinystr",
+ "zerovec",
]
[[package]]
-name = "image"
-version = "0.24.6"
+name = "icu_locid_transform_data"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e"
+
+[[package]]
+name = "icu_normalizer"
+version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "527909aa81e20ac3a44803521443a765550f09b5130c2c2fa1ea59c2f8f50a3a"
+checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f"
dependencies = [
- "bytemuck",
- "byteorder",
- "color_quant",
- "num-rational",
- "num-traits",
- "png",
- "tiff",
+ "displaydoc",
+ "icu_collections",
+ "icu_normalizer_data",
+ "icu_properties",
+ "icu_provider",
+ "smallvec",
+ "utf16_iter",
+ "utf8_iter",
+ "write16",
+ "zerovec",
+]
+
+[[package]]
+name = "icu_normalizer_data"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516"
+
+[[package]]
+name = "icu_properties"
+version = "1.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5"
+dependencies = [
+ "displaydoc",
+ "icu_collections",
+ "icu_locid_transform",
+ "icu_properties_data",
+ "icu_provider",
+ "tinystr",
+ "zerovec",
+]
+
+[[package]]
+name = "icu_properties_data"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569"
+
+[[package]]
+name = "icu_provider"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9"
+dependencies = [
+ "displaydoc",
+ "icu_locid",
+ "icu_provider_macros",
+ "stable_deref_trait",
+ "tinystr",
+ "writeable",
+ "yoke",
+ "zerofrom",
+ "zerovec",
+]
+
+[[package]]
+name = "icu_provider_macros"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.91",
+]
+
+[[package]]
+name = "ident_case"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
+
+[[package]]
+name = "idna"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e"
+dependencies = [
+ "idna_adapter",
+ "smallvec",
+ "utf8_iter",
+]
+
+[[package]]
+name = "idna_adapter"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71"
+dependencies = [
+ "icu_normalizer",
+ "icu_properties",
]
[[package]]
@@ -2052,19 +2185,20 @@ dependencies = [
[[package]]
name = "indexmap"
-version = "2.2.5"
+version = "2.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7b0b929d511467233429c45a44ac1dcaa21ba0f5ba11e4879e6ed28ddb4f9df4"
+checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f"
dependencies = [
"equivalent",
- "hashbrown 0.14.3",
+ "hashbrown 0.15.2",
+ "serde",
]
[[package]]
name = "infer"
-version = "0.13.0"
+version = "0.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f551f8c3a39f68f986517db0d1759de85881894fdc7db798bd2a9df9cb04b7fc"
+checksum = "bc150e5ce2330295b8616ce0e3f53250e53af31759a9dbedad1621ba29151847"
dependencies = [
"cfb",
]
@@ -2080,35 +2214,24 @@ dependencies = [
[[package]]
name = "instant"
-version = "0.1.12"
+version = "0.1.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222"
dependencies = [
"cfg-if",
]
[[package]]
-name = "io-lifetimes"
-version = "1.0.11"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2"
-dependencies = [
- "hermit-abi",
- "libc",
- "windows-sys 0.48.0",
-]
-
-[[package]]
name = "ipnet"
-version = "2.8.0"
+version = "2.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6"
+checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708"
[[package]]
name = "iri-string"
-version = "0.7.0"
+version = "0.7.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "21859b667d66a4c1dacd9df0863b3efb65785474255face87f5bca39dd8407c0"
+checksum = "dc0f0a572e8ffe56e2ff4f769f32ffe919282c3916799f8b68688b6030063bea"
dependencies = [
"memchr",
"serde",
@@ -2125,13 +2248,13 @@ dependencies = [
[[package]]
name = "is-terminal"
-version = "0.4.9"
+version = "0.4.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b"
+checksum = "261f68e344040fbd0edea105bef17c66edf46f984ddb1115b775ce31be948f4b"
dependencies = [
"hermit-abi",
- "rustix 0.38.6",
- "windows-sys 0.48.0",
+ "libc",
+ "windows-sys 0.52.0",
]
[[package]]
@@ -2152,15 +2275,15 @@ checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4"
[[package]]
name = "itoa"
-version = "1.0.9"
+version = "1.0.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
+checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674"
[[package]]
name = "javascriptcore-rs"
-version = "0.16.0"
+version = "1.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bf053e7843f2812ff03ef5afe34bb9c06ffee120385caad4f6b9967fcd37d41c"
+checksum = "ca5671e9ffce8ffba57afc24070e906da7fc4b1ba66f2cabebf61bf2ea257fcc"
dependencies = [
"bitflags 1.3.2",
"glib",
@@ -2169,28 +2292,30 @@ dependencies = [
[[package]]
name = "javascriptcore-rs-sys"
-version = "0.4.0"
+version = "1.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "905fbb87419c5cde6e3269537e4ea7d46431f3008c5d057e915ef3f115e7793c"
+checksum = "af1be78d14ffa4b75b66df31840478fef72b51f8c2465d4ca7c194da9f7a5124"
dependencies = [
"glib-sys",
"gobject-sys",
"libc",
- "system-deps 5.0.0",
+ "system-deps",
]
[[package]]
name = "jni"
-version = "0.20.0"
+version = "0.21.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "039022cdf4d7b1cf548d31f60ae783138e5fd42013f6271049d7df7afadef96c"
+checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97"
dependencies = [
"cesu8",
+ "cfg-if",
"combine",
"jni-sys",
"log",
- "thiserror",
+ "thiserror 1.0.69",
"walkdir",
+ "windows-sys 0.45.0",
]
[[package]]
@@ -2201,38 +2326,33 @@ checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130"
[[package]]
name = "jobserver"
-version = "0.1.26"
+version = "0.1.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2"
+checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0"
dependencies = [
"libc",
]
[[package]]
-name = "jpeg-decoder"
-version = "0.3.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f5d4a7da358eff58addd2877a45865158f0d78c911d43a5784ceb7bbf52833b0"
-
-[[package]]
name = "js-sys"
-version = "0.3.64"
+version = "0.3.76"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a"
+checksum = "6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7"
dependencies = [
+ "once_cell",
"wasm-bindgen",
]
[[package]]
name = "json-patch"
-version = "1.2.0"
+version = "3.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "55ff1e1486799e3f64129f8ccad108b38290df9cd7015cd31bed17239f0789d6"
+checksum = "863726d7afb6bc2590eeff7135d923545e5e964f004c2ccf8716c25e70a86f08"
dependencies = [
+ "jsonptr",
"serde",
"serde_json",
- "thiserror",
- "treediff",
+ "thiserror 1.0.69",
]
[[package]]
@@ -2247,21 +2367,42 @@ dependencies = [
]
[[package]]
+name = "jsonptr"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5dea2b27dd239b2556ed7a25ba842fe47fd602e7fc7433c2a8d6106d4d9edd70"
+dependencies = [
+ "serde",
+ "serde_json",
+]
+
+[[package]]
name = "jsonwebtoken"
-version = "9.2.0"
+version = "9.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5c7ea04a7c5c055c175f189b6dc6ba036fd62306b58c66c9f6389036c503a3f4"
+checksum = "b9ae10193d25051e74945f1ea2d0b42e03cc3b890f7e4cc5faa44997d808193f"
dependencies = [
- "base64 0.21.2",
+ "base64 0.21.7",
"js-sys",
"pem",
- "ring 0.17.7",
+ "ring",
"serde",
"serde_json",
"simple_asn1",
]
[[package]]
+name = "keyboard-types"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a"
+dependencies = [
+ "bitflags 2.6.0",
+ "serde",
+ "unicode-segmentation",
+]
+
+[[package]]
name = "keyvalues-parser"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2269,7 +2410,7 @@ checksum = "7e4c8354918309196302015ac9cae43362f1a13d0d5c5539a33b4c2fd2cd6d25"
dependencies = [
"pest",
"pest_derive",
- "thiserror",
+ "thiserror 1.0.69",
]
[[package]]
@@ -2280,7 +2421,7 @@ checksum = "0447866c47c00f8bd1949618e8f63017cf93e985b4684dc28d784527e2882390"
dependencies = [
"keyvalues-parser",
"serde",
- "thiserror",
+ "thiserror 1.0.69",
]
[[package]]
@@ -2298,86 +2439,112 @@ dependencies = [
[[package]]
name = "lazy_static"
-version = "1.4.0"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
+
+[[package]]
+name = "libappindicator"
+version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+checksum = "03589b9607c868cc7ae54c0b2a22c8dc03dd41692d48f2d7df73615c6a95dc0a"
+dependencies = [
+ "glib",
+ "gtk",
+ "gtk-sys",
+ "libappindicator-sys",
+ "log",
+]
+
+[[package]]
+name = "libappindicator-sys"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e9ec52138abedcc58dc17a7c6c0c00a2bdb4f3427c7f63fa97fd0d859155caf"
+dependencies = [
+ "gtk-sys",
+ "libloading",
+ "once_cell",
+]
[[package]]
name = "libc"
-version = "0.2.153"
+version = "0.2.169"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd"
+checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a"
+
+[[package]]
+name = "libloading"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f"
+dependencies = [
+ "cfg-if",
+ "winapi",
+]
+
+[[package]]
+name = "libredox"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d"
+dependencies = [
+ "bitflags 2.6.0",
+ "libc",
+ "redox_syscall",
+]
[[package]]
name = "libthermite"
-version = "0.8.1"
+version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c27ac02c14161a4b0db739b37618d929d7f2af320c1f993e3d674599f77b79e7"
+checksum = "878f5ca735da1a3365239d6fcb3a403c5cd347896e9a45d864b9fbfad727298e"
dependencies = [
"flate2",
"json5",
- "lazy_static",
"regex",
"serde",
"serde_json",
"tar",
- "thiserror",
+ "thiserror 1.0.69",
"tracing",
"ureq",
- "zip",
-]
-
-[[package]]
-name = "line-wrap"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f30344350a2a51da54c1d53be93fade8a237e545dbcc4bdbe635413f2117cab9"
-dependencies = [
- "safemem",
+ "zip 2.2.2",
]
[[package]]
name = "linux-raw-sys"
-version = "0.3.8"
+version = "0.4.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519"
+checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89"
[[package]]
-name = "linux-raw-sys"
-version = "0.4.5"
+name = "litemap"
+version = "0.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "57bcfdad1b858c2db7c38303a6d2ad4dfaf5eb53dfeb0910128b2c26d6158503"
+checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104"
[[package]]
name = "lock_api"
-version = "0.4.10"
+version = "0.4.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16"
+checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17"
dependencies = [
"autocfg",
"scopeguard",
]
[[package]]
-name = "log"
-version = "0.4.22"
+name = "lockfree-object-pool"
+version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24"
+checksum = "9374ef4228402d4b7e403e5838cb880d9ee663314b0a900d5a6aabf0c213552e"
[[package]]
-name = "loom"
-version = "0.5.6"
+name = "log"
+version = "0.4.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ff50ecb28bb86013e935fb6683ab1f6d3a20016f123c76fd4c27470076ac30f5"
-dependencies = [
- "cfg-if",
- "generator",
- "scoped-tls",
- "serde",
- "serde_json",
- "tracing",
- "tracing-subscriber",
-]
+checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24"
[[package]]
name = "mac"
@@ -2386,19 +2553,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4"
[[package]]
-name = "mac-notification-sys"
-version = "0.5.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "abc434554ad0e640d772f7f262aa28e61d485212533d3673abe5f3d1729bd42a"
-dependencies = [
- "cc",
- "dirs-next",
- "objc-foundation",
- "objc_id",
- "time",
-]
-
-[[package]]
name = "malloc_buf"
version = "0.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2422,15 +2576,6 @@ dependencies = [
]
[[package]]
-name = "matchers"
-version = "0.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558"
-dependencies = [
- "regex-automata 0.1.10",
-]
-
-[[package]]
name = "matches"
version = "0.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2438,33 +2583,15 @@ checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5"
[[package]]
name = "memchr"
-version = "2.6.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8f232d6ef707e1956a43342693d2a31e72989554d58299d7a88738cc95b0d35c"
-
-[[package]]
-name = "memoffset"
-version = "0.6.5"
+version = "2.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce"
-dependencies = [
- "autocfg",
-]
+checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
[[package]]
name = "memoffset"
-version = "0.7.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4"
-dependencies = [
- "autocfg",
-]
-
-[[package]]
-name = "memoffset"
-version = "0.9.0"
+version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
+checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a"
dependencies = [
"autocfg",
]
@@ -2476,46 +2603,52 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
[[package]]
-name = "minimal-lexical"
-version = "0.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
-
-[[package]]
-name = "minisign-verify"
-version = "0.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "933dca44d65cdd53b355d0b73d380a2ff5da71f87f036053188bf1eab6a19881"
-
-[[package]]
name = "miniz_oxide"
-version = "0.7.1"
+version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+checksum = "4ffbe83022cedc1d264172192511ae958937694cd57ce297164951b8b3568394"
dependencies = [
- "adler",
+ "adler2",
"simd-adler32",
]
[[package]]
name = "mio"
-version = "1.0.1"
+version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4569e456d394deccd22ce1c1913e6ea0e54519f577285001215d33557431afe4"
+checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd"
dependencies = [
- "hermit-abi",
"libc",
"wasi 0.11.0+wasi-snapshot-preview1",
"windows-sys 0.52.0",
]
[[package]]
+name = "muda"
+version = "0.15.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fdae9c00e61cc0579bcac625e8ad22104c60548a025bfc972dc83868a28e1484"
+dependencies = [
+ "crossbeam-channel",
+ "dpi",
+ "gtk",
+ "keyboard-types",
+ "objc2",
+ "objc2-app-kit",
+ "objc2-foundation",
+ "once_cell",
+ "png",
+ "serde",
+ "thiserror 1.0.69",
+ "windows-sys 0.59.0",
+]
+
+[[package]]
name = "native-tls"
-version = "0.2.11"
+version = "0.2.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e"
+checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466"
dependencies = [
- "lazy_static",
"libc",
"log",
"openssl",
@@ -2529,15 +2662,17 @@ dependencies = [
[[package]]
name = "ndk"
-version = "0.6.0"
+version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2032c77e030ddee34a6787a64166008da93f6a352b629261d0fee232b8742dd4"
+checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4"
dependencies = [
- "bitflags 1.3.2",
+ "bitflags 2.6.0",
"jni-sys",
+ "log",
"ndk-sys",
"num_enum",
- "thiserror",
+ "raw-window-handle",
+ "thiserror 1.0.69",
]
[[package]]
@@ -2548,42 +2683,29 @@ checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b"
[[package]]
name = "ndk-sys"
-version = "0.3.0"
+version = "0.6.0+11769913"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6e5a6ae77c8ee183dcbbba6150e2e6b9f3f4196a7666c02a715a95692ec1fa97"
+checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873"
dependencies = [
"jni-sys",
]
[[package]]
name = "new_debug_unreachable"
-version = "1.0.4"
+version = "1.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54"
+checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086"
[[package]]
name = "nix"
-version = "0.24.3"
+version = "0.27.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069"
+checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053"
dependencies = [
- "bitflags 1.3.2",
+ "bitflags 2.6.0",
"cfg-if",
"libc",
- "memoffset 0.6.5",
-]
-
-[[package]]
-name = "nix"
-version = "0.26.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a"
-dependencies = [
- "bitflags 1.3.2",
- "cfg-if",
- "libc",
- "memoffset 0.7.1",
- "static_assertions",
+ "memoffset",
]
[[package]]
@@ -2593,29 +2715,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb"
[[package]]
-name = "nom"
-version = "7.1.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
-dependencies = [
- "memchr",
- "minimal-lexical",
-]
-
-[[package]]
-name = "notify-rust"
-version = "4.8.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2bfa211d18e360f08e36c364308f394b5eb23a6629150690e109a916dc6f610e"
-dependencies = [
- "log",
- "mac-notification-sys",
- "serde",
- "tauri-winrt-notification",
- "zbus",
-]
-
-[[package]]
name = "ntapi"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2625,22 +2724,11 @@ dependencies = [
]
[[package]]
-name = "nu-ansi-term"
-version = "0.46.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84"
-dependencies = [
- "overload",
- "winapi",
-]
-
-[[package]]
name = "num-bigint"
-version = "0.4.4"
+version = "0.4.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0"
+checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9"
dependencies = [
- "autocfg",
"num-integer",
"num-traits",
]
@@ -2653,53 +2741,41 @@ checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9"
[[package]]
name = "num-integer"
-version = "0.1.45"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
-dependencies = [
- "autocfg",
- "num-traits",
-]
-
-[[package]]
-name = "num-rational"
-version = "0.4.1"
+version = "0.1.46"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0"
+checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f"
dependencies = [
- "autocfg",
- "num-integer",
"num-traits",
]
[[package]]
name = "num-traits"
-version = "0.2.16"
+version = "0.2.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2"
+checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
dependencies = [
"autocfg",
]
[[package]]
name = "num_enum"
-version = "0.5.11"
+version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9"
+checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179"
dependencies = [
"num_enum_derive",
]
[[package]]
name = "num_enum_derive"
-version = "0.5.11"
+version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799"
+checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56"
dependencies = [
- "proc-macro-crate",
+ "proc-macro-crate 2.0.2",
"proc-macro2",
"quote",
- "syn 1.0.109",
+ "syn 2.0.91",
]
[[package]]
@@ -2709,43 +2785,231 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1"
dependencies = [
"malloc_buf",
- "objc_exception",
]
[[package]]
-name = "objc-foundation"
-version = "0.1.1"
+name = "objc-sys"
+version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9"
+checksum = "cdb91bdd390c7ce1a8607f35f3ca7151b65afc0ff5ff3b34fa350f7d7c7e4310"
dependencies = [
- "block",
- "objc",
- "objc_id",
+ "cc",
]
[[package]]
-name = "objc_exception"
-version = "0.1.2"
+name = "objc2"
+version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4"
+checksum = "46a785d4eeff09c14c487497c162e92766fbb3e4059a71840cecc03d9a50b804"
dependencies = [
- "cc",
+ "objc-sys",
+ "objc2-encode",
]
[[package]]
-name = "objc_id"
-version = "0.1.1"
+name = "objc2-app-kit"
+version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b"
+checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff"
dependencies = [
- "objc",
+ "bitflags 2.6.0",
+ "block2",
+ "libc",
+ "objc2",
+ "objc2-core-data",
+ "objc2-core-image",
+ "objc2-foundation",
+ "objc2-quartz-core",
+]
+
+[[package]]
+name = "objc2-cloud-kit"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009"
+dependencies = [
+ "bitflags 2.6.0",
+ "block2",
+ "objc2",
+ "objc2-core-location",
+ "objc2-foundation",
+]
+
+[[package]]
+name = "objc2-contacts"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a5ff520e9c33812fd374d8deecef01d4a840e7b41862d849513de77e44aa4889"
+dependencies = [
+ "block2",
+ "objc2",
+ "objc2-foundation",
+]
+
+[[package]]
+name = "objc2-core-data"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef"
+dependencies = [
+ "bitflags 2.6.0",
+ "block2",
+ "objc2",
+ "objc2-foundation",
+]
+
+[[package]]
+name = "objc2-core-image"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80"
+dependencies = [
+ "block2",
+ "objc2",
+ "objc2-foundation",
+ "objc2-metal",
+]
+
+[[package]]
+name = "objc2-core-location"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "000cfee34e683244f284252ee206a27953279d370e309649dc3ee317b37e5781"
+dependencies = [
+ "block2",
+ "objc2",
+ "objc2-contacts",
+ "objc2-foundation",
+]
+
+[[package]]
+name = "objc2-encode"
+version = "4.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7891e71393cd1f227313c9379a26a584ff3d7e6e7159e988851f0934c993f0f8"
+
+[[package]]
+name = "objc2-foundation"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8"
+dependencies = [
+ "bitflags 2.6.0",
+ "block2",
+ "libc",
+ "objc2",
+]
+
+[[package]]
+name = "objc2-link-presentation"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1a1ae721c5e35be65f01a03b6d2ac13a54cb4fa70d8a5da293d7b0020261398"
+dependencies = [
+ "block2",
+ "objc2",
+ "objc2-app-kit",
+ "objc2-foundation",
+]
+
+[[package]]
+name = "objc2-metal"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6"
+dependencies = [
+ "bitflags 2.6.0",
+ "block2",
+ "objc2",
+ "objc2-foundation",
+]
+
+[[package]]
+name = "objc2-quartz-core"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a"
+dependencies = [
+ "bitflags 2.6.0",
+ "block2",
+ "objc2",
+ "objc2-foundation",
+ "objc2-metal",
+]
+
+[[package]]
+name = "objc2-symbols"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0a684efe3dec1b305badae1a28f6555f6ddd3bb2c2267896782858d5a78404dc"
+dependencies = [
+ "objc2",
+ "objc2-foundation",
+]
+
+[[package]]
+name = "objc2-ui-kit"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f"
+dependencies = [
+ "bitflags 2.6.0",
+ "block2",
+ "objc2",
+ "objc2-cloud-kit",
+ "objc2-core-data",
+ "objc2-core-image",
+ "objc2-core-location",
+ "objc2-foundation",
+ "objc2-link-presentation",
+ "objc2-quartz-core",
+ "objc2-symbols",
+ "objc2-uniform-type-identifiers",
+ "objc2-user-notifications",
+]
+
+[[package]]
+name = "objc2-uniform-type-identifiers"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44fa5f9748dbfe1ca6c0b79ad20725a11eca7c2218bceb4b005cb1be26273bfe"
+dependencies = [
+ "block2",
+ "objc2",
+ "objc2-foundation",
+]
+
+[[package]]
+name = "objc2-user-notifications"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3"
+dependencies = [
+ "bitflags 2.6.0",
+ "block2",
+ "objc2",
+ "objc2-core-location",
+ "objc2-foundation",
+]
+
+[[package]]
+name = "objc2-web-kit"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68bc69301064cebefc6c4c90ce9cba69225239e4b8ff99d445a2b5563797da65"
+dependencies = [
+ "bitflags 2.6.0",
+ "block2",
+ "objc2",
+ "objc2-app-kit",
+ "objc2-foundation",
]
[[package]]
name = "object"
-version = "0.31.1"
+version = "0.36.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8bda667d9f2b5051b8833f59f3bf748b28ef54f850f4fcb389a252aa383866d1"
+checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87"
dependencies = [
"memchr",
]
@@ -2758,17 +3022,17 @@ checksum = "68a8a3df00728324ad654ecd1ed449a60157c55b7ff8c109af3a35989687c367"
dependencies = [
"arc-swap",
"async-trait",
- "base64 0.22.0",
+ "base64 0.22.1",
"bytes",
"cfg-if",
"chrono",
"either",
"futures",
"futures-util",
- "http 1.0.0",
- "http-body 1.0.0",
+ "http 1.2.0",
+ "http-body 1.0.1",
"http-body-util",
- "hyper 1.1.0",
+ "hyper 1.5.2",
"hyper-rustls",
"hyper-timeout",
"hyper-util",
@@ -2791,25 +3055,15 @@ dependencies = [
[[package]]
name = "once_cell"
-version = "1.18.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
-
-[[package]]
-name = "open"
-version = "3.2.0"
+version = "1.20.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2078c0039e6a54a0c42c28faa984e115fb4c2d5bf2208f77d1961002df8576f8"
-dependencies = [
- "pathdiff",
- "windows-sys 0.42.0",
-]
+checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775"
[[package]]
name = "open"
-version = "5.3.0"
+version = "5.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "61a877bf6abd716642a53ef1b89fb498923a4afca5c754f9050b4d081c05c4b3"
+checksum = "3ecd52f0b8d15c40ce4820aa251ed5de032e5d91fab27f7db2f40d42a8bdf69c"
dependencies = [
"is-wsl",
"libc",
@@ -2818,13 +3072,13 @@ dependencies = [
[[package]]
name = "openssl"
-version = "0.10.55"
+version = "0.10.68"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "345df152bc43501c5eb9e4654ff05f794effb78d4efe3d53abc158baddc0703d"
+checksum = "6174bc48f102d208783c2c84bf931bb75927a617866870de8a4ea85597f871f5"
dependencies = [
- "bitflags 1.3.2",
+ "bitflags 2.6.0",
"cfg-if",
- "foreign-types",
+ "foreign-types 0.3.2",
"libc",
"once_cell",
"openssl-macros",
@@ -2839,7 +3093,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.91",
]
[[package]]
@@ -2850,9 +3104,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
[[package]]
name = "openssl-sys"
-version = "0.9.90"
+version = "0.9.104"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "374533b0e45f3a7ced10fcaeccca020e66656bc03dac384f852e4e5a7a8104a6"
+checksum = "45abf306cbf99debc8195b66b7346498d7b10c210de50418b5ccd7ceba08c741"
dependencies = [
"cc",
"libc",
@@ -2878,38 +3132,22 @@ dependencies = [
[[package]]
name = "os_info"
-version = "3.7.0"
+version = "3.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "006e42d5b888366f1880eda20371fedde764ed2213dc8496f49622fa0c99cd5e"
+checksum = "eb6651f4be5e39563c4fe5cc8326349eb99a25d805a3493f791d5bfd0269e430"
dependencies = [
"log",
"serde",
- "winapi",
-]
-
-[[package]]
-name = "os_pipe"
-version = "1.1.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0ae859aa07428ca9a929b936690f8b12dc5f11dd8c6992a18ca93919f28bc177"
-dependencies = [
- "libc",
- "windows-sys 0.48.0",
+ "windows-sys 0.52.0",
]
[[package]]
-name = "overload"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
-
-[[package]]
name = "pango"
-version = "0.15.10"
+version = "0.18.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "22e4045548659aee5313bde6c582b0d83a627b7904dd20dc2d9ef0895d414e4f"
+checksum = "7ca27ec1eb0457ab26f3036ea52229edbdb74dee1edd29063f5b9b010e7ebee4"
dependencies = [
- "bitflags 1.3.2",
+ "gio",
"glib",
"libc",
"once_cell",
@@ -2918,27 +3156,27 @@ dependencies = [
[[package]]
name = "pango-sys"
-version = "0.15.10"
+version = "0.18.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d2a00081cde4661982ed91d80ef437c20eacaf6aa1a5962c0279ae194662c3aa"
+checksum = "436737e391a843e5933d6d9aa102cb126d501e815b83601365a948a518555dc5"
dependencies = [
"glib-sys",
"gobject-sys",
"libc",
- "system-deps 6.1.1",
+ "system-deps",
]
[[package]]
name = "parking"
-version = "2.1.0"
+version = "2.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "14f2252c834a40ed9bb5422029649578e63aa341ac401f74e719dd1afda8394e"
+checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba"
[[package]]
name = "parking_lot"
-version = "0.12.1"
+version = "0.12.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27"
dependencies = [
"lock_api",
"parking_lot_core",
@@ -2946,15 +3184,15 @@ dependencies = [
[[package]]
name = "parking_lot_core"
-version = "0.9.8"
+version = "0.9.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447"
+checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8"
dependencies = [
"cfg-if",
"libc",
- "redox_syscall 0.3.5",
+ "redox_syscall",
"smallvec",
- "windows-targets 0.48.1",
+ "windows-targets 0.52.6",
]
[[package]]
@@ -2970,9 +3208,9 @@ dependencies = [
[[package]]
name = "pathdiff"
-version = "0.2.1"
+version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd"
+checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3"
[[package]]
name = "pbkdf2"
@@ -2988,35 +3226,36 @@ dependencies = [
[[package]]
name = "pem"
-version = "3.0.3"
+version = "3.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1b8fcc794035347fb64beda2d3b462595dd2753e3f268d89c5aae77e8cf2c310"
+checksum = "8e459365e590736a54c3fa561947c84837534b8e9af6fc5bf781307e82658fae"
dependencies = [
- "base64 0.21.2",
+ "base64 0.22.1",
"serde",
]
[[package]]
name = "percent-encoding"
-version = "2.3.0"
+version = "2.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94"
+checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
[[package]]
name = "pest"
-version = "2.7.2"
+version = "2.7.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1acb4a4365a13f749a93f1a094a7805e5cfa0955373a9de860d962eaa3a5fe5a"
+checksum = "8b7cafe60d6cf8e62e1b9b2ea516a089c008945bb5a275416789e7db0bc199dc"
dependencies = [
- "thiserror",
+ "memchr",
+ "thiserror 2.0.9",
"ucd-trie",
]
[[package]]
name = "pest_derive"
-version = "2.7.2"
+version = "2.7.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "666d00490d4ac815001da55838c500eafb0320019bbaa44444137c48b443a853"
+checksum = "816518421cfc6887a0d62bf441b6ffb4536fcc926395a69e1a85852d4363f57e"
dependencies = [
"pest",
"pest_generator",
@@ -3024,22 +3263,22 @@ dependencies = [
[[package]]
name = "pest_generator"
-version = "2.7.2"
+version = "2.7.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "68ca01446f50dbda87c1786af8770d535423fa8a53aec03b8f4e3d7eb10e0929"
+checksum = "7d1396fd3a870fc7838768d171b4616d5c91f6cc25e377b673d714567d99377b"
dependencies = [
"pest",
"pest_meta",
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.91",
]
[[package]]
name = "pest_meta"
-version = "2.7.2"
+version = "2.7.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "56af0a30af74d0445c0bf6d9d051c979b516a1a5af790d251daee76005420a48"
+checksum = "e1e58089ea25d717bfd31fb534e4f3afcc2cc569c70de3e239778991ea3b7dea"
dependencies = [
"once_cell",
"pest",
@@ -3047,16 +3286,6 @@ dependencies = [
]
[[package]]
-name = "petgraph"
-version = "0.6.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9"
-dependencies = [
- "fixedbitset",
- "indexmap 2.2.5",
-]
-
-[[package]]
name = "phf"
version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -3160,7 +3389,7 @@ dependencies = [
"phf_shared 0.11.2",
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.91",
]
[[package]]
@@ -3192,29 +3421,29 @@ dependencies = [
[[package]]
name = "pin-project"
-version = "1.1.4"
+version = "1.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0302c4a0442c456bd56f841aee5c3bfd17967563f6fadc9ceb9f9c23cf3807e0"
+checksum = "be57f64e946e500c8ee36ef6331845d40a93055567ec57e8fae13efd33759b95"
dependencies = [
"pin-project-internal",
]
[[package]]
name = "pin-project-internal"
-version = "1.1.4"
+version = "1.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "266c042b60c9c76b8d53061e52b2e0d1116abc57cefc8c5cd671619a56ac3690"
+checksum = "3c0f5fad0874fc7abcd4d750e76917eaebbecaa2c20bde22e1dbeeba8beb758c"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.91",
]
[[package]]
name = "pin-project-lite"
-version = "0.2.13"
+version = "0.2.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58"
+checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff"
[[package]]
name = "pin-utils"
@@ -3223,30 +3452,40 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
[[package]]
+name = "piper"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066"
+dependencies = [
+ "atomic-waker",
+ "fastrand",
+ "futures-io",
+]
+
+[[package]]
name = "pkg-config"
-version = "0.3.27"
+version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
+checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2"
[[package]]
name = "plist"
-version = "1.5.0"
+version = "1.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bdc0001cfea3db57a2e24bc0d818e9e20e554b5f97fabb9bc231dc240269ae06"
+checksum = "42cf17e9a1800f5f396bc67d193dc9411b59012a5876445ef450d449881e1016"
dependencies = [
- "base64 0.21.2",
- "indexmap 1.9.3",
- "line-wrap",
- "quick-xml 0.29.0",
+ "base64 0.22.1",
+ "indexmap 2.7.0",
+ "quick-xml",
"serde",
"time",
]
[[package]]
name = "png"
-version = "0.17.9"
+version = "0.17.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "59871cc5b6cce7eaccca5a802b4173377a1c2ba90654246789a8fa2334426d11"
+checksum = "82151a2fc869e011c153adc57cf2789ccb8d9906ce52c0b39a6b5697749d7526"
dependencies = [
"bitflags 1.3.2",
"crc32fast",
@@ -3257,18 +3496,17 @@ dependencies = [
[[package]]
name = "polling"
-version = "2.8.0"
+version = "3.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce"
+checksum = "a604568c3202727d1507653cb121dbd627a58684eb09a820fd746bee38b4442f"
dependencies = [
- "autocfg",
- "bitflags 1.3.2",
"cfg-if",
"concurrent-queue",
- "libc",
- "log",
+ "hermit-abi",
"pin-project-lite",
- "windows-sys 0.48.0",
+ "rustix",
+ "tracing",
+ "windows-sys 0.59.0",
]
[[package]]
@@ -3279,9 +3517,12 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
[[package]]
name = "ppv-lite86"
-version = "0.2.17"
+version = "0.2.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04"
+dependencies = [
+ "zerocopy",
+]
[[package]]
name = "precomputed-hash"
@@ -3306,7 +3547,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919"
dependencies = [
"once_cell",
- "toml_edit",
+ "toml_edit 0.19.15",
+]
+
+[[package]]
+name = "proc-macro-crate"
+version = "2.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b00f26d3400549137f92511a46ac1cd8ce37cb5598a96d382381458b992a5d24"
+dependencies = [
+ "toml_datetime",
+ "toml_edit 0.20.2",
]
[[package]]
@@ -3350,27 +3601,18 @@ dependencies = [
[[package]]
name = "quick-xml"
-version = "0.23.1"
+version = "0.32.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "11bafc859c6815fbaffbbbf4229ecb767ac913fecb27f9ad4343662e9ef099ea"
-dependencies = [
- "memchr",
-]
-
-[[package]]
-name = "quick-xml"
-version = "0.29.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "81b9228215d82c7b61490fec1de287136b5de6f5700f6e58ea9ad61a7964ca51"
+checksum = "1d3a6e5838b60e0e8fa7a43f22ade549a37d61f8bdbe636d0d7816191de969c2"
dependencies = [
"memchr",
]
[[package]]
name = "quote"
-version = "1.0.35"
+version = "1.0.37"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef"
+checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af"
dependencies = [
"proc-macro2",
]
@@ -3435,7 +3677,7 @@ version = "0.6.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
dependencies = [
- "getrandom 0.2.10",
+ "getrandom 0.2.15",
]
[[package]]
@@ -3458,15 +3700,15 @@ dependencies = [
[[package]]
name = "raw-window-handle"
-version = "0.5.2"
+version = "0.6.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9"
+checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539"
[[package]]
name = "rayon"
-version = "1.8.1"
+version = "1.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fa7237101a77a10773db45d62004a272517633fbcc3df19d96455ede1122e051"
+checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa"
dependencies = [
"either",
"rayon-core",
@@ -3484,76 +3726,52 @@ dependencies = [
[[package]]
name = "redox_syscall"
-version = "0.2.16"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
-dependencies = [
- "bitflags 1.3.2",
-]
-
-[[package]]
-name = "redox_syscall"
-version = "0.3.5"
+version = "0.5.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834"
dependencies = [
- "bitflags 1.3.2",
+ "bitflags 2.6.0",
]
[[package]]
name = "redox_users"
-version = "0.4.3"
+version = "0.4.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b"
+checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43"
dependencies = [
- "getrandom 0.2.10",
- "redox_syscall 0.2.16",
- "thiserror",
+ "getrandom 0.2.15",
+ "libredox",
+ "thiserror 1.0.69",
]
[[package]]
name = "regex"
-version = "1.10.6"
+version = "1.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619"
+checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191"
dependencies = [
"aho-corasick",
"memchr",
- "regex-automata 0.4.4",
- "regex-syntax 0.8.2",
-]
-
-[[package]]
-name = "regex-automata"
-version = "0.1.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
-dependencies = [
- "regex-syntax 0.6.29",
+ "regex-automata",
+ "regex-syntax",
]
[[package]]
name = "regex-automata"
-version = "0.4.4"
+version = "0.4.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3b7fa1134405e2ec9353fd416b17f8dacd46c473d7d3fd1cf202706a14eb792a"
+checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908"
dependencies = [
"aho-corasick",
"memchr",
- "regex-syntax 0.8.2",
+ "regex-syntax",
]
[[package]]
name = "regex-syntax"
-version = "0.6.29"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
-
-[[package]]
-name = "regex-syntax"
-version = "0.8.2"
+version = "0.8.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
+checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
[[package]]
name = "remove-markdown-links"
@@ -3570,15 +3788,15 @@ version = "0.11.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62"
dependencies = [
- "base64 0.21.2",
+ "base64 0.21.7",
"bytes",
"encoding_rs",
"futures-core",
"futures-util",
"h2",
- "http 0.2.9",
- "http-body 0.4.5",
- "hyper 0.14.27",
+ "http 0.2.12",
+ "http-body 0.4.6",
+ "hyper 0.14.32",
"hyper-tls 0.5.0",
"ipnet",
"js-sys",
@@ -3592,35 +3810,33 @@ dependencies = [
"serde",
"serde_json",
"serde_urlencoded",
- "sync_wrapper",
+ "sync_wrapper 0.1.2",
"system-configuration",
"tokio",
"tokio-native-tls",
- "tokio-util",
"tower-service",
"url",
"wasm-bindgen",
"wasm-bindgen-futures",
- "wasm-streams",
"web-sys",
"winreg 0.50.0",
]
[[package]]
name = "reqwest"
-version = "0.12.4"
+version = "0.12.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "566cafdd92868e0939d3fb961bd0dc25fcfaaed179291093b3d43e6b3150ea10"
+checksum = "a77c62af46e79de0a562e1a9849205ffcb7fc1238876e9bd743357570e04046f"
dependencies = [
- "base64 0.22.0",
+ "base64 0.22.1",
"bytes",
"futures-channel",
"futures-core",
"futures-util",
- "http 1.0.0",
- "http-body 1.0.0",
+ "http 1.2.0",
+ "http-body 1.0.1",
"http-body-util",
- "hyper 1.1.0",
+ "hyper 1.5.2",
"hyper-tls 0.6.0",
"hyper-util",
"ipnet",
@@ -3631,150 +3847,103 @@ dependencies = [
"once_cell",
"percent-encoding",
"pin-project-lite",
- "rustls-pemfile 2.0.0",
+ "rustls-pemfile 2.2.0",
"serde",
"serde_json",
"serde_urlencoded",
- "sync_wrapper",
+ "sync_wrapper 1.0.2",
"tokio",
"tokio-native-tls",
+ "tokio-util",
"tower-service",
"url",
"wasm-bindgen",
"wasm-bindgen-futures",
+ "wasm-streams",
"web-sys",
- "winreg 0.52.0",
-]
-
-[[package]]
-name = "rfd"
-version = "0.10.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0149778bd99b6959285b0933288206090c50e2327f47a9c463bfdbf45c8823ea"
-dependencies = [
- "block",
- "dispatch",
- "glib-sys",
- "gobject-sys",
- "gtk-sys",
- "js-sys",
- "lazy_static",
- "log",
- "objc",
- "objc-foundation",
- "objc_id",
- "raw-window-handle",
- "wasm-bindgen",
- "wasm-bindgen-futures",
- "web-sys",
- "windows 0.37.0",
-]
-
-[[package]]
-name = "ring"
-version = "0.16.20"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc"
-dependencies = [
- "cc",
- "libc",
- "once_cell",
- "spin 0.5.2",
- "untrusted 0.7.1",
- "web-sys",
- "winapi",
+ "windows-registry",
]
[[package]]
name = "ring"
-version = "0.17.7"
+version = "0.17.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "688c63d65483050968b2a8937f7995f443e27041a0f7700aa59b0822aedebb74"
+checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d"
dependencies = [
"cc",
- "getrandom 0.2.10",
+ "cfg-if",
+ "getrandom 0.2.15",
"libc",
- "spin 0.9.8",
- "untrusted 0.9.0",
- "windows-sys 0.48.0",
+ "spin",
+ "untrusted",
+ "windows-sys 0.52.0",
]
[[package]]
name = "rustc-demangle"
-version = "0.1.23"
+version = "0.1.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
+checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f"
[[package]]
name = "rustc_version"
-version = "0.4.0"
+version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
+checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92"
dependencies = [
"semver",
]
[[package]]
name = "rustix"
-version = "0.37.23"
+version = "0.38.42"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4d69718bf81c6127a49dc64e44a742e8bb9213c0ff8869a22c308f84c1d4ab06"
+checksum = "f93dc38ecbab2eb790ff964bb77fa94faf256fd3e73285fd7ba0903b76bedb85"
dependencies = [
- "bitflags 1.3.2",
+ "bitflags 2.6.0",
"errno",
- "io-lifetimes",
"libc",
- "linux-raw-sys 0.3.8",
- "windows-sys 0.48.0",
-]
-
-[[package]]
-name = "rustix"
-version = "0.38.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1ee020b1716f0a80e2ace9b03441a749e402e86712f15f16fe8a8f75afac732f"
-dependencies = [
- "bitflags 2.3.3",
- "errno",
- "libc",
- "linux-raw-sys 0.4.5",
- "windows-sys 0.48.0",
+ "linux-raw-sys",
+ "windows-sys 0.59.0",
]
[[package]]
name = "rustls"
-version = "0.21.6"
+version = "0.22.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1d1feddffcfcc0b33f5c6ce9a29e341e4cd59c3f78e7ee45f4a40c038b1d6cbb"
+checksum = "bf4ef73721ac7bcd79b2b315da7779d8fc09718c6b3d2d1b2d94850eb8c18432"
dependencies = [
"log",
- "ring 0.16.20",
- "rustls-webpki 0.101.2",
- "sct",
+ "ring",
+ "rustls-pki-types",
+ "rustls-webpki",
+ "subtle",
+ "zeroize",
]
[[package]]
name = "rustls"
-version = "0.22.2"
+version = "0.23.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e87c9956bd9807afa1f77e0f7594af32566e830e088a5576d27c5b6f30f49d41"
+checksum = "5065c3f250cbd332cd894be57c40fa52387247659b14a2d6041d121547903b1b"
dependencies = [
"log",
- "ring 0.17.7",
+ "once_cell",
+ "ring",
"rustls-pki-types",
- "rustls-webpki 0.102.2",
+ "rustls-webpki",
"subtle",
"zeroize",
]
[[package]]
name = "rustls-native-certs"
-version = "0.7.0"
+version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8f1fb85efa936c42c6d5fc28d2629bb51e4b2f4b8a5211e297d599cc5a093792"
+checksum = "e5bfb394eeed242e909609f56089eecfe5fda225042e8b171791b9c95f5931e5"
dependencies = [
"openssl-probe",
- "rustls-pemfile 2.0.0",
+ "rustls-pemfile 2.2.0",
"rustls-pki-types",
"schannel",
"security-framework",
@@ -3786,73 +3955,40 @@ version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c"
dependencies = [
- "base64 0.21.2",
+ "base64 0.21.7",
]
[[package]]
name = "rustls-pemfile"
-version = "2.0.0"
+version = "2.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "35e4980fa29e4c4b212ffb3db068a564cbf560e51d3944b7c88bd8bf5bec64f4"
+checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50"
dependencies = [
- "base64 0.21.2",
"rustls-pki-types",
]
[[package]]
name = "rustls-pki-types"
-version = "1.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0a716eb65e3158e90e17cd93d855216e27bde02745ab842f2cab4a39dba1bacf"
-
-[[package]]
-name = "rustls-webpki"
-version = "0.100.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d6207cd5ed3d8dca7816f8f3725513a34609c0c765bf652b8c3cb4cfd87db46b"
-dependencies = [
- "ring 0.16.20",
- "untrusted 0.7.1",
-]
-
-[[package]]
-name = "rustls-webpki"
-version = "0.101.2"
+version = "1.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "513722fd73ad80a71f72b61009ea1b584bcfa1483ca93949c8f290298837fa59"
-dependencies = [
- "ring 0.16.20",
- "untrusted 0.7.1",
-]
+checksum = "d2bf47e6ff922db3825eb750c4e2ff784c6ff8fb9e13046ef6a1d1c5401b0b37"
[[package]]
name = "rustls-webpki"
-version = "0.102.2"
+version = "0.102.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "faaa0a62740bedb9b2ef5afa303da42764c012f743917351dc9a237ea1663610"
+checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9"
dependencies = [
- "ring 0.17.7",
+ "ring",
"rustls-pki-types",
- "untrusted 0.9.0",
+ "untrusted",
]
[[package]]
-name = "rustversion"
-version = "1.0.14"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4"
-
-[[package]]
name = "ryu"
-version = "1.0.15"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741"
-
-[[package]]
-name = "safemem"
-version = "0.3.3"
+version = "1.0.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072"
+checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f"
[[package]]
name = "same-file"
@@ -3865,34 +4001,45 @@ dependencies = [
[[package]]
name = "schannel"
-version = "0.1.22"
+version = "0.1.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88"
+checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d"
dependencies = [
- "windows-sys 0.48.0",
+ "windows-sys 0.59.0",
]
[[package]]
-name = "scoped-tls"
-version = "1.0.1"
+name = "schemars"
+version = "0.8.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294"
+checksum = "09c024468a378b7e36765cd36702b7a90cc3cba11654f6685c8f233408e89e92"
+dependencies = [
+ "dyn-clone",
+ "indexmap 1.9.3",
+ "schemars_derive",
+ "serde",
+ "serde_json",
+ "url",
+ "uuid",
+]
[[package]]
-name = "scopeguard"
-version = "1.2.0"
+name = "schemars_derive"
+version = "0.8.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+checksum = "b1eee588578aff73f856ab961cd2f79e36bc45d7ded33a7562adba4667aecc0e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "serde_derive_internals",
+ "syn 2.0.91",
+]
[[package]]
-name = "sct"
-version = "0.7.0"
+name = "scopeguard"
+version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4"
-dependencies = [
- "ring 0.16.20",
- "untrusted 0.7.1",
-]
+checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
[[package]]
name = "secrecy"
@@ -3905,12 +4052,12 @@ dependencies = [
[[package]]
name = "security-framework"
-version = "2.9.2"
+version = "2.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de"
+checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02"
dependencies = [
- "bitflags 1.3.2",
- "core-foundation",
+ "bitflags 2.6.0",
+ "core-foundation 0.9.4",
"core-foundation-sys",
"libc",
"security-framework-sys",
@@ -3918,9 +4065,9 @@ dependencies = [
[[package]]
name = "security-framework-sys"
-version = "2.9.1"
+version = "2.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a"
+checksum = "1863fd3768cd83c56a7f60faa4dc0d403f1b6df0a38c3c25f44b7894e45370d5"
dependencies = [
"core-foundation-sys",
"libc",
@@ -3948,9 +4095,9 @@ dependencies = [
[[package]]
name = "semver"
-version = "1.0.23"
+version = "1.0.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b"
+checksum = "3cb6eb87a131f756572d7fb904f6e7b68633f09cca868c5df1c4b8d1a694bbba"
dependencies = [
"serde",
]
@@ -3963,7 +4110,7 @@ checksum = "00421ed8fa0c995f07cde48ba6c89e80f2b312f74ff637326f392fbfd23abe02"
dependencies = [
"httpdate",
"native-tls",
- "reqwest 0.12.4",
+ "reqwest 0.12.9",
"sentry-backtrace",
"sentry-contexts",
"sentry-core 0.32.3",
@@ -4079,7 +4226,7 @@ dependencies = [
"rand 0.8.5",
"serde",
"serde_json",
- "thiserror",
+ "thiserror 1.0.69",
"time",
"url",
"uuid",
@@ -4096,7 +4243,7 @@ dependencies = [
"rand 0.8.5",
"serde",
"serde_json",
- "thiserror",
+ "thiserror 1.0.69",
"time",
"url",
"uuid",
@@ -4104,32 +4251,53 @@ dependencies = [
[[package]]
name = "serde"
-version = "1.0.215"
+version = "1.0.216"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6513c1ad0b11a9376da888e3e0baa0077f1aed55c17f50e7b2397136129fb88f"
+checksum = "0b9781016e935a97e8beecf0c933758c97a5520d32930e460142b4cd80c6338e"
dependencies = [
"serde_derive",
]
[[package]]
+name = "serde-untagged"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2676ba99bd82f75cae5cbd2c8eda6fa0b8760f18978ea840e980dd5567b5c5b6"
+dependencies = [
+ "erased-serde",
+ "serde",
+ "typeid",
+]
+
+[[package]]
name = "serde_derive"
-version = "1.0.215"
+version = "1.0.216"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0"
+checksum = "46f859dbbf73865c6627ed570e78961cd3ac92407a2d117204c49232485da55e"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.91",
+]
+
+[[package]]
+name = "serde_derive_internals"
+version = "0.29.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.91",
]
[[package]]
name = "serde_json"
-version = "1.0.133"
+version = "1.0.134"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c7fceb2473b9166b2294ef05efcb65a3db80803f0b03ef86a5fc88a2b85ee377"
+checksum = "d00f4175c42ee48b15416f6193a959ba3a0d67fc699a0db9ad12df9f83991c7d"
dependencies = [
- "indexmap 2.2.5",
- "itoa 1.0.9",
+ "itoa 1.0.14",
"memchr",
"ryu",
"serde",
@@ -4137,30 +4305,30 @@ dependencies = [
[[package]]
name = "serde_path_to_error"
-version = "0.1.15"
+version = "0.1.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ebd154a240de39fdebcf5775d2675c204d7c13cf39a4c697be6493c8e734337c"
+checksum = "af99884400da37c88f5e9146b7f1fd0fbcae8f6eec4e9da38b67d05486f814a6"
dependencies = [
- "itoa 1.0.9",
+ "itoa 1.0.14",
"serde",
]
[[package]]
name = "serde_repr"
-version = "0.1.16"
+version = "0.1.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8725e1dfadb3a50f7e5ce0b1a540466f6ed3fe7a0fca2ac2b8b831d31316bd00"
+checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.91",
]
[[package]]
name = "serde_spanned"
-version = "0.6.3"
+version = "0.6.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "96426c9936fd7a0124915f9185ea1d20aa9445cc9821142f0a73bc9207a2e186"
+checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1"
dependencies = [
"serde",
]
@@ -4172,22 +4340,24 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
dependencies = [
"form_urlencoded",
- "itoa 1.0.9",
+ "itoa 1.0.14",
"ryu",
"serde",
]
[[package]]
name = "serde_with"
-version = "3.1.0"
+version = "3.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "21e47d95bc83ed33b2ecf84f4187ad1ab9685d18ff28db000c99deac8ce180e3"
+checksum = "8e28bdad6db2b8340e449f7108f020b3b092e8583a9e3fb82713e1d4e71fe817"
dependencies = [
- "base64 0.21.2",
+ "base64 0.22.1",
"chrono",
"hex",
"indexmap 1.9.3",
+ "indexmap 2.7.0",
"serde",
+ "serde_derive",
"serde_json",
"serde_with_macros",
"time",
@@ -4195,14 +4365,14 @@ dependencies = [
[[package]]
name = "serde_with_macros"
-version = "3.1.0"
+version = "3.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ea3cee93715c2e266b9338b7544da68a9f24e227722ba482bd1c024367c77c65"
+checksum = "9d846214a9854ef724f3da161b426242d8de7c1fc7de2f89bb1efcb154dca79d"
dependencies = [
"darling",
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.91",
]
[[package]]
@@ -4239,9 +4409,9 @@ dependencies = [
[[package]]
name = "sha1"
-version = "0.10.5"
+version = "0.10.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3"
+checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba"
dependencies = [
"cfg-if",
"cpufeatures",
@@ -4250,9 +4420,9 @@ dependencies = [
[[package]]
name = "sha2"
-version = "0.10.7"
+version = "0.10.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8"
+checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8"
dependencies = [
"cfg-if",
"cpufeatures",
@@ -4260,39 +4430,16 @@ dependencies = [
]
[[package]]
-name = "sharded-slab"
-version = "0.1.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31"
-dependencies = [
- "lazy_static",
-]
-
-[[package]]
-name = "shared_child"
-version = "1.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b0d94659ad3c2137fef23ae75b03d5241d633f8acded53d672decfa0e6e0caef"
-dependencies = [
- "libc",
- "winapi",
-]
-
-[[package]]
-name = "signal-hook"
-version = "0.3.17"
+name = "shlex"
+version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801"
-dependencies = [
- "libc",
- "signal-hook-registry",
-]
+checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
[[package]]
name = "signal-hook-registry"
-version = "1.4.1"
+version = "1.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1"
+checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1"
dependencies = [
"libc",
]
@@ -4311,108 +4458,112 @@ checksum = "adc4e5204eb1910f40f9cfa375f6f05b68c3abac4b6fd879c8ff5e7ae8a0a085"
dependencies = [
"num-bigint",
"num-traits",
- "thiserror",
+ "thiserror 1.0.69",
"time",
]
[[package]]
name = "siphasher"
-version = "0.3.10"
+version = "0.3.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de"
+checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d"
[[package]]
name = "slab"
-version = "0.4.8"
+version = "0.4.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d"
+checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
dependencies = [
"autocfg",
]
[[package]]
name = "smallvec"
-version = "1.11.0"
+version = "1.13.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9"
+checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67"
[[package]]
name = "snafu"
-version = "0.8.1"
+version = "0.8.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5ed22871b3fe6eff9f1b48f6cbd54149ff8e9acd740dea9146092435f9c43bd3"
+checksum = "223891c85e2a29c3fe8fb900c1fae5e69c2e42415e3177752e8718475efa5019"
dependencies = [
"snafu-derive",
]
[[package]]
name = "snafu-derive"
-version = "0.8.1"
+version = "0.8.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4651148226ec36010993fcba6c3381552e8463e9f3e337b75af202b0688b5274"
+checksum = "03c3c6b7927ffe7ecaa769ee0e3994da3b8cafc8f444578982c83ecb161af917"
dependencies = [
- "heck 0.4.1",
+ "heck 0.5.0",
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.91",
]
[[package]]
name = "socket2"
-version = "0.4.9"
+version = "0.5.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662"
+checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8"
dependencies = [
"libc",
- "winapi",
+ "windows-sys 0.52.0",
]
[[package]]
-name = "socket2"
-version = "0.5.5"
+name = "softbuffer"
+version = "0.4.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9"
+checksum = "18051cdd562e792cad055119e0cdb2cfc137e44e3987532e0f9659a77931bb08"
dependencies = [
- "libc",
- "windows-sys 0.48.0",
+ "bytemuck",
+ "cfg_aliases",
+ "core-graphics",
+ "foreign-types 0.5.0",
+ "js-sys",
+ "log",
+ "objc2",
+ "objc2-foundation",
+ "objc2-quartz-core",
+ "raw-window-handle",
+ "redox_syscall",
+ "wasm-bindgen",
+ "web-sys",
+ "windows-sys 0.59.0",
]
[[package]]
-name = "soup2"
-version = "0.2.1"
+name = "soup3"
+version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b2b4d76501d8ba387cf0fefbe055c3e0a59891d09f0f995ae4e4b16f6b60f3c0"
+checksum = "471f924a40f31251afc77450e781cb26d55c0b650842efafc9c6cbd2f7cc4f9f"
dependencies = [
- "bitflags 1.3.2",
+ "futures-channel",
"gio",
"glib",
"libc",
- "once_cell",
- "soup2-sys",
+ "soup3-sys",
]
[[package]]
-name = "soup2-sys"
-version = "0.2.0"
+name = "soup3-sys"
+version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "009ef427103fcb17f802871647a7fa6c60cbb654b4c4e4c0ac60a31c5f6dc9cf"
+checksum = "7ebe8950a680a12f24f15ebe1bf70db7af98ad242d9db43596ad3108aab86c27"
dependencies = [
- "bitflags 1.3.2",
"gio-sys",
"glib-sys",
"gobject-sys",
"libc",
- "system-deps 5.0.0",
+ "system-deps",
]
[[package]]
name = "spin"
-version = "0.5.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
-
-[[package]]
-name = "spin"
version = "0.9.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
@@ -4424,15 +4575,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
[[package]]
-name = "state"
-version = "0.5.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dbe866e1e51e8260c9eed836a042a5e7f6726bb2b411dffeaa712e19c388f23b"
-dependencies = [
- "loom",
-]
-
-[[package]]
name = "static_assertions"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -4440,25 +4582,19 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
[[package]]
name = "steamlocate"
-version = "2.0.0-beta.2"
+version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c3b6a4810c4e7fecb0123a9a8ba99b335c17d92e636c265ef99108ee4734c812"
+checksum = "cb96708f2e7cadc6c5bde3f3e12e3d6565bbd4d8b9e3da057035881c33136d9d"
dependencies = [
"crc",
- "dirs",
+ "home",
"keyvalues-parser",
"keyvalues-serde",
"serde",
- "winreg 0.51.0",
+ "winreg 0.52.0",
]
[[package]]
-name = "str-buf"
-version = "1.0.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9e08d8363704e6c71fc928674353e6b7c23dcea9d82d7012c8faf2a3a025f8d0"
-
-[[package]]
name = "string_cache"
version = "0.8.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -4486,15 +4622,26 @@ dependencies = [
[[package]]
name = "strsim"
-version = "0.10.0"
+version = "0.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
[[package]]
name = "subtle"
-version = "2.5.0"
+version = "2.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
+
+[[package]]
+name = "swift-rs"
+version = "1.0.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc"
+checksum = "4057c98e2e852d51fdcfca832aac7b571f6b351ad159f9eda5db1655f8d0c4d7"
+dependencies = [
+ "base64 0.21.7",
+ "serde",
+ "serde_json",
+]
[[package]]
name = "syn"
@@ -4509,9 +4656,9 @@ dependencies = [
[[package]]
name = "syn"
-version = "2.0.90"
+version = "2.0.91"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "919d3b74a5dd0ccd15aeb8f93e7006bd9e14c295087c9896a110f490752bcf31"
+checksum = "d53cbcb5a243bd33b7858b1d7f4aca2153490815872d86d955d6ea29f743c035"
dependencies = [
"proc-macro2",
"quote",
@@ -4525,16 +4672,23 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160"
[[package]]
-name = "sys-locale"
-version = "0.2.4"
+name = "sync_wrapper"
+version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f8a11bd9c338fdba09f7881ab41551932ad42e405f61d01e8406baea71c07aee"
+checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263"
dependencies = [
- "js-sys",
- "libc",
- "wasm-bindgen",
- "web-sys",
- "windows-sys 0.45.0",
+ "futures-core",
+]
+
+[[package]]
+name = "synstructure"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.91",
]
[[package]]
@@ -4559,7 +4713,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7"
dependencies = [
"bitflags 1.3.2",
- "core-foundation",
+ "core-foundation 0.9.4",
"system-configuration-sys",
]
@@ -4575,54 +4729,34 @@ dependencies = [
[[package]]
name = "system-deps"
-version = "5.0.0"
+version = "6.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "18db855554db7bd0e73e06cf7ba3df39f97812cb11d3f75e71c39bf45171797e"
+checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349"
dependencies = [
- "cfg-expr 0.9.1",
- "heck 0.3.3",
- "pkg-config",
- "toml 0.5.11",
- "version-compare 0.0.11",
-]
-
-[[package]]
-name = "system-deps"
-version = "6.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "30c2de8a4d8f4b823d634affc9cd2a74ec98c53a756f317e529a48046cbf71f3"
-dependencies = [
- "cfg-expr 0.15.4",
- "heck 0.4.1",
+ "cfg-expr",
+ "heck 0.5.0",
"pkg-config",
- "toml 0.7.6",
- "version-compare 0.1.1",
+ "toml 0.8.2",
+ "version-compare",
]
[[package]]
name = "tao"
-version = "0.16.2"
+version = "0.30.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6a6d198e01085564cea63e976ad1566c1ba2c2e4cc79578e35d9f05521505e31"
+checksum = "6682a07cf5bab0b8a2bd20d0a542917ab928b5edb75ebd4eda6b05cbaab872da"
dependencies = [
- "bitflags 1.3.2",
- "cairo-rs",
- "cc",
+ "bitflags 2.6.0",
"cocoa",
- "core-foundation",
+ "core-foundation 0.10.0",
"core-graphics",
"crossbeam-channel",
"dispatch",
- "gdk",
- "gdk-pixbuf",
- "gdk-sys",
+ "dlopen2",
+ "dpi",
"gdkwayland-sys",
"gdkx11-sys",
- "gio",
- "glib",
- "glib-sys",
"gtk",
- "image",
"instant",
"jni",
"lazy_static",
@@ -4634,34 +4768,33 @@ dependencies = [
"objc",
"once_cell",
"parking_lot",
- "png",
"raw-window-handle",
"scopeguard",
- "serde",
"tao-macros",
"unicode-segmentation",
- "uuid",
- "windows 0.39.0",
- "windows-implement",
+ "url",
+ "windows 0.58.0",
+ "windows-core 0.58.0",
+ "windows-version",
"x11-dl",
]
[[package]]
name = "tao-macros"
-version = "0.1.1"
+version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3b27a4bcc5eb524658234589bdffc7e7bfb996dbae6ce9393bfd39cb4159b445"
+checksum = "f4e16beb8b2ac17db28eab8bca40e62dbfbb34c0fcdc6d9826b11b7b5d047dfd"
dependencies = [
"proc-macro2",
"quote",
- "syn 1.0.109",
+ "syn 2.0.91",
]
[[package]]
name = "tar"
-version = "0.4.39"
+version = "0.4.43"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ec96d2ffad078296368d46ff1cb309be1c23c513b4ab0e22a45de0185275ac96"
+checksum = "c65998313f8e17d0d553d28f91a0df93e4dbbbf770279c7bc21ca0f09ea1a1f6"
dependencies = [
"filetime",
"libc",
@@ -4670,99 +4803,89 @@ dependencies = [
[[package]]
name = "target-lexicon"
-version = "0.12.11"
+version = "0.12.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9d0e916b1148c8e263850e1ebcbd046f333e0683c724876bb0da63ea4373dc8a"
+checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1"
[[package]]
name = "tauri"
-version = "1.6.8"
+version = "2.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "77567d2b3b74de4588d544147142d02297f3eaa171a25a065252141d8597a516"
+checksum = "e545de0a2dfe296fa67db208266cd397c5a55ae782da77973ef4c4fac90e9f2c"
dependencies = [
"anyhow",
- "base64 0.21.2",
"bytes",
- "cocoa",
- "dirs-next",
+ "dirs",
"dunce",
"embed_plist",
- "encoding_rs",
- "flate2",
"futures-util",
- "getrandom 0.2.10",
- "glib",
+ "getrandom 0.2.15",
"glob",
"gtk",
"heck 0.5.0",
- "http 0.2.9",
- "ignore",
- "indexmap 1.9.3",
- "minisign-verify",
- "nix 0.26.2",
- "notify-rust",
- "objc",
- "once_cell",
- "open 3.2.0",
- "os_info",
- "os_pipe",
+ "http 1.2.0",
+ "jni",
+ "libc",
+ "log",
+ "mime",
+ "muda",
+ "objc2",
+ "objc2-app-kit",
+ "objc2-foundation",
"percent-encoding",
- "rand 0.8.5",
+ "plist",
"raw-window-handle",
- "regex",
- "reqwest 0.11.27",
- "rfd",
- "semver",
+ "reqwest 0.12.9",
"serde",
"serde_json",
"serde_repr",
"serialize-to-javascript",
- "shared_child",
- "state",
- "sys-locale",
- "tar",
+ "swift-rs",
+ "tauri-build",
"tauri-macros",
"tauri-runtime",
"tauri-runtime-wry",
"tauri-utils",
- "tempfile",
- "thiserror",
- "time",
+ "thiserror 2.0.9",
"tokio",
+ "tray-icon",
"url",
- "uuid",
+ "urlpattern",
"webkit2gtk",
"webview2-com",
- "windows 0.39.0",
- "zip",
+ "window-vibrancy",
+ "windows 0.58.0",
]
[[package]]
name = "tauri-build"
-version = "1.5.2"
+version = "2.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ab30cba12974d0f9b09794f61e72cad6da2142d3ceb81e519321bab86ce53312"
+checksum = "7bd2a4bcfaf5fb9f4be72520eefcb61ae565038f8ccba2a497d8c28f463b8c01"
dependencies = [
"anyhow",
"cargo_toml",
- "dirs-next",
+ "dirs",
+ "glob",
"heck 0.5.0",
"json-patch",
+ "schemars",
"semver",
"serde",
"serde_json",
"tauri-utils",
"tauri-winres",
+ "toml 0.8.2",
"walkdir",
]
[[package]]
name = "tauri-codegen"
-version = "1.4.4"
+version = "2.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c1aed706708ff1200ec12de9cfbf2582b5d8ec05f6a7293911091effbd22036b"
+checksum = "bf79faeecf301d3e969b1fae977039edb77a4c1f25cc0a961be298b54bff97cf"
dependencies = [
- "base64 0.21.2",
+ "base64 0.22.1",
"brotli",
"ico",
"json-patch",
@@ -4770,98 +4893,130 @@ dependencies = [
"png",
"proc-macro2",
"quote",
- "regex",
"semver",
"serde",
"serde_json",
"sha2",
+ "syn 2.0.91",
"tauri-utils",
- "thiserror",
+ "thiserror 2.0.9",
"time",
+ "url",
"uuid",
"walkdir",
]
[[package]]
name = "tauri-macros"
-version = "1.4.5"
+version = "2.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b88f831d2973ae4f81a706a0004e67dac87f2e4439973bbe98efbd73825d8ede"
+checksum = "c52027c8c5afb83166dacddc092ee8fff50772f9646d461d8c33ee887e447a03"
dependencies = [
"heck 0.5.0",
"proc-macro2",
"quote",
- "syn 1.0.109",
+ "syn 2.0.91",
"tauri-codegen",
"tauri-utils",
]
[[package]]
-name = "tauri-plugin-store"
-version = "0.0.0"
-source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v1#4aeee08cde4cf8253b7b52c2204655ac8bb6769d"
+name = "tauri-plugin"
+version = "2.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e753f2a30933a9bbf0a202fa47d7cc4a3401f06e8d6dcc53b79aa62954828c79"
dependencies = [
- "log",
+ "anyhow",
+ "glob",
+ "plist",
+ "schemars",
+ "serde",
+ "serde_json",
+ "tauri-utils",
+ "toml 0.8.2",
+ "walkdir",
+]
+
+[[package]]
+name = "tauri-plugin-opener"
+version = "2.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "63ac39033ef1bb4d52da4878c3d8ab6d80b0a569d69208c884e6d4d54eb427b9"
+dependencies = [
+ "dunce",
+ "glob",
+ "objc2-app-kit",
+ "objc2-foundation",
+ "open",
+ "schemars",
"serde",
"serde_json",
"tauri",
- "thiserror",
+ "tauri-plugin",
+ "thiserror 2.0.9",
+ "url",
+ "windows 0.58.0",
+ "zbus",
]
[[package]]
name = "tauri-runtime"
-version = "0.14.4"
+version = "2.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3068ed62b63dedc705558f4248c7ecbd5561f0f8050949859ea0db2326f26012"
+checksum = "cce18d43f80d4aba3aa8a0c953bbe835f3d0f2370aca75e8dbb14bd4bab27958"
dependencies = [
+ "dpi",
"gtk",
- "http 0.2.9",
- "http-range",
- "rand 0.8.5",
+ "http 1.2.0",
+ "jni",
"raw-window-handle",
"serde",
"serde_json",
"tauri-utils",
- "thiserror",
+ "thiserror 2.0.9",
"url",
- "uuid",
- "webview2-com",
- "windows 0.39.0",
+ "windows 0.58.0",
]
[[package]]
name = "tauri-runtime-wry"
-version = "0.14.9"
+version = "2.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d4c3db170233096aa30330feadcd895bf9317be97e624458560a20e814db7955"
+checksum = "9f442a38863e10129ffe2cec7bd09c2dcf8a098a3a27801a476a304d5bb991d2"
dependencies = [
- "arboard",
- "cocoa",
"gtk",
+ "http 1.2.0",
+ "jni",
+ "log",
+ "objc2",
+ "objc2-app-kit",
+ "objc2-foundation",
"percent-encoding",
- "rand 0.8.5",
"raw-window-handle",
+ "softbuffer",
+ "tao",
"tauri-runtime",
"tauri-utils",
- "uuid",
+ "url",
"webkit2gtk",
"webview2-com",
- "windows 0.39.0",
+ "windows 0.58.0",
"wry",
]
[[package]]
name = "tauri-utils"
-version = "1.6.0"
+version = "2.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2826db448309d382dac14d520f0c0a40839b87b57b977e59cf5f296b3ace6a93"
+checksum = "9271a88f99b4adea0dc71d0baca4505475a0bbd139fb135f62958721aaa8fe54"
dependencies = [
"brotli",
+ "cargo_metadata",
"ctor",
"dunce",
"glob",
- "heck 0.5.0",
"html5ever",
+ "http 1.2.0",
"infer",
"json-patch",
"kuchikiki",
@@ -4870,14 +5025,20 @@ dependencies = [
"phf 0.11.2",
"proc-macro2",
"quote",
+ "regex",
+ "schemars",
"semver",
"serde",
+ "serde-untagged",
"serde_json",
"serde_with",
- "thiserror",
+ "swift-rs",
+ "thiserror 2.0.9",
+ "toml 0.8.2",
"url",
+ "urlpattern",
+ "uuid",
"walkdir",
- "windows-version",
]
[[package]]
@@ -4887,30 +5048,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5993dc129e544393574288923d1ec447c857f3f644187f4fbf7d9a875fbfc4fb"
dependencies = [
"embed-resource",
- "toml 0.7.6",
-]
-
-[[package]]
-name = "tauri-winrt-notification"
-version = "0.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4f5bff1d532fead7c43324a0fa33643b8621a47ce2944a633be4cb6c0240898f"
-dependencies = [
- "quick-xml 0.23.1",
- "windows 0.39.0",
+ "toml 0.7.8",
]
[[package]]
name = "tempfile"
-version = "3.7.0"
+version = "3.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5486094ee78b2e5038a6382ed7645bc084dc2ec433426ca4c3cb61e2007b8998"
+checksum = "28cce251fcbc87fac86a866eeb0d6c2d536fc16d06f184bb61aeae11aa4cee0c"
dependencies = [
"cfg-if",
- "fastrand 2.0.0",
- "redox_syscall 0.3.5",
- "rustix 0.38.6",
- "windows-sys 0.48.0",
+ "fastrand",
+ "once_cell",
+ "rustix",
+ "windows-sys 0.59.0",
]
[[package]]
@@ -4926,9 +5077,9 @@ dependencies = [
[[package]]
name = "termcolor"
-version = "1.2.0"
+version = "1.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
+checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755"
dependencies = [
"winapi-util",
]
@@ -4941,53 +5092,52 @@ checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c"
[[package]]
name = "thiserror"
-version = "1.0.58"
+version = "1.0.69"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "03468839009160513471e86a034bb2c5c0e4baae3b43f79ffc55c4a5427b3297"
+checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52"
dependencies = [
- "thiserror-impl",
+ "thiserror-impl 1.0.69",
]
[[package]]
-name = "thiserror-impl"
-version = "1.0.58"
+name = "thiserror"
+version = "2.0.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c61f3ba182994efc43764a46c018c347bc492c79f024e705f46567b418f6d4f7"
+checksum = "f072643fd0190df67a8bab670c20ef5d8737177d6ac6b2e9a236cb096206b2cc"
dependencies = [
- "proc-macro2",
- "quote",
- "syn 2.0.90",
+ "thiserror-impl 2.0.9",
]
[[package]]
-name = "thread_local"
-version = "1.1.7"
+name = "thiserror-impl"
+version = "1.0.69"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152"
+checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
dependencies = [
- "cfg-if",
- "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.91",
]
[[package]]
-name = "tiff"
-version = "0.8.1"
+name = "thiserror-impl"
+version = "2.0.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7449334f9ff2baf290d55d73983a7d6fa15e01198faef72af07e2a8db851e471"
+checksum = "7b50fa271071aae2e6ee85f842e2e28ba8cd2c5fb67f11fcb1fd70b276f9e7d4"
dependencies = [
- "flate2",
- "jpeg-decoder",
- "weezl",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.91",
]
[[package]]
name = "time"
-version = "0.3.36"
+version = "0.3.37"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885"
+checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21"
dependencies = [
"deranged",
- "itoa 1.0.9",
+ "itoa 1.0.14",
"num-conv",
"powerfmt",
"serde",
@@ -5003,34 +5153,29 @@ checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3"
[[package]]
name = "time-macros"
-version = "0.2.18"
+version = "0.2.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf"
+checksum = "2834e6017e3e5e4b9834939793b282bc03b37a3336245fa820e35e233e2a85de"
dependencies = [
"num-conv",
"time-core",
]
[[package]]
-name = "tinyvec"
-version = "1.6.0"
+name = "tinystr"
+version = "0.7.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f"
dependencies = [
- "tinyvec_macros",
+ "displaydoc",
+ "zerovec",
]
[[package]]
-name = "tinyvec_macros"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
-
-[[package]]
name = "tokio"
-version = "1.39.2"
+version = "1.42.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "daa4fb1bc778bd6f04cbfc4bb2d06a7396a8f299dc33ea1900cedaa316f467b1"
+checksum = "5cec9b21b0450273377fc97bd4c33a8acffc8c996c987a7c5b319a0083707551"
dependencies = [
"backtrace",
"bytes",
@@ -5039,7 +5184,7 @@ dependencies = [
"parking_lot",
"pin-project-lite",
"signal-hook-registry",
- "socket2 0.5.5",
+ "socket2",
"tokio-macros",
"windows-sys 0.52.0",
]
@@ -5052,7 +5197,7 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.91",
]
[[package]]
@@ -5071,44 +5216,46 @@ version = "0.25.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "775e0c0f0adb3a2f22a00c4745d728b479985fc15ee7ca6a2608388c5569860f"
dependencies = [
- "rustls 0.22.2",
+ "rustls 0.22.4",
"rustls-pki-types",
"tokio",
]
[[package]]
name = "tokio-util"
-version = "0.7.8"
+version = "0.7.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d"
+checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078"
dependencies = [
"bytes",
"futures-core",
"futures-sink",
"pin-project-lite",
"tokio",
- "tracing",
]
[[package]]
name = "toml"
-version = "0.5.11"
+version = "0.7.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
+checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257"
dependencies = [
"serde",
+ "serde_spanned",
+ "toml_datetime",
+ "toml_edit 0.19.15",
]
[[package]]
name = "toml"
-version = "0.7.6"
+version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c17e963a819c331dcacd7ab957d80bc2b9a9c1e71c804826d2f283dd65306542"
+checksum = "185d8ab0dfbb35cf1399a6344d8484209c088f75f8f68230da55d48d95d43e3d"
dependencies = [
"serde",
"serde_spanned",
"toml_datetime",
- "toml_edit",
+ "toml_edit 0.20.2",
]
[[package]]
@@ -5122,11 +5269,24 @@ dependencies = [
[[package]]
name = "toml_edit"
-version = "0.19.14"
+version = "0.19.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f8123f27e969974a3dfba720fdb560be359f57b44302d280ba72e76a74480e8a"
+checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421"
dependencies = [
- "indexmap 2.2.5",
+ "indexmap 2.7.0",
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "winnow",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.20.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338"
+dependencies = [
+ "indexmap 2.7.0",
"serde",
"serde_spanned",
"toml_datetime",
@@ -5152,15 +5312,15 @@ dependencies = [
[[package]]
name = "tower-http"
-version = "0.5.1"
+version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0da193277a4e2c33e59e09b5861580c33dd0a637c3883d0fa74ba40c0374af2e"
+checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5"
dependencies = [
- "bitflags 2.3.3",
+ "bitflags 2.6.0",
"bytes",
"futures-util",
- "http 1.0.0",
- "http-body 1.0.0",
+ "http 1.2.0",
+ "http-body 1.0.1",
"http-body-util",
"iri-string",
"pin-project-lite",
@@ -5172,23 +5332,22 @@ dependencies = [
[[package]]
name = "tower-layer"
-version = "0.3.2"
+version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0"
+checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e"
[[package]]
name = "tower-service"
-version = "0.3.2"
+version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
+checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3"
[[package]]
name = "tracing"
-version = "0.1.37"
+version = "0.1.41"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
+checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0"
dependencies = [
- "cfg-if",
"log",
"pin-project-lite",
"tracing-attributes",
@@ -5197,124 +5356,109 @@ dependencies = [
[[package]]
name = "tracing-attributes"
-version = "0.1.26"
+version = "0.1.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab"
+checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.91",
]
[[package]]
name = "tracing-core"
-version = "0.1.31"
+version = "0.1.33"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a"
+checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c"
dependencies = [
"once_cell",
"valuable",
]
[[package]]
-name = "tracing-log"
-version = "0.1.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922"
-dependencies = [
- "lazy_static",
- "log",
- "tracing-core",
-]
-
-[[package]]
name = "tracing-subscriber"
-version = "0.3.17"
+version = "0.3.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77"
+checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008"
dependencies = [
- "matchers",
- "nu-ansi-term",
- "once_cell",
- "regex",
- "sharded-slab",
- "smallvec",
- "thread_local",
- "tracing",
"tracing-core",
- "tracing-log",
]
[[package]]
-name = "tree_magic_mini"
-version = "3.0.3"
+name = "tray-icon"
+version = "0.19.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "91adfd0607cacf6e4babdb870e9bec4037c1c4b151cfd279ccefc5e0c7feaa6d"
+checksum = "d48a05076dd272615d03033bf04f480199f7d1b66a8ac64d75c625fc4a70c06b"
dependencies = [
- "bytecount",
- "fnv",
- "lazy_static",
- "nom",
+ "core-graphics",
+ "crossbeam-channel",
+ "dirs",
+ "libappindicator",
+ "muda",
+ "objc2",
+ "objc2-app-kit",
+ "objc2-foundation",
"once_cell",
- "petgraph",
-]
-
-[[package]]
-name = "treediff"
-version = "4.0.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "52984d277bdf2a751072b5df30ec0377febdb02f7696d64c2d7d54630bac4303"
-dependencies = [
- "serde_json",
+ "png",
+ "serde",
+ "thiserror 1.0.69",
+ "windows-sys 0.59.0",
]
[[package]]
name = "try-lock"
-version = "0.2.4"
+version = "0.2.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
+checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
[[package]]
name = "ts-rs"
-version = "10.0.0"
+version = "10.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3a2f31991cee3dce1ca4f929a8a04fdd11fd8801aac0f2030b0fa8a0a3fef6b9"
+checksum = "e640d9b0964e9d39df633548591090ab92f7a4567bc31d3891af23471a3365c6"
dependencies = [
"lazy_static",
- "thiserror",
+ "thiserror 2.0.9",
"ts-rs-macros",
]
[[package]]
name = "ts-rs-macros"
-version = "10.0.0"
+version = "10.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0ea0b99e8ec44abd6f94a18f28f7934437809dd062820797c52401298116f70e"
+checksum = "0e9d8656589772eeec2cf7a8264d9cda40fb28b9bc53118ceb9e8c07f8f38730"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.91",
"termcolor",
]
[[package]]
+name = "typeid"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e13db2e0ccd5e14a544e8a246ba2312cd25223f616442d7f2cb0e3db614236e"
+
+[[package]]
name = "typenum"
-version = "1.16.0"
+version = "1.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
+checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
[[package]]
name = "ucd-trie"
-version = "0.1.6"
+version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9"
+checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971"
[[package]]
name = "uds_windows"
-version = "1.0.2"
+version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ce65604324d3cce9b966701489fbd0cf318cb1f7bd9dd07ac9a4ee6fb791930d"
+checksum = "89daebc3e6fd160ac4aa9fc8b3bf71e1f74fbf92367ae71fb83a037e8bf164b9"
dependencies = [
+ "memoffset",
"tempfile",
"winapi",
]
@@ -5329,43 +5473,63 @@ dependencies = [
]
[[package]]
-name = "unicode-bidi"
-version = "0.3.13"
+name = "unic-char-property"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221"
+dependencies = [
+ "unic-char-range",
+]
+
+[[package]]
+name = "unic-char-range"
+version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
+checksum = "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc"
[[package]]
-name = "unicode-ident"
-version = "1.0.11"
+name = "unic-common"
+version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c"
+checksum = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc"
[[package]]
-name = "unicode-normalization"
-version = "0.1.22"
+name = "unic-ucd-ident"
+version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+checksum = "e230a37c0381caa9219d67cf063aa3a375ffed5bf541a452db16e744bdab6987"
dependencies = [
- "tinyvec",
+ "unic-char-property",
+ "unic-char-range",
+ "unic-ucd-version",
]
[[package]]
-name = "unicode-segmentation"
-version = "1.10.1"
+name = "unic-ucd-version"
+version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
+checksum = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4"
+dependencies = [
+ "unic-common",
+]
[[package]]
-name = "unicode-xid"
-version = "0.2.4"
+name = "unicode-ident"
+version = "1.0.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c"
+checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83"
[[package]]
-name = "untrusted"
-version = "0.7.1"
+name = "unicode-segmentation"
+version = "1.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
+checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493"
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853"
[[package]]
name = "untrusted"
@@ -5375,26 +5539,26 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
[[package]]
name = "ureq"
-version = "2.7.1"
+version = "2.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0b11c96ac7ee530603dcdf68ed1557050f374ce55a5a07193ebf8cbc9f8927e9"
+checksum = "02d1a66277ed75f640d608235660df48c8e3c19f3b4edb6a263315626cc3c01d"
dependencies = [
- "base64 0.21.2",
+ "base64 0.22.1",
"flate2",
"log",
"native-tls",
"once_cell",
- "rustls 0.21.6",
- "rustls-webpki 0.100.1",
+ "rustls 0.23.20",
+ "rustls-pki-types",
"url",
"webpki-roots",
]
[[package]]
name = "url"
-version = "2.4.0"
+version = "2.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "50bff7831e19200a85b17131d085c25d7811bc4e186efdaf54bbd132994a88cb"
+checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60"
dependencies = [
"form_urlencoded",
"idna",
@@ -5403,18 +5567,42 @@ dependencies = [
]
[[package]]
+name = "urlpattern"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70acd30e3aa1450bc2eece896ce2ad0d178e9c079493819301573dae3c37ba6d"
+dependencies = [
+ "regex",
+ "serde",
+ "unic-ucd-ident",
+ "url",
+]
+
+[[package]]
name = "utf-8"
version = "0.7.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
[[package]]
+name = "utf16_iter"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246"
+
+[[package]]
+name = "utf8_iter"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be"
+
+[[package]]
name = "uuid"
-version = "1.4.1"
+version = "1.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "79daa5ed5740825c40b389c5e50312b9c86df53fccd33f281df655642b43869d"
+checksum = "f8c5f0a0af699448548ad1a2fbf920fb4bee257eae39953ba95cb84891a0446a"
dependencies = [
- "getrandom 0.2.10",
+ "getrandom 0.2.15",
"serde",
]
@@ -5432,21 +5620,15 @@ checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
[[package]]
name = "version-compare"
-version = "0.0.11"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1c18c859eead79d8b95d09e4678566e8d70105c4e7b251f707a03df32442661b"
-
-[[package]]
-name = "version-compare"
-version = "0.1.1"
+version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "579a42fc0b8e0c63b76519a339be31bed574929511fa53c1a3acae26eb258f29"
+checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b"
[[package]]
name = "version_check"
-version = "0.9.4"
+version = "0.9.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
[[package]]
name = "vswhom"
@@ -5469,16 +5651,10 @@ dependencies = [
]
[[package]]
-name = "waker-fn"
-version = "1.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca"
-
-[[package]]
name = "walkdir"
-version = "2.3.3"
+version = "2.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698"
+checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b"
dependencies = [
"same-file",
"winapi-util",
@@ -5507,46 +5683,47 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
[[package]]
name = "wasm-bindgen"
-version = "0.2.87"
+version = "0.2.99"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342"
+checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396"
dependencies = [
"cfg-if",
+ "once_cell",
"wasm-bindgen-macro",
]
[[package]]
name = "wasm-bindgen-backend"
-version = "0.2.87"
+version = "0.2.99"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd"
+checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79"
dependencies = [
"bumpalo",
"log",
- "once_cell",
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.91",
"wasm-bindgen-shared",
]
[[package]]
name = "wasm-bindgen-futures"
-version = "0.4.37"
+version = "0.4.49"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c02dbc21516f9f1f04f187958890d7e6026df8d16540b7ad9492bc34a67cea03"
+checksum = "38176d9b44ea84e9184eff0bc34cc167ed044f816accfe5922e54d84cf48eca2"
dependencies = [
"cfg-if",
"js-sys",
+ "once_cell",
"wasm-bindgen",
"web-sys",
]
[[package]]
name = "wasm-bindgen-macro"
-version = "0.2.87"
+version = "0.2.99"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d"
+checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe"
dependencies = [
"quote",
"wasm-bindgen-macro-support",
@@ -5554,28 +5731,28 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro-support"
-version = "0.2.87"
+version = "0.2.99"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
+checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.91",
"wasm-bindgen-backend",
"wasm-bindgen-shared",
]
[[package]]
name = "wasm-bindgen-shared"
-version = "0.2.87"
+version = "0.2.99"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1"
+checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6"
[[package]]
name = "wasm-streams"
-version = "0.4.0"
+version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b65dc4c90b63b118468cf747d8bf3566c1913ef60be765b5730ead9e0a3ba129"
+checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65"
dependencies = [
"futures-util",
"js-sys",
@@ -5585,69 +5762,10 @@ dependencies = [
]
[[package]]
-name = "wayland-client"
-version = "0.29.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3f3b068c05a039c9f755f881dc50f01732214f5685e379829759088967c46715"
-dependencies = [
- "bitflags 1.3.2",
- "downcast-rs",
- "libc",
- "nix 0.24.3",
- "wayland-commons",
- "wayland-scanner",
- "wayland-sys",
-]
-
-[[package]]
-name = "wayland-commons"
-version = "0.29.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8691f134d584a33a6606d9d717b95c4fa20065605f798a3f350d78dced02a902"
-dependencies = [
- "nix 0.24.3",
- "once_cell",
- "smallvec",
- "wayland-sys",
-]
-
-[[package]]
-name = "wayland-protocols"
-version = "0.29.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b950621f9354b322ee817a23474e479b34be96c2e909c14f7bc0100e9a970bc6"
-dependencies = [
- "bitflags 1.3.2",
- "wayland-client",
- "wayland-commons",
- "wayland-scanner",
-]
-
-[[package]]
-name = "wayland-scanner"
-version = "0.29.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8f4303d8fa22ab852f789e75a967f0a2cdc430a607751c0499bada3e451cbd53"
-dependencies = [
- "proc-macro2",
- "quote",
- "xml-rs",
-]
-
-[[package]]
-name = "wayland-sys"
-version = "0.29.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "be12ce1a3c39ec7dba25594b97b42cb3195d54953ddb9d3d95a7c3902bc6e9d4"
-dependencies = [
- "pkg-config",
-]
-
-[[package]]
name = "web-sys"
-version = "0.3.64"
+version = "0.3.76"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b"
+checksum = "04dd7223427d52553d3702c004d3b2fe07c148165faa56313cb00211e31c12bc"
dependencies = [
"js-sys",
"wasm-bindgen",
@@ -5655,9 +5773,9 @@ dependencies = [
[[package]]
name = "webkit2gtk"
-version = "0.18.2"
+version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b8f859735e4a452aeb28c6c56a852967a8a76c8eb1cc32dbf931ad28a13d6370"
+checksum = "76b1bc1e54c581da1e9f179d0b38512ba358fb1af2d634a1affe42e37172361a"
dependencies = [
"bitflags 1.3.2",
"cairo-rs",
@@ -5673,20 +5791,18 @@ dependencies = [
"javascriptcore-rs",
"libc",
"once_cell",
- "soup2",
+ "soup3",
"webkit2gtk-sys",
]
[[package]]
name = "webkit2gtk-sys"
-version = "0.18.0"
+version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4d76ca6ecc47aeba01ec61e480139dda143796abcae6f83bcddf50d6b5b1dcf3"
+checksum = "62daa38afc514d1f8f12b8693d30d5993ff77ced33ce30cd04deebc267a6d57c"
dependencies = [
- "atk-sys",
"bitflags 1.3.2",
"cairo-sys-rs",
- "gdk-pixbuf-sys",
"gdk-sys",
"gio-sys",
"glib-sys",
@@ -5694,66 +5810,57 @@ dependencies = [
"gtk-sys",
"javascriptcore-rs-sys",
"libc",
- "pango-sys",
"pkg-config",
- "soup2-sys",
- "system-deps 6.1.1",
+ "soup3-sys",
+ "system-deps",
]
[[package]]
name = "webpki-roots"
-version = "0.23.1"
+version = "0.26.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b03058f88386e5ff5310d9111d53f48b17d732b401aeb83a8d5190f2ac459338"
+checksum = "5d642ff16b7e79272ae451b7322067cdc17cadf68c23264be9d94a32319efe7e"
dependencies = [
- "rustls-webpki 0.100.1",
+ "rustls-pki-types",
]
[[package]]
name = "webview2-com"
-version = "0.19.1"
+version = "0.33.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b4a769c9f1a64a8734bde70caafac2b96cada12cd4aefa49196b3a386b8b4178"
+checksum = "6f61ff3d9d0ee4efcb461b14eb3acfda2702d10dc329f339303fc3e57215ae2c"
dependencies = [
"webview2-com-macros",
"webview2-com-sys",
- "windows 0.39.0",
+ "windows 0.58.0",
+ "windows-core 0.58.0",
"windows-implement",
+ "windows-interface",
]
[[package]]
name = "webview2-com-macros"
-version = "0.6.0"
+version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eaebe196c01691db62e9e4ca52c5ef1e4fd837dcae27dae3ada599b5a8fd05ac"
+checksum = "1d228f15bba3b9d56dde8bddbee66fa24545bd17b48d5128ccf4a8742b18e431"
dependencies = [
"proc-macro2",
"quote",
- "syn 1.0.109",
+ "syn 2.0.91",
]
[[package]]
name = "webview2-com-sys"
-version = "0.19.0"
+version = "0.33.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "aac48ef20ddf657755fdcda8dfed2a7b4fc7e4581acce6fe9b88c3d64f29dee7"
+checksum = "a3a3e2eeb58f82361c93f9777014668eb3d07e7d174ee4c819575a9208011886"
dependencies = [
- "regex",
- "serde",
- "serde_json",
- "thiserror",
- "windows 0.39.0",
- "windows-bindgen",
- "windows-metadata",
+ "thiserror 1.0.69",
+ "windows 0.58.0",
+ "windows-core 0.58.0",
]
[[package]]
-name = "weezl"
-version = "0.1.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9193164d4de03a926d909d3bc7c30543cecb35400c02114792c2cae20d5e2dbb"
-
-[[package]]
name = "winapi"
version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -5771,20 +5878,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
[[package]]
name = "winapi-util"
-version = "0.1.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
-dependencies = [
- "winapi",
-]
-
-[[package]]
-name = "winapi-wsapoll"
-version = "0.1.1"
+version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "44c17110f57155602a80dca10be03852116403c9ff3cd25b079d666f2aa3df6e"
+checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb"
dependencies = [
- "winapi",
+ "windows-sys 0.59.0",
]
[[package]]
@@ -5794,99 +5892,111 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
[[package]]
-name = "windows"
-version = "0.37.0"
+name = "window-vibrancy"
+version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "57b543186b344cc61c85b5aab0d2e3adf4e0f99bc076eff9aa5927bcc0b8a647"
+checksum = "3ea403deff7b51fff19e261330f71608ff2cdef5721d72b64180bb95be7c4150"
dependencies = [
- "windows_aarch64_msvc 0.37.0",
- "windows_i686_gnu 0.37.0",
- "windows_i686_msvc 0.37.0",
- "windows_x86_64_gnu 0.37.0",
- "windows_x86_64_msvc 0.37.0",
+ "objc2",
+ "objc2-app-kit",
+ "objc2-foundation",
+ "raw-window-handle",
+ "windows-sys 0.59.0",
+ "windows-version",
]
[[package]]
name = "windows"
-version = "0.39.0"
+version = "0.52.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f1c4bd0a50ac6020f65184721f758dba47bb9fbc2133df715ec74a237b26794a"
+checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be"
dependencies = [
- "windows-implement",
- "windows_aarch64_msvc 0.39.0",
- "windows_i686_gnu 0.39.0",
- "windows_i686_msvc 0.39.0",
- "windows_x86_64_gnu 0.39.0",
- "windows_x86_64_msvc 0.39.0",
+ "windows-core 0.52.0",
+ "windows-targets 0.52.6",
]
[[package]]
name = "windows"
-version = "0.48.0"
+version = "0.58.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f"
+checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6"
dependencies = [
- "windows-targets 0.48.1",
+ "windows-core 0.58.0",
+ "windows-targets 0.52.6",
]
[[package]]
-name = "windows"
+name = "windows-core"
version = "0.52.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be"
+checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9"
dependencies = [
- "windows-core",
- "windows-targets 0.52.0",
+ "windows-targets 0.52.6",
]
[[package]]
-name = "windows-bindgen"
-version = "0.39.0"
+name = "windows-core"
+version = "0.58.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "68003dbd0e38abc0fb85b939240f4bce37c43a5981d3df37ccbaaa981b47cb41"
+checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99"
dependencies = [
- "windows-metadata",
- "windows-tokens",
+ "windows-implement",
+ "windows-interface",
+ "windows-result",
+ "windows-strings",
+ "windows-targets 0.52.6",
]
[[package]]
-name = "windows-core"
-version = "0.52.0"
+name = "windows-implement"
+version = "0.58.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9"
+checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b"
dependencies = [
- "windows-targets 0.52.0",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.91",
]
[[package]]
-name = "windows-implement"
-version = "0.39.0"
+name = "windows-interface"
+version = "0.58.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ba01f98f509cb5dc05f4e5fc95e535f78260f15fea8fe1a8abdd08f774f1cee7"
+checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515"
dependencies = [
- "syn 1.0.109",
- "windows-tokens",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.91",
]
[[package]]
-name = "windows-metadata"
-version = "0.39.0"
+name = "windows-registry"
+version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9ee5e275231f07c6e240d14f34e1b635bf1faa1c76c57cfd59a5cdb9848e4278"
+checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0"
+dependencies = [
+ "windows-result",
+ "windows-strings",
+ "windows-targets 0.52.6",
+]
[[package]]
-name = "windows-sys"
-version = "0.42.0"
+name = "windows-result"
+version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
+checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e"
dependencies = [
- "windows_aarch64_gnullvm 0.42.2",
- "windows_aarch64_msvc 0.42.2",
- "windows_i686_gnu 0.42.2",
- "windows_i686_msvc 0.42.2",
- "windows_x86_64_gnu 0.42.2",
- "windows_x86_64_gnullvm 0.42.2",
- "windows_x86_64_msvc 0.42.2",
+ "windows-targets 0.52.6",
+]
+
+[[package]]
+name = "windows-strings"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10"
+dependencies = [
+ "windows-result",
+ "windows-targets 0.52.6",
]
[[package]]
@@ -5904,7 +6014,7 @@ version = "0.48.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
dependencies = [
- "windows-targets 0.48.1",
+ "windows-targets 0.48.5",
]
[[package]]
@@ -5913,7 +6023,16 @@ version = "0.52.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
dependencies = [
- "windows-targets 0.52.0",
+ "windows-targets 0.52.6",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.59.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
+dependencies = [
+ "windows-targets 0.52.6",
]
[[package]]
@@ -5933,47 +6052,42 @@ dependencies = [
[[package]]
name = "windows-targets"
-version = "0.48.1"
+version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "05d4b17490f70499f20b9e791dcf6a299785ce8af4d709018206dc5b4953e95f"
+checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
dependencies = [
- "windows_aarch64_gnullvm 0.48.0",
- "windows_aarch64_msvc 0.48.0",
- "windows_i686_gnu 0.48.0",
- "windows_i686_msvc 0.48.0",
- "windows_x86_64_gnu 0.48.0",
- "windows_x86_64_gnullvm 0.48.0",
- "windows_x86_64_msvc 0.48.0",
+ "windows_aarch64_gnullvm 0.48.5",
+ "windows_aarch64_msvc 0.48.5",
+ "windows_i686_gnu 0.48.5",
+ "windows_i686_msvc 0.48.5",
+ "windows_x86_64_gnu 0.48.5",
+ "windows_x86_64_gnullvm 0.48.5",
+ "windows_x86_64_msvc 0.48.5",
]
[[package]]
name = "windows-targets"
-version = "0.52.0"
+version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd"
+checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
dependencies = [
- "windows_aarch64_gnullvm 0.52.0",
- "windows_aarch64_msvc 0.52.0",
- "windows_i686_gnu 0.52.0",
- "windows_i686_msvc 0.52.0",
- "windows_x86_64_gnu 0.52.0",
- "windows_x86_64_gnullvm 0.52.0",
- "windows_x86_64_msvc 0.52.0",
+ "windows_aarch64_gnullvm 0.52.6",
+ "windows_aarch64_msvc 0.52.6",
+ "windows_i686_gnu 0.52.6",
+ "windows_i686_gnullvm",
+ "windows_i686_msvc 0.52.6",
+ "windows_x86_64_gnu 0.52.6",
+ "windows_x86_64_gnullvm 0.52.6",
+ "windows_x86_64_msvc 0.52.6",
]
[[package]]
-name = "windows-tokens"
-version = "0.39.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f838de2fe15fe6bac988e74b798f26499a8b21a9d97edec321e79b28d1d7f597"
-
-[[package]]
name = "windows-version"
-version = "0.1.0"
+version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "75aa004c988e080ad34aff5739c39d0312f4684699d6d71fc8a198d057b8b9b4"
+checksum = "6998aa457c9ba8ff2fb9f13e9d2a930dabcea28f1d0ab94d687d8b3654844515"
dependencies = [
- "windows-targets 0.52.0",
+ "windows-targets 0.52.6",
]
[[package]]
@@ -5984,27 +6098,15 @@ checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
[[package]]
name = "windows_aarch64_gnullvm"
-version = "0.48.0"
+version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
+checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
[[package]]
name = "windows_aarch64_gnullvm"
-version = "0.52.0"
+version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea"
-
-[[package]]
-name = "windows_aarch64_msvc"
-version = "0.37.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2623277cb2d1c216ba3b578c0f3cf9cdebeddb6e66b1b218bb33596ea7769c3a"
-
-[[package]]
-name = "windows_aarch64_msvc"
-version = "0.39.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ec7711666096bd4096ffa835238905bb33fb87267910e154b18b44eaabb340f2"
+checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
[[package]]
name = "windows_aarch64_msvc"
@@ -6014,27 +6116,15 @@ checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
[[package]]
name = "windows_aarch64_msvc"
-version = "0.48.0"
+version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
+checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
[[package]]
name = "windows_aarch64_msvc"
-version = "0.52.0"
+version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef"
-
-[[package]]
-name = "windows_i686_gnu"
-version = "0.37.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d3925fd0b0b804730d44d4b6278c50f9699703ec49bcd628020f46f4ba07d9e1"
-
-[[package]]
-name = "windows_i686_gnu"
-version = "0.39.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "763fc57100a5f7042e3057e7e8d9bdd7860d330070251a73d003563a3bb49e1b"
+checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
[[package]]
name = "windows_i686_gnu"
@@ -6044,27 +6134,21 @@ checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
[[package]]
name = "windows_i686_gnu"
-version = "0.48.0"
+version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
+checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
[[package]]
name = "windows_i686_gnu"
-version = "0.52.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313"
-
-[[package]]
-name = "windows_i686_msvc"
-version = "0.37.0"
+version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ce907ac74fe331b524c1298683efbf598bb031bc84d5e274db2083696d07c57c"
+checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
[[package]]
-name = "windows_i686_msvc"
-version = "0.39.0"
+name = "windows_i686_gnullvm"
+version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7bc7cbfe58828921e10a9f446fcaaf649204dcfe6c1ddd712c5eebae6bda1106"
+checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
[[package]]
name = "windows_i686_msvc"
@@ -6074,27 +6158,15 @@ checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
[[package]]
name = "windows_i686_msvc"
-version = "0.48.0"
+version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
+checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
[[package]]
name = "windows_i686_msvc"
-version = "0.52.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a"
-
-[[package]]
-name = "windows_x86_64_gnu"
-version = "0.37.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2babfba0828f2e6b32457d5341427dcbb577ceef556273229959ac23a10af33d"
-
-[[package]]
-name = "windows_x86_64_gnu"
-version = "0.39.0"
+version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6868c165637d653ae1e8dc4d82c25d4f97dd6605eaa8d784b5c6e0ab2a252b65"
+checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
[[package]]
name = "windows_x86_64_gnu"
@@ -6104,15 +6176,15 @@ checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
[[package]]
name = "windows_x86_64_gnu"
-version = "0.48.0"
+version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
+checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
[[package]]
name = "windows_x86_64_gnu"
-version = "0.52.0"
+version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd"
+checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
[[package]]
name = "windows_x86_64_gnullvm"
@@ -6122,27 +6194,15 @@ checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
[[package]]
name = "windows_x86_64_gnullvm"
-version = "0.48.0"
+version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
+checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
[[package]]
name = "windows_x86_64_gnullvm"
-version = "0.52.0"
+version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e"
-
-[[package]]
-name = "windows_x86_64_msvc"
-version = "0.37.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f4dd6dc7df2d84cf7b33822ed5b86318fb1781948e9663bacd047fc9dd52259d"
-
-[[package]]
-name = "windows_x86_64_msvc"
-version = "0.39.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5e4d40883ae9cae962787ca76ba76390ffa29214667a111db9e0a1ad8377e809"
+checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
[[package]]
name = "windows_x86_64_msvc"
@@ -6152,37 +6212,27 @@ checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
[[package]]
name = "windows_x86_64_msvc"
-version = "0.48.0"
+version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
+checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
[[package]]
name = "windows_x86_64_msvc"
-version = "0.52.0"
+version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04"
+checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
[[package]]
name = "winnow"
-version = "0.5.3"
+version = "0.5.40"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f46aab759304e4d7b2075a9aecba26228bb073ee8c50db796b2c72c676b5d807"
+checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876"
dependencies = [
"memchr",
]
[[package]]
name = "winreg"
-version = "0.11.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "76a1a57ff50e9b408431e8f97d5456f2807f8eb2a2cd79b06068fc87f8ecf189"
-dependencies = [
- "cfg-if",
- "winapi",
-]
-
-[[package]]
-name = "winreg"
version = "0.50.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1"
@@ -6193,78 +6243,67 @@ dependencies = [
[[package]]
name = "winreg"
-version = "0.51.0"
+version = "0.52.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "937f3df7948156640f46aacef17a70db0de5917bda9c92b0f751f3a955b588fc"
+checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5"
dependencies = [
"cfg-if",
"windows-sys 0.48.0",
]
[[package]]
-name = "winreg"
-version = "0.52.0"
+name = "write16"
+version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5"
-dependencies = [
- "cfg-if",
- "windows-sys 0.48.0",
-]
+checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936"
[[package]]
-name = "wl-clipboard-rs"
-version = "0.7.0"
+name = "writeable"
+version = "0.5.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "981a303dfbb75d659f6612d05a14b2e363c103d24f676a2d44a00d18507a1ad9"
-dependencies = [
- "derive-new",
- "libc",
- "log",
- "nix 0.24.3",
- "os_pipe",
- "tempfile",
- "thiserror",
- "tree_magic_mini",
- "wayland-client",
- "wayland-protocols",
-]
+checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51"
[[package]]
name = "wry"
-version = "0.24.10"
+version = "0.47.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "00711278ed357350d44c749c286786ecac644e044e4da410d466212152383b45"
+checksum = "61ce51277d65170f6379d8cda935c80e3c2d1f0ff712a123c8bddb11b31a4b73"
dependencies = [
- "base64 0.13.1",
- "block",
- "cocoa",
- "core-graphics",
+ "base64 0.22.1",
+ "block2",
+ "cookie",
"crossbeam-channel",
+ "dpi",
"dunce",
- "gdk",
- "gio",
- "glib",
+ "gdkx11",
"gtk",
"html5ever",
- "http 0.2.9",
+ "http 1.2.0",
+ "javascriptcore-rs",
+ "jni",
"kuchikiki",
"libc",
- "log",
- "objc",
- "objc_id",
+ "ndk",
+ "objc2",
+ "objc2-app-kit",
+ "objc2-foundation",
+ "objc2-ui-kit",
+ "objc2-web-kit",
"once_cell",
- "serde",
- "serde_json",
+ "percent-encoding",
+ "raw-window-handle",
"sha2",
- "soup2",
- "tao",
- "thiserror",
+ "soup3",
+ "tao-macros",
+ "thiserror 1.0.69",
"url",
"webkit2gtk",
"webkit2gtk-sys",
"webview2-com",
- "windows 0.39.0",
- "windows-implement",
+ "windows 0.58.0",
+ "windows-core 0.58.0",
+ "windows-version",
+ "x11-dl",
]
[[package]]
@@ -6289,57 +6328,55 @@ dependencies = [
]
[[package]]
-name = "x11rb"
-version = "0.10.1"
+name = "xattr"
+version = "1.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "592b4883219f345e712b3209c62654ebda0bb50887f330cbd018d0f654bfd507"
+checksum = "8da84f1a25939b27f6820d92aed108f83ff920fdf11a7b19366c27c4cda81d4f"
dependencies = [
- "gethostname",
- "nix 0.24.3",
- "winapi",
- "winapi-wsapoll",
- "x11rb-protocol",
+ "libc",
+ "linux-raw-sys",
+ "rustix",
]
[[package]]
-name = "x11rb-protocol"
-version = "0.10.0"
+name = "xdg-home"
+version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "56b245751c0ac9db0e006dc812031482784e434630205a93c73cfefcaabeac67"
+checksum = "ec1cdab258fb55c0da61328dc52c8764709b249011b2cad0454c72f0bf10a1f6"
dependencies = [
- "nix 0.24.3",
+ "libc",
+ "windows-sys 0.59.0",
]
[[package]]
-name = "xattr"
-version = "0.2.3"
+name = "yoke"
+version = "0.7.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6d1526bbe5aaeb5eb06885f4d987bcdfa5e23187055de9b83fe00156a821fabc"
+checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40"
dependencies = [
- "libc",
+ "serde",
+ "stable_deref_trait",
+ "yoke-derive",
+ "zerofrom",
]
[[package]]
-name = "xdg-home"
-version = "1.0.0"
+name = "yoke-derive"
+version = "0.7.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2769203cd13a0c6015d515be729c526d041e9cf2c0cc478d57faee85f40c6dcd"
+checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154"
dependencies = [
- "nix 0.26.2",
- "winapi",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.91",
+ "synstructure",
]
[[package]]
-name = "xml-rs"
-version = "0.8.19"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0fcb9cbac069e033553e8bb871be2fbdffcab578eb25bd0f7c508cedc6dcd75a"
-
-[[package]]
name = "zbus"
-version = "3.14.1"
+version = "4.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "31de390a2d872e4cd04edd71b425e29853f786dc99317ed72d73d6fcf5ebb948"
+checksum = "7b8e3d6ae3342792a6cc2340e4394334c7402f3d793b390d2c5494a4032b3030"
dependencies = [
"async-broadcast",
"async-executor",
@@ -6351,7 +6388,6 @@ dependencies = [
"async-task",
"async-trait",
"blocking",
- "byteorder",
"derivative",
"enumflags2",
"event-listener",
@@ -6359,8 +6395,7 @@ dependencies = [
"futures-sink",
"futures-util",
"hex",
- "nix 0.26.2",
- "once_cell",
+ "nix",
"ordered-stream",
"rand 0.8.5",
"serde",
@@ -6369,7 +6404,7 @@ dependencies = [
"static_assertions",
"tracing",
"uds_windows",
- "winapi",
+ "windows-sys 0.52.0",
"xdg-home",
"zbus_macros",
"zbus_names",
@@ -6378,11 +6413,11 @@ dependencies = [
[[package]]
name = "zbus_macros"
-version = "3.14.1"
+version = "4.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "41d1794a946878c0e807f55a397187c11fc7a038ba5d868e7db4f3bd7760bc9d"
+checksum = "b7a3e850ff1e7217a3b7a07eba90d37fe9bb9e89a310f718afcde5885ca9b6d7"
dependencies = [
- "proc-macro-crate",
+ "proc-macro-crate 1.3.1",
"proc-macro2",
"quote",
"regex",
@@ -6392,9 +6427,9 @@ dependencies = [
[[package]]
name = "zbus_names"
-version = "2.6.0"
+version = "3.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fb80bb776dbda6e23d705cf0123c3b95df99c4ebeaec6c2599d4a5419902b4a9"
+checksum = "4b9b1fef7d021261cc16cba64c351d291b715febe0fa10dc3a443ac5a5022e6c"
dependencies = [
"serde",
"static_assertions",
@@ -6402,10 +6437,74 @@ dependencies = [
]
[[package]]
+name = "zerocopy"
+version = "0.7.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0"
+dependencies = [
+ "byteorder",
+ "zerocopy-derive",
+]
+
+[[package]]
+name = "zerocopy-derive"
+version = "0.7.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.91",
+]
+
+[[package]]
+name = "zerofrom"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e"
+dependencies = [
+ "zerofrom-derive",
+]
+
+[[package]]
+name = "zerofrom-derive"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.91",
+ "synstructure",
+]
+
+[[package]]
name = "zeroize"
-version = "1.7.0"
+version = "1.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d"
+checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde"
+
+[[package]]
+name = "zerovec"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079"
+dependencies = [
+ "yoke",
+ "zerofrom",
+ "zerovec-derive",
+]
+
+[[package]]
+name = "zerovec-derive"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.91",
+]
[[package]]
name = "zip"
@@ -6428,14 +6527,45 @@ dependencies = [
]
[[package]]
+name = "zip"
+version = "2.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae9c1ea7b3a5e1f4b922ff856a129881167511563dc219869afe3787fc0c1a45"
+dependencies = [
+ "arbitrary",
+ "crc32fast",
+ "crossbeam-utils",
+ "displaydoc",
+ "flate2",
+ "indexmap 2.7.0",
+ "memchr",
+ "thiserror 2.0.9",
+ "zopfli",
+]
+
+[[package]]
name = "zip-extract"
version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e109e5a291403b4c1e514d39f8a22d3f98d257e691a52bb1f16051bb1ffed63e"
dependencies = [
"log",
- "thiserror",
- "zip",
+ "thiserror 1.0.69",
+ "zip 0.6.6",
+]
+
+[[package]]
+name = "zopfli"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5019f391bac5cf252e93bbcc53d039ffd62c7bfb7c150414d61369afe57e946"
+dependencies = [
+ "bumpalo",
+ "crc32fast",
+ "lockfree-object-pool",
+ "log",
+ "once_cell",
+ "simd-adler32",
]
[[package]]
@@ -6459,24 +6589,22 @@ dependencies = [
[[package]]
name = "zstd-sys"
-version = "2.0.8+zstd.1.5.5"
+version = "2.0.13+zstd.1.5.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5556e6ee25d32df2586c098bbfa278803692a20d0ab9565e049480d52707ec8c"
+checksum = "38ff0f21cfee8f97d94cef41359e0c89aa6113028ab0291aa8ca0038995a95aa"
dependencies = [
"cc",
- "libc",
"pkg-config",
]
[[package]]
name = "zvariant"
-version = "3.15.0"
+version = "4.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "44b291bee0d960c53170780af148dca5fa260a63cdd24f1962fa82e03e53338c"
+checksum = "4e09e8be97d44eeab994d752f341e67b3b0d80512a8b315a0671d47232ef1b65"
dependencies = [
- "byteorder",
+ "endi",
"enumflags2",
- "libc",
"serde",
"static_assertions",
"zvariant_derive",
@@ -6484,11 +6612,11 @@ dependencies = [
[[package]]
name = "zvariant_derive"
-version = "3.15.0"
+version = "4.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "934d7a7dfc310d6ee06c87ffe88ef4eca7d3e37bb251dece2ef93da8f17d8ecd"
+checksum = "72a5857e2856435331636a9fbb415b09243df4521a267c5bedcd5289b4d5799e"
dependencies = [
- "proc-macro-crate",
+ "proc-macro-crate 1.3.1",
"proc-macro2",
"quote",
"syn 1.0.109",
@@ -6497,9 +6625,9 @@ dependencies = [
[[package]]
name = "zvariant_utils"
-version = "1.0.1"
+version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7234f0d811589db492d16893e3f21e8e2fd282e6d01b0cddee310322062cc200"
+checksum = "00bedb16a193cc12451873fee2a1bc6550225acece0e36f333e68326c73c8172"
dependencies = [
"proc-macro2",
"quote",
diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml
index 04fb84df..56e42487 100644
--- a/src-tauri/Cargo.toml
+++ b/src-tauri/Cargo.toml
@@ -5,25 +5,25 @@ description = "Mod-manager for Northstar"
authors = ["https://github.com/R2NorthstarTools/FlightCore/graphs/contributors"]
license = "MIT"
repository = "https://github.com/R2NorthstarTools/FlightCore"
-default-run = "flightcore"
edition = "2021"
-rust-version = "1.66"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
-[profile.release]
-# Keeps line tables in built binary
-# c.f.: https://doc.rust-lang.org/cargo/reference/profiles.html#debug
-# This is done to see line numbers in stack trace on sentry.io
-debug = 1
+[lib]
+# The `_lib` suffix may seem redundant but it is necessary
+# to make the lib name unique and wouldn't conflict with the bin name.
+# This seems to be only an issue on Windows, see https://github.com/rust-lang/cargo/issues/8519
+name = "tauri_app_lib"
+crate-type = ["staticlib", "cdylib", "rlib"]
[build-dependencies]
-tauri-build = { version = "1.5", features = [] }
+tauri-build = { version = "2", features = [] }
[dependencies]
serde_json = "1.0"
serde = { version = "1.0", features = ["derive"] }
-tauri = { version = "1.6", features = ["api-all", "dialog", "updater"] }
+tauri = { version = "2", features = [] }
+tauri-plugin-opener = "2"
tokio = { version = "1", features = ["full"] }
# Sentry (crash) logging
sentry = "0.32"
@@ -42,8 +42,6 @@ regex = "1.10"
sysinfo = "0.30.13"
# HTTP requests
reqwest = { version = "0.11", features = ["blocking"] }
-# Persistent store for settings
-tauri-plugin-store = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v1" }
# JSON5 parsing support (allows comments in JSON)
json5 = "0.4.1"
# Async recursion for recursive mod install
@@ -78,11 +76,3 @@ remove-markdown-links = "1.0.0"
# Windows API stuff
winapi = "0.3.9"
winreg = "0.52.0"
-
-[features]
-# by default Tauri runs in production mode
-# when `tauri dev` runs it is executed with `cargo run --no-default-features` if `devPath` is an URL
-default = ["custom-protocol"]
-# this feature is used used for production builds where `devPath` points to the filesystem
-# DO NOT remove this
-custom-protocol = ["tauri/custom-protocol"]
diff --git a/src-tauri/bindings/CommitHead.ts b/src-tauri/bindings/CommitHead.ts
deleted file mode 100644
index cdc00e39..00000000
--- a/src-tauri/bindings/CommitHead.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
-import type { Repo } from "./Repo";
-
-export type CommitHead = { sha: string, ref: string, repo: Repo, };
diff --git a/src-tauri/bindings/FlightCoreVersion.ts b/src-tauri/bindings/FlightCoreVersion.ts
deleted file mode 100644
index b0b3d0cd..00000000
--- a/src-tauri/bindings/FlightCoreVersion.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
-
-export type FlightCoreVersion = { tag_name: string, published_at: string, };
diff --git a/src-tauri/bindings/InstallProgress.ts b/src-tauri/bindings/InstallProgress.ts
deleted file mode 100644
index c7c92542..00000000
--- a/src-tauri/bindings/InstallProgress.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
-import type { InstallState } from "./InstallState";
-
-export type InstallProgress = { current_downloaded: bigint, total_size: bigint, state: InstallState, };
diff --git a/src-tauri/bindings/InstallState.ts b/src-tauri/bindings/InstallState.ts
deleted file mode 100644
index d2a91860..00000000
--- a/src-tauri/bindings/InstallState.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
-
-export type InstallState = "Downloading" | "Extracting" | "Done";
diff --git a/src-tauri/bindings/InstallType.ts b/src-tauri/bindings/InstallType.ts
deleted file mode 100644
index 6ad43cb7..00000000
--- a/src-tauri/bindings/InstallType.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
-
-/**
- * Defines how Titanfall2 was installed (Steam, Origin, ...)
- */
-export type InstallType = "STEAM" | "ORIGIN" | "EAPLAY" | "UNKNOWN";
diff --git a/src-tauri/bindings/NorthstarLaunchOptions.ts b/src-tauri/bindings/NorthstarLaunchOptions.ts
deleted file mode 100644
index 6133f6c0..00000000
--- a/src-tauri/bindings/NorthstarLaunchOptions.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
-
-export type NorthstarLaunchOptions = { launch_via_steam: boolean, bypass_checks: boolean, };
diff --git a/src-tauri/bindings/NorthstarMod.ts b/src-tauri/bindings/NorthstarMod.ts
deleted file mode 100644
index cddd97d2..00000000
--- a/src-tauri/bindings/NorthstarMod.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
-
-/**
- * Object holding various information about a Northstar mod
- */
-export type NorthstarMod = { name: string, version: string | null, thunderstore_mod_string: string | null, enabled: boolean, directory: string, };
diff --git a/src-tauri/bindings/NorthstarThunderstoreRelease.ts b/src-tauri/bindings/NorthstarThunderstoreRelease.ts
deleted file mode 100644
index 10991793..00000000
--- a/src-tauri/bindings/NorthstarThunderstoreRelease.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
-
-export type NorthstarThunderstoreRelease = { package: string, version: string, };
diff --git a/src-tauri/bindings/NorthstarThunderstoreReleaseWrapper.ts b/src-tauri/bindings/NorthstarThunderstoreReleaseWrapper.ts
deleted file mode 100644
index 1da6a7da..00000000
--- a/src-tauri/bindings/NorthstarThunderstoreReleaseWrapper.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
-import type { NorthstarThunderstoreRelease } from "./NorthstarThunderstoreRelease";
-
-export type NorthstarThunderstoreReleaseWrapper = { label: string, value: NorthstarThunderstoreRelease, };
diff --git a/src-tauri/bindings/Project.ts b/src-tauri/bindings/Project.ts
deleted file mode 100644
index 5ab3c2b5..00000000
--- a/src-tauri/bindings/Project.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
-
-export type Project = "FlightCore" | "Northstar";
diff --git a/src-tauri/bindings/PullRequestType.ts b/src-tauri/bindings/PullRequestType.ts
deleted file mode 100644
index fdadddb0..00000000
--- a/src-tauri/bindings/PullRequestType.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
-
-export type PullRequestType = "Mods" | "Launcher";
diff --git a/src-tauri/bindings/PullsApiResponseElement.ts b/src-tauri/bindings/PullsApiResponseElement.ts
deleted file mode 100644
index c9a146d4..00000000
--- a/src-tauri/bindings/PullsApiResponseElement.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
-import type { CommitHead } from "./CommitHead";
-
-export type PullsApiResponseElement = { number: bigint, title: string, url: string, head: CommitHead, html_url: string, labels: Array<string>, };
diff --git a/src-tauri/bindings/ReleaseInfo.ts b/src-tauri/bindings/ReleaseInfo.ts
deleted file mode 100644
index 09a39ba5..00000000
--- a/src-tauri/bindings/ReleaseInfo.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
-
-export type ReleaseInfo = { name: string, published_at: string, body: string, };
diff --git a/src-tauri/bindings/Repo.ts b/src-tauri/bindings/Repo.ts
deleted file mode 100644
index 8430eb32..00000000
--- a/src-tauri/bindings/Repo.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
-
-export type Repo = { full_name: string, };
diff --git a/src-tauri/bindings/Tag.ts b/src-tauri/bindings/Tag.ts
deleted file mode 100644
index f51b3f26..00000000
--- a/src-tauri/bindings/Tag.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
-
-export type Tag = { name: string, };
diff --git a/src-tauri/bindings/TagWrapper.ts b/src-tauri/bindings/TagWrapper.ts
deleted file mode 100644
index d2f0009d..00000000
--- a/src-tauri/bindings/TagWrapper.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
-import type { Tag } from "./Tag";
-
-/**
- * Wrapper type needed for frontend
- */
-export type TagWrapper = { label: string, value: Tag, };
diff --git a/src-tauri/bindings/ThunderstoreMod.ts b/src-tauri/bindings/ThunderstoreMod.ts
deleted file mode 100644
index 88eafa4c..00000000
--- a/src-tauri/bindings/ThunderstoreMod.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
-import type { ThunderstoreModVersion } from "./ThunderstoreModVersion";
-
-export type ThunderstoreMod = { name: string, full_name: string, owner: string, package_url: string, date_created: string, date_updated: string, uuid4: string, rating_score: number, is_pinned: boolean, is_deprecated: boolean, has_nsfw_content: boolean, categories: Array<string>, versions: Array<ThunderstoreModVersion>, };
diff --git a/src-tauri/bindings/ThunderstoreModVersion.ts b/src-tauri/bindings/ThunderstoreModVersion.ts
deleted file mode 100644
index b01af408..00000000
--- a/src-tauri/bindings/ThunderstoreModVersion.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
-
-export type ThunderstoreModVersion = { name: string, full_name: string, description: string, icon: string, version_number: string, dependencies: Array<string>, download_url: string, downloads: number, date_created: string, website_url: string, is_active: boolean, uuid4: string, file_size: bigint, };
diff --git a/src-tauri/capabilities/default.json b/src-tauri/capabilities/default.json
new file mode 100644
index 00000000..4cdbf49a
--- /dev/null
+++ b/src-tauri/capabilities/default.json
@@ -0,0 +1,10 @@
+{
+ "$schema": "../gen/schemas/desktop-schema.json",
+ "identifier": "default",
+ "description": "Capability for the main window",
+ "windows": ["main"],
+ "permissions": [
+ "core:default",
+ "opener:default"
+ ]
+}
diff --git a/src-tauri/icons/128x128.png b/src-tauri/icons/128x128.png
index dd1c8674..6be5e50e 100644
--- a/src-tauri/icons/128x128.png
+++ b/src-tauri/icons/128x128.png
Binary files differ
diff --git a/src-tauri/icons/128x128@2x.png b/src-tauri/icons/128x128@2x.png
index 63dda405..e81becee 100644
--- a/src-tauri/icons/128x128@2x.png
+++ b/src-tauri/icons/128x128@2x.png
Binary files differ
diff --git a/src-tauri/icons/32x32.png b/src-tauri/icons/32x32.png
index 9e6a9619..a437dd51 100644
--- a/src-tauri/icons/32x32.png
+++ b/src-tauri/icons/32x32.png
Binary files differ
diff --git a/src-tauri/icons/Square107x107Logo.png b/src-tauri/icons/Square107x107Logo.png
index 44bdc5cb..0ca4f271 100644
--- a/src-tauri/icons/Square107x107Logo.png
+++ b/src-tauri/icons/Square107x107Logo.png
Binary files differ
diff --git a/src-tauri/icons/Square142x142Logo.png b/src-tauri/icons/Square142x142Logo.png
index 4639579a..b81f8203 100644
--- a/src-tauri/icons/Square142x142Logo.png
+++ b/src-tauri/icons/Square142x142Logo.png
Binary files differ
diff --git a/src-tauri/icons/Square150x150Logo.png b/src-tauri/icons/Square150x150Logo.png
index fc585b6c..624c7bfb 100644
--- a/src-tauri/icons/Square150x150Logo.png
+++ b/src-tauri/icons/Square150x150Logo.png
Binary files differ
diff --git a/src-tauri/icons/Square284x284Logo.png b/src-tauri/icons/Square284x284Logo.png
index 7fdac591..c021d2ba 100644
--- a/src-tauri/icons/Square284x284Logo.png
+++ b/src-tauri/icons/Square284x284Logo.png
Binary files differ
diff --git a/src-tauri/icons/Square30x30Logo.png b/src-tauri/icons/Square30x30Logo.png
index 1aeabb2b..62197002 100644
--- a/src-tauri/icons/Square30x30Logo.png
+++ b/src-tauri/icons/Square30x30Logo.png
Binary files differ
diff --git a/src-tauri/icons/Square310x310Logo.png b/src-tauri/icons/Square310x310Logo.png
index 6c21253c..f9bc0483 100644
--- a/src-tauri/icons/Square310x310Logo.png
+++ b/src-tauri/icons/Square310x310Logo.png
Binary files differ
diff --git a/src-tauri/icons/Square44x44Logo.png b/src-tauri/icons/Square44x44Logo.png
index 91f14623..d5fbfb2a 100644
--- a/src-tauri/icons/Square44x44Logo.png
+++ b/src-tauri/icons/Square44x44Logo.png
Binary files differ
diff --git a/src-tauri/icons/Square71x71Logo.png b/src-tauri/icons/Square71x71Logo.png
index 9ab108b2..63440d79 100644
--- a/src-tauri/icons/Square71x71Logo.png
+++ b/src-tauri/icons/Square71x71Logo.png
Binary files differ
diff --git a/src-tauri/icons/Square89x89Logo.png b/src-tauri/icons/Square89x89Logo.png
index 8b24346c..f3f705af 100644
--- a/src-tauri/icons/Square89x89Logo.png
+++ b/src-tauri/icons/Square89x89Logo.png
Binary files differ
diff --git a/src-tauri/icons/StoreLogo.png b/src-tauri/icons/StoreLogo.png
index 750a8c9a..45563882 100644
--- a/src-tauri/icons/StoreLogo.png
+++ b/src-tauri/icons/StoreLogo.png
Binary files differ
diff --git a/src-tauri/icons/icon.icns b/src-tauri/icons/icon.icns
index cdf5f46c..12a5bcee 100644
--- a/src-tauri/icons/icon.icns
+++ b/src-tauri/icons/icon.icns
Binary files differ
diff --git a/src-tauri/icons/icon.ico b/src-tauri/icons/icon.ico
index 5d387285..b3636e4b 100644
--- a/src-tauri/icons/icon.ico
+++ b/src-tauri/icons/icon.ico
Binary files differ
diff --git a/src-tauri/icons/icon.png b/src-tauri/icons/icon.png
index 3ab5b770..e1cd2619 100644
--- a/src-tauri/icons/icon.png
+++ b/src-tauri/icons/icon.png
Binary files differ
diff --git a/src-tauri/src/constants.rs b/src-tauri/src/constants.rs
deleted file mode 100644
index 3ad2d6e8..00000000
--- a/src-tauri/src/constants.rs
+++ /dev/null
@@ -1,60 +0,0 @@
-// This file stores various global constants values
-use const_format::concatcp;
-use std::time::Duration;
-
-/// FlightCore user agent for web requests
-pub const APP_USER_AGENT: &str = concatcp!("FlightCore/", env!("CARGO_PKG_VERSION"));
-
-/// URL of the Northstar masterserver
-pub const MASTER_SERVER_URL: &str = "https://northstar.tf";
-
-/// server list endpoint
-pub const SERVER_BROWSER_ENDPOINT: &str = "/client/servers";
-
-/// List of core Northstar mods
-pub const CORE_MODS: [&str; 3] = [
- "Northstar.Client",
- "Northstar.Custom",
- "Northstar.CustomServers",
-];
-
-/// List of Thunderstoremods that shouldn't be installable
-/// as they behave different than common Squirrel mods
-pub const BLACKLISTED_MODS: [&str; 3] = [
- "northstar-Northstar",
- "northstar-NorthstarReleaseCandidate",
- "ebkr-r2modman",
-];
-
-/// List of Thunderstoremods that have some specific install requirements that makes them different from standard mods
-pub const MODS_WITH_SPECIAL_REQUIREMENTS: [&str; 1] = ["NanohmProtogen-VanillaPlus"];
-
-/// Order in which the sections for release notes should be displayed
-pub const SECTION_ORDER: [&str; 11] = [
- "feat", "fix", "docs", "style", "refactor", "build", "test", "i18n", "ci", "chore", "other",
-];
-
-/// Statistics (players and servers counts) refresh delay
-pub const REFRESH_DELAY: Duration = Duration::from_secs(5 * 60);
-
-/// Flightcore repo name and org name on GitHub
-pub const FLIGHTCORE_REPO_NAME: &str = "R2NorthstarTools/FlightCore";
-
-/// Northstar release repo name and org name on GitHub
-pub const NORTHSTAR_RELEASE_REPO_NAME: &str = "R2Northstar/Northstar";
-
-/// NorthstarLauncher repo name on GitHub
-pub const NORTHSTAR_LAUNCHER_REPO_NAME: &str = "NorthstarLauncher";
-
-/// NorthstarMods repo name on GitHub
-pub const NORTHSTAR_MODS_REPO_NAME: &str = "NorthstarMods";
-
-/// URL to launcher commits API URL
-pub const NS_LAUNCHER_COMMITS_API_URL: &str =
- "https://api.github.com/repos/R2Northstar/NorthstarLauncher/commits";
-
-/// Filename of DLL that Northstar uses
-pub const NORTHSTAR_DLL: &str = "Northstar.dll";
-
-/// Profile that Northstar defaults to and ships with
-pub const NORTHSTAR_DEFAULT_PROFILE: &str = "R2Northstar";
diff --git a/src-tauri/src/development/mod.rs b/src-tauri/src/development/mod.rs
deleted file mode 100644
index 7184904c..00000000
--- a/src-tauri/src/development/mod.rs
+++ /dev/null
@@ -1,84 +0,0 @@
-use crate::constants::NS_LAUNCHER_COMMITS_API_URL;
-use crate::github::{
- pull_requests::{check_github_api, download_zip_into_memory, get_launcher_download_link},
- CommitInfo,
-};
-
-#[tauri::command]
-pub async fn install_git_main(game_install_path: &str) -> Result<String, String> {
- // Get list of commits
- let commits: Vec<CommitInfo> = serde_json::from_value(
- check_github_api(NS_LAUNCHER_COMMITS_API_URL)
- .await
- .expect("Failed request"),
- )
- .unwrap();
-
- // Get latest commit...
- let latest_commit_sha = commits[0].sha.clone();
- // ...and according artifact download URL
- let download_url = get_launcher_download_link(latest_commit_sha.clone()).await?;
-
- let archive = match download_zip_into_memory(download_url).await {
- Ok(archive) => archive,
- Err(err) => return Err(err.to_string()),
- };
-
- let extract_directory = format!(
- "{}/___flightcore-temp/download-dir/launcher-pr-{}",
- game_install_path, latest_commit_sha
- );
- match std::fs::create_dir_all(extract_directory.clone()) {
- Ok(_) => (),
- Err(err) => {
- return Err(format!(
- "Failed creating temporary download directory: {}",
- err
- ))
- }
- };
-
- let target_dir = std::path::PathBuf::from(extract_directory.clone()); // Doesn't need to exist
- match zip_extract::extract(std::io::Cursor::new(archive), &target_dir, true) {
- Ok(()) => (),
- Err(err) => {
- return Err(format!("Failed unzip: {}", err));
- }
- };
-
- // Copy only necessary files from temp dir
- // Copy:
- // - NorthstarLauncher.exe
- // - Northstar.dll
- let files_to_copy = vec!["NorthstarLauncher.exe", "Northstar.dll"];
- for file_name in files_to_copy {
- let source_file_path = format!("{}/{}", extract_directory, file_name);
- let destination_file_path = format!("{}/{}", game_install_path, file_name);
- match std::fs::copy(source_file_path, destination_file_path) {
- Ok(_result) => (),
- Err(err) => {
- return Err(format!(
- "Failed to copy necessary file {} from temp dir: {}",
- file_name, err
- ))
- }
- };
- }
-
- // delete extract directory
- match std::fs::remove_dir_all(&extract_directory) {
- Ok(()) => (),
- Err(err) => {
- return Err(format!(
- "Failed to delete temporary download directory: {}",
- err
- ))
- }
- }
-
- log::info!(
- "All done with installing launcher from {}",
- latest_commit_sha
- );
- Ok(latest_commit_sha)
-}
diff --git a/src-tauri/src/github/mod.rs b/src-tauri/src/github/mod.rs
deleted file mode 100644
index 9bc3f834..00000000
--- a/src-tauri/src/github/mod.rs
+++ /dev/null
@@ -1,312 +0,0 @@
-pub mod pull_requests;
-pub mod release_notes;
-
-use crate::constants::{
- APP_USER_AGENT, FLIGHTCORE_REPO_NAME, NORTHSTAR_RELEASE_REPO_NAME, SECTION_ORDER,
-};
-use regex::Regex;
-use serde::{Deserialize, Serialize};
-use std::collections::HashMap;
-use ts_rs::TS;
-
-#[derive(Serialize, Deserialize, Debug, Clone, TS)]
-#[ts(export)]
-pub struct Tag {
- name: String,
-}
-
-#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, TS)]
-#[ts(export)]
-pub enum Project {
- FlightCore,
- Northstar,
-}
-
-/// Wrapper type needed for frontend
-#[derive(Serialize, Deserialize, Debug, Clone, TS)]
-#[ts(export)]
-pub struct TagWrapper {
- label: String,
- value: Tag,
-}
-
-#[derive(Debug, Deserialize)]
-pub struct CommitInfo {
- pub sha: String,
- commit: Commit,
- author: Option<CommitAuthor>,
-}
-
-#[derive(Debug, Deserialize)]
-struct Commit {
- message: String,
-}
-
-#[derive(Debug, Deserialize)]
-struct CommitAuthor {
- login: String,
-}
-
-#[derive(Debug, Deserialize)]
-struct Comparison {
- commits: Vec<CommitInfo>,
-}
-
-/// Get a list of tags on the FlightCore repo
-#[tauri::command]
-pub fn get_list_of_tags(project: Project) -> Result<Vec<TagWrapper>, String> {
- // Set the repository name.
-
- // Create a `reqwest` client with a user agent.
- let client = reqwest::blocking::Client::builder()
- .user_agent(APP_USER_AGENT)
- .build()
- .unwrap();
-
- // Switch repo to fetch from based on project
- let repo_name = match project {
- Project::FlightCore => FLIGHTCORE_REPO_NAME,
- Project::Northstar => NORTHSTAR_RELEASE_REPO_NAME,
- };
-
- // Fetch the list of tags for the repository as a `Vec<Tag>`.
- let tags_url = format!("https://api.github.com/repos/{}/tags", repo_name);
- let tags: Vec<Tag> = client.get(tags_url).send().unwrap().json().unwrap();
-
- // Map each `Tag` element to a `TagWrapper` element with the desired label and `Tag` value.
- let tag_wrappers: Vec<TagWrapper> = tags
- .into_iter()
- .map(|tag| TagWrapper {
- label: tag.name.clone(),
- value: tag,
- })
- .collect();
-
- Ok(tag_wrappers)
-}
-
-/// Use GitHub API to compare two tags of the same repo against each other and get the resulting changes
-#[tauri::command]
-pub fn compare_tags(project: Project, first_tag: Tag, second_tag: Tag) -> Result<String, String> {
- match project {
- Project::FlightCore => compare_tags_flightcore(first_tag, second_tag),
- Project::Northstar => compare_tags_northstar(first_tag, second_tag),
- }
-}
-
-pub fn compare_tags_flightcore(first_tag: Tag, second_tag: Tag) -> Result<String, String> {
- // Fetch the list of commits between the two tags.
-
- // Create a `reqwest` client with a user agent.
- let client = reqwest::blocking::Client::builder()
- .user_agent(APP_USER_AGENT)
- .build()
- .unwrap();
-
- let repo = "R2NorthstarTools/FlightCore";
-
- let mut full_patch_notes = "".to_string();
-
- let mut patch_notes: Vec<String> = [].to_vec();
- println!("{}", repo);
- // let repo = "R2Northstar/NorthstarLauncher";
- let comparison_url = format!(
- "https://api.github.com/repos/{}/compare/{}...{}",
- repo, first_tag.name, second_tag.name
- );
-
- let comparison: Comparison = client.get(comparison_url).send().unwrap().json().unwrap();
- let commits = comparison.commits;
-
- // Display the list of commits.
- println!(
- "Commits between {} and {}:",
- first_tag.name, second_tag.name
- );
-
- // Iterate over all commits in the diff
- for commit in commits {
- println!(
- " * {} : {}",
- commit.sha,
- commit.commit.message.split('\n').next().unwrap()
- );
- patch_notes.push(
- commit
- .commit
- .message
- .split('\n')
- .next()
- .unwrap()
- .to_string(),
- );
- }
-
- full_patch_notes += &generate_flightcore_release_notes(patch_notes);
-
- Ok(full_patch_notes.to_string())
-}
-
-/// Generate release notes in the format used for FlightCore
-fn generate_flightcore_release_notes(commits: Vec<String>) -> String {
- let grouped_commits = group_commits_by_type(commits);
- let mut release_notes = String::new();
-
- // Go over commit types and generate notes
- for commit_type in SECTION_ORDER {
- if let Some(commit_list) = grouped_commits.get(commit_type) {
- if !commit_list.is_empty() {
- let section_title = match commit_type {
- "feat" => "**Features:**",
- "fix" => "**Bug Fixes:**",
- "docs" => "**Documentation:**",
- "style" => "**Code style changes:**",
- "refactor" => "**Code Refactoring:**",
- "build" => "**Build:**",
- "ci" => "**Continuous integration changes:**",
- "test" => "**Tests:**",
- "chore" => "**Chores:**",
- "i18n" => "**Translations:**",
- _ => "**Other:**",
- };
-
- release_notes.push_str(&format!("{}\n", section_title));
-
- for commit_message in commit_list {
- release_notes.push_str(&format!("- {}\n", commit_message));
- }
-
- release_notes.push('\n');
- }
- }
- }
-
- let release_notes = release_notes.trim_end_matches('\n').to_string();
- release_notes
-}
-
-/// Group semantic commit messages by type
-/// Commmit messages that are not formatted accordingly are marked as "other"
-fn group_commits_by_type(commits: Vec<String>) -> HashMap<String, Vec<String>> {
- let mut grouped_commits: HashMap<String, Vec<String>> = HashMap::new();
- let mut other_commits: Vec<String> = vec![];
-
- for commit in commits {
- let commit_parts: Vec<&str> = commit.splitn(2, ':').collect();
- if commit_parts.len() == 2 {
- let commit_type = commit_parts[0].to_lowercase();
- let commit_description = commit_parts[1].trim().to_string();
-
- // Check if known commit type
- if SECTION_ORDER.contains(&commit_type.as_str()) {
- let commit_list = grouped_commits.entry(commit_type.to_string()).or_default();
- commit_list.push(commit_description);
- } else {
- // otherwise add to list of "other"
- other_commits.push(commit.to_string());
- }
- } else {
- other_commits.push(commit.to_string());
- }
- }
- grouped_commits.insert("other".to_string(), other_commits);
-
- grouped_commits
-}
-
-/// Compares two tags on Northstar repo and generates release notes over the diff in tags
-/// over the 3 major repos (Northstar, NorthstarLauncher, NorthstarMods)
-pub fn compare_tags_northstar(first_tag: Tag, second_tag: Tag) -> Result<String, String> {
- // Fetch the list of commits between the two tags.
-
- // Create a `reqwest` client with a user agent.
- let client = reqwest::blocking::Client::builder()
- .user_agent(APP_USER_AGENT)
- .build()
- .unwrap();
-
- let repos = [
- "R2Northstar/Northstar",
- "R2Northstar/NorthstarLauncher",
- "R2Northstar/NorthstarMods",
- ];
-
- let mut full_patch_notes = "".to_string();
- let mut authors_set = std::collections::HashSet::new();
-
- for repo in repos {
- full_patch_notes += &format!("{}\n\n", repo);
-
- let mut patch_notes: Vec<String> = [].to_vec();
- println!("{}", repo);
- // let repo = "R2Northstar/NorthstarLauncher";
- let comparison_url = format!(
- "https://api.github.com/repos/{}/compare/{}...{}",
- repo, first_tag.name, second_tag.name
- );
-
- log::info!("Compare URL: {}", comparison_url.clone());
- let comparison: Comparison = client.get(&comparison_url).send().unwrap().json().unwrap();
- let commits = comparison.commits;
-
- // Display the list of commits.
- println!(
- "Commits between {} and {}:",
- first_tag.name, second_tag.name
- );
-
- //
- for commit in commits {
- println!(
- " * {} : {}",
- commit.sha,
- turn_pr_number_into_link(commit.commit.message.split('\n').next().unwrap(), repo)
- );
- patch_notes.push(turn_pr_number_into_link(
- commit.commit.message.split('\n').next().unwrap(),
- repo,
- ));
-
- // Store authors in set
- if commit.author.is_some() {
- authors_set.insert(commit.author.unwrap().login);
- }
- }
-
- full_patch_notes += &patch_notes.join("\n");
- full_patch_notes += "\n\n\n";
- }
-
- // Convert the set to a sorted vector.
- let mut sorted_vec: Vec<String> = authors_set.into_iter().collect();
- sorted_vec.sort_by_key(|a| a.to_lowercase());
-
- // Define a string to prepend to each element.
- let prefix = "@";
-
- // Create a new list with the prefix prepended to each element.
- let prefixed_list: Vec<String> = sorted_vec.iter().map(|s| prefix.to_owned() + s).collect();
-
- full_patch_notes += "**Contributors:**\n";
- full_patch_notes += &prefixed_list.join(" ");
-
- Ok(full_patch_notes.to_string())
-}
-
-/// Takes the commit title and repo slug and formats it as
-/// `[commit title(SHORTENED_REPO#NUMBER)](LINK)`
-fn turn_pr_number_into_link(input: &str, repo: &str) -> String {
- // Extract `Mods/Launcher` from repo title
- let last_line = repo
- .split('/')
- .next_back()
- .unwrap()
- .trim_start_matches("Northstar");
- // Extract PR number
- let re = Regex::new(r"#(\d+)").unwrap();
-
- // Generate pull request link
- let pull_link = format!("https://github.com/{}/pull/", repo);
- re.replace_all(input, format!("[{}#$1]({}$1)", last_line, pull_link))
- .to_string()
-}
diff --git a/src-tauri/src/github/pull_requests.rs b/src-tauri/src/github/pull_requests.rs
deleted file mode 100644
index de733feb..00000000
--- a/src-tauri/src/github/pull_requests.rs
+++ /dev/null
@@ -1,398 +0,0 @@
-use crate::constants::{APP_USER_AGENT, NORTHSTAR_LAUNCHER_REPO_NAME, NORTHSTAR_MODS_REPO_NAME};
-use crate::repair_and_verify::check_is_valid_game_path;
-use crate::GameInstall;
-use anyhow::anyhow;
-use serde::{Deserialize, Serialize};
-use std::fs::File;
-use std::io;
-use std::io::prelude::*;
-use std::path::Path;
-use ts_rs::TS;
-
-#[derive(Serialize, Deserialize, Debug, Clone, TS)]
-#[ts(export)]
-struct Repo {
- full_name: String,
-}
-
-#[derive(Serialize, Deserialize, Debug, Clone, TS)]
-#[ts(export)]
-struct CommitHead {
- sha: String,
- #[serde(rename = "ref")]
- gh_ref: String,
- repo: Repo,
-}
-
-#[derive(Serialize, Deserialize, Debug, Clone, TS)]
-#[ts(export)]
-pub struct PullsApiResponseElement {
- number: u64,
- title: String,
- url: String,
- head: CommitHead,
- html_url: String,
- labels: Vec<String>,
-}
-
-// GitHub API response JSON elements as structs
-#[derive(Debug, Deserialize, Clone)]
-struct WorkflowRun {
- id: u64,
- head_sha: String,
-}
-#[derive(Debug, Deserialize, Clone)]
-struct ActionsRunsResponse {
- workflow_runs: Vec<WorkflowRun>,
-}
-
-#[derive(Debug, Deserialize, Clone)]
-struct Artifact {
- id: u64,
- name: String,
- workflow_run: WorkflowRun,
-}
-
-#[derive(Debug, Deserialize, Clone)]
-struct ArtifactsResponse {
- artifacts: Vec<Artifact>,
-}
-
-#[derive(Serialize, Deserialize, Debug, Clone, TS)]
-#[ts(export)]
-pub enum PullRequestType {
- Mods,
- Launcher,
-}
-
-/// Parse pull requests from specified URL
-pub async fn get_pull_requests(
- repo: PullRequestType,
-) -> Result<Vec<PullsApiResponseElement>, anyhow::Error> {
- let repo = match repo {
- PullRequestType::Mods => NORTHSTAR_MODS_REPO_NAME,
- PullRequestType::Launcher => NORTHSTAR_LAUNCHER_REPO_NAME,
- };
-
- // Grab list of PRs
- let octocrab = octocrab::instance();
- let page = octocrab
- .pulls("R2Northstar", repo)
- .list()
- .state(octocrab::params::State::Open)
- .per_page(50) // Only grab 50 PRs
- .page(1u32)
- .send()
- .await?;
-
- // Iterate over pull request elements and insert into struct
- let mut all_pull_requests: Vec<PullsApiResponseElement> = vec![];
- for item in page.items {
- let repo = Repo {
- full_name: item
- .head
- .repo
- .ok_or(anyhow!("repo not found"))?
- .full_name
- .ok_or(anyhow!("full_name not found"))?,
- };
-
- let head = CommitHead {
- sha: item.head.sha,
- gh_ref: item.head.ref_field,
- repo,
- };
-
- // Get labels and their names and put the into vector
- let label_names: Vec<String> = item
- .labels
- .unwrap_or_else(Vec::new)
- .into_iter()
- .map(|label| label.name)
- .collect();
-
- // TODO there's probably a way to automatically serialize into the struct but I don't know yet how to
- let elem = PullsApiResponseElement {
- number: item.number,
- title: item.title.ok_or(anyhow!("title not found"))?,
- url: item.url,
- head,
- html_url: item
- .html_url
- .ok_or(anyhow!("html_url not found"))?
- .to_string(),
- labels: label_names,
- };
-
- all_pull_requests.push(elem);
- }
-
- Ok(all_pull_requests)
-}
-
-/// Gets either launcher or mods PRs
-#[tauri::command]
-pub async fn get_pull_requests_wrapper(
- install_type: PullRequestType,
-) -> Result<Vec<PullsApiResponseElement>, String> {
- match get_pull_requests(install_type).await {
- Ok(res) => Ok(res),
- Err(err) => Err(err.to_string()),
- }
-}
-
-pub async fn check_github_api(url: &str) -> Result<serde_json::Value, Box<dyn std::error::Error>> {
- let client = reqwest::Client::new();
- let res = client
- .get(url)
- .header(reqwest::header::USER_AGENT, APP_USER_AGENT)
- .send()
- .await
- .unwrap()
- .text()
- .await
- .unwrap();
-
- let json: serde_json::Value = serde_json::from_str(&res).expect("JSON was not well-formatted");
-
- Ok(json)
-}
-
-/// Downloads a file from given URL into an array in memory
-pub async fn download_zip_into_memory(download_url: String) -> Result<Vec<u8>, anyhow::Error> {
- let client = reqwest::Client::builder()
- .user_agent(APP_USER_AGENT)
- .build()?;
-
- let response = client.get(download_url).send().await?;
-
- if !response.status().is_success() {
- return Err(anyhow!("Request unsuccessful: {}", response.status()));
- }
-
- let bytes = response.bytes().await?;
- Ok(bytes.to_vec())
-}
-
-/// Gets GitHub download link of a mods PR
-fn get_mods_download_link(pull_request: PullsApiResponseElement) -> Result<String, anyhow::Error> {
- // {pr object} -> number == pr_number
- // -> head -> ref
- // -> repo -> full_name
-
- // Use repo and branch name to get download link
- let download_url = format!(
- "https://github.com/{}/archive/refs/heads/{}.zip",
- pull_request.head.repo.full_name, // repo name
- pull_request.head.gh_ref, // branch name
- );
-
- Ok(download_url)
-}
-
-/// Gets `nightly.link` artifact download link of a launcher commit
-#[tauri::command]
-pub async fn get_launcher_download_link(commit_sha: String) -> Result<String, String> {
- // Iterate over the first 10 pages of
- for i in 1..=10 {
- // Crossreference with runs API
- let runs_response: ActionsRunsResponse = match check_github_api(&format!(
- "https://api.github.com/repos/R2Northstar/NorthstarLauncher/actions/runs?page={}",
- i
- ))
- .await
- {
- Ok(result) => serde_json::from_value(result).unwrap(),
- Err(err) => return Err(format!("{}", err)),
- };
-
- // Cross-reference commit sha against workflow runs
- for workflow_run in &runs_response.workflow_runs {
- // If head commit sha of CI run matches the one passed to this function, grab CI output
- if workflow_run.head_sha == commit_sha {
- // Check artifacts
- let api_url = format!("https://api.github.com/repos/R2Northstar/NorthstarLauncher/actions/runs/{}/artifacts", workflow_run.id);
- let artifacts_response: ArtifactsResponse = serde_json::from_value(
- check_github_api(&api_url).await.expect("Failed request"),
- )
- .unwrap();
-
- let multiple_artifacts = artifacts_response.artifacts.len() > 1;
-
- // Iterate over artifacts
- for artifact in artifacts_response.artifacts {
- if multiple_artifacts && !artifact.name.starts_with("NorthstarLauncher-MSVC") {
- continue;
- }
-
- // Make sure artifact and CI run commit head sha match
- if artifact.workflow_run.head_sha == workflow_run.head_sha {
- // Download artifact
- return Ok(format!("https://nightly.link/R2Northstar/NorthstarLauncher/actions/artifacts/{}.zip", artifact.id));
- }
- }
- }
- }
- }
-
- Err(format!(
- "Couldn't grab download link for \"{}\". Corresponding PR might be too old and therefore no CI build has been detected. Maybe ask author to update?",
- commit_sha
- ))
-}
-
-/// Adds a batch file that allows for launching Northstar with mods PR profile
-fn add_batch_file(game_install_path: &str) {
- let batch_path = format!("{}/r2ns-launch-mod-pr-version.bat", game_install_path);
- let path = Path::new(&batch_path);
- let display = path.display();
-
- // Open a file in write-only mode, returns `io::Result<File>`
- let mut file = match File::create(path) {
- Err(why) => panic!("couldn't create {}: {}", display, why),
- Ok(file) => file,
- };
-
- // Write the string to `file`, returns `io::Result<()>`
- let batch_file_content =
- "NorthstarLauncher.exe -profile=R2Northstar-PR-test-managed-folder\r\n";
-
- match file.write_all(batch_file_content.as_bytes()) {
- Err(why) => panic!("couldn't write to {}: {}", display, why),
- Ok(_) => log::info!("successfully wrote to {}", display),
- }
-}
-
-/// Downloads selected launcher PR and extracts it into game install path
-#[tauri::command]
-pub async fn apply_launcher_pr(
- pull_request: PullsApiResponseElement,
- game_install: GameInstall,
-) -> Result<(), String> {
- // Exit early if wrong game path
- check_is_valid_game_path(&game_install.game_path)?;
-
- // get download link
- let download_url = match get_launcher_download_link(pull_request.head.sha.clone()).await {
- Ok(res) => res,
- Err(err) => {
- return Err(format!(
- "Couldn't grab download link for PR \"{}\". {}",
- pull_request.number, err
- ))
- }
- };
-
- let archive = match download_zip_into_memory(download_url).await {
- Ok(archive) => archive,
- Err(err) => return Err(err.to_string()),
- };
-
- let extract_directory = format!(
- "{}/___flightcore-temp/download-dir/launcher-pr-{}",
- game_install.game_path, pull_request.number
- );
- match std::fs::create_dir_all(extract_directory.clone()) {
- Ok(_) => (),
- Err(err) => {
- return Err(format!(
- "Failed creating temporary download directory: {}",
- err
- ))
- }
- };
-
- let target_dir = std::path::PathBuf::from(extract_directory.clone()); // Doesn't need to exist
- match zip_extract::extract(io::Cursor::new(archive), &target_dir, true) {
- Ok(()) => (),
- Err(err) => {
- return Err(format!("Failed unzip: {}", err));
- }
- };
-
- // Copy only necessary files from temp dir
- // Copy:
- // - NorthstarLauncher.exe
- // - Northstar.dll
- let files_to_copy = vec!["NorthstarLauncher.exe", "Northstar.dll"];
- for file_name in files_to_copy {
- let source_file_path = format!("{}/{}", extract_directory, file_name);
- let destination_file_path = format!("{}/{}", game_install.game_path, file_name);
- match std::fs::copy(source_file_path, destination_file_path) {
- Ok(_result) => (),
- Err(err) => {
- return Err(format!(
- "Failed to copy necessary file {} from temp dir: {}",
- file_name, err
- ))
- }
- };
- }
-
- // delete extract directory
- match std::fs::remove_dir_all(&extract_directory) {
- Ok(()) => (),
- Err(err) => {
- return Err(format!(
- "Failed to delete temporary download directory: {}",
- err
- ))
- }
- }
-
- log::info!("All done with installing launcher PR");
- Ok(())
-}
-
-/// Downloads selected mods PR and extracts it into profile in game install path
-#[tauri::command]
-pub async fn apply_mods_pr(
- pull_request: PullsApiResponseElement,
- game_install: GameInstall,
-) -> Result<(), String> {
- // Exit early if wrong game path
- check_is_valid_game_path(&game_install.game_path)?;
-
- let download_url = match get_mods_download_link(pull_request) {
- Ok(url) => url,
- Err(err) => return Err(err.to_string()),
- };
-
- let archive = match download_zip_into_memory(download_url).await {
- Ok(archive) => archive,
- Err(err) => return Err(err.to_string()),
- };
-
- let profile_folder = format!(
- "{}/R2Northstar-PR-test-managed-folder",
- game_install.game_path
- );
-
- // Delete previously managed folder
- if std::fs::remove_dir_all(profile_folder.clone()).is_err() {
- if std::path::Path::new(&profile_folder).exists() {
- log::error!("Failed removing previous dir");
- } else {
- log::warn!("Failed removing folder that doesn't exist. Probably cause first run");
- }
- };
-
- // Create profile folder
- match std::fs::create_dir_all(profile_folder.clone()) {
- Ok(()) => (),
- Err(err) => return Err(err.to_string()),
- }
-
- let target_dir = std::path::PathBuf::from(format!("{}/mods", profile_folder)); // Doesn't need to exist
- match zip_extract::extract(io::Cursor::new(archive), &target_dir, true) {
- Ok(()) => (),
- Err(err) => {
- return Err(format!("Failed unzip: {}", err));
- }
- };
- // Add batch file to launch right profile
- add_batch_file(&game_install.game_path);
-
- log::info!("All done with installing mods PR");
- Ok(())
-}
diff --git a/src-tauri/src/github/release_notes.rs b/src-tauri/src/github/release_notes.rs
deleted file mode 100644
index 4adfb24b..00000000
--- a/src-tauri/src/github/release_notes.rs
+++ /dev/null
@@ -1,244 +0,0 @@
-use rand::prelude::SliceRandom;
-use serde::{Deserialize, Serialize};
-use std::vec::Vec;
-use ts_rs::TS;
-
-#[derive(Serialize, Deserialize, Debug, Clone, TS)]
-#[ts(export)]
-pub struct ReleaseInfo {
- pub name: String,
- pub published_at: String,
- pub body: String,
-}
-
-#[derive(Serialize, Deserialize, Debug, Clone, TS)]
-#[ts(export)]
-pub struct FlightCoreVersion {
- tag_name: String,
- published_at: String,
-}
-
-/// Gets newest FlighCore version from GitHub
-#[tauri::command]
-pub async fn get_newest_flightcore_version() -> Result<FlightCoreVersion, String> {
- // Get newest version number from GitHub API
- log::info!("Checking GitHub API");
- let octocrab = octocrab::instance();
- let page = octocrab
- .repos("R2NorthstarTools", "FlightCore")
- .releases()
- .list()
- // Optional Parameters
- .per_page(1)
- .page(1u32)
- // Send the request
- .send()
- .await
- .map_err(|err| err.to_string())?;
-
- // Get newest element
- let latest_release_item = &page.items[0];
-
- let flightcore_version = FlightCoreVersion {
- tag_name: latest_release_item.tag_name.clone(),
- published_at: latest_release_item.published_at.unwrap().to_rfc3339(),
- };
- log::info!("Done checking GitHub API");
-
- Ok(flightcore_version)
-}
-
-/// Checks if installed FlightCore version is up-to-date
-/// false -> FlightCore install is up-to-date
-/// true -> FlightCore install is outdated
-#[tauri::command]
-pub async fn check_is_flightcore_outdated() -> Result<bool, String> {
- let newest_flightcore_release = get_newest_flightcore_version().await?;
- // Parse version number excluding leading `v`
- let newest_version = semver::Version::parse(&newest_flightcore_release.tag_name[1..]).unwrap();
-
- // Get version of installed FlightCore
- let current_version = env!("CARGO_PKG_VERSION");
- let current_version = semver::Version::parse(current_version).unwrap();
-
- #[cfg(debug_assertions)]
- let is_outdated = current_version < newest_version;
- #[cfg(not(debug_assertions))]
- let is_outdated = current_version != newest_version;
-
- // If outdated, check how new the update is
- if is_outdated {
- // Time to wait (2h) h * m * s
- let threshold_seconds = 2 * 60 * 60;
-
- // Get current time
- let current_time = chrono::Utc::now();
-
- // Get latest release time from GitHub API response
- let result = chrono::DateTime::parse_from_rfc3339(&newest_flightcore_release.published_at)
- .unwrap()
- .with_timezone(&chrono::Utc);
-
- // Check if current time is outside of threshold
- let diff = current_time - result;
- if diff.num_seconds() < threshold_seconds {
- // User would be outdated but the newest release is recent
- // therefore we do not wanna show outdated warning.
- return Ok(false);
- }
- return Ok(true);
- }
-
- Ok(is_outdated)
-}
-
-#[tauri::command]
-pub async fn get_northstar_release_notes() -> Result<Vec<ReleaseInfo>, String> {
- let octocrab = octocrab::instance();
- let page = octocrab
- .repos("R2Northstar", "Northstar")
- .releases()
- .list()
- // Optional Parameters
- .per_page(25)
- .page(1u32)
- // Send the request
- .send()
- .await
- .map_err(|err| err.to_string())?;
-
- // TODO there's probably a way to automatically serialize into the struct but I don't know yet how to
- let mut release_info_vector: Vec<ReleaseInfo> = vec![];
- for item in page.items {
- let release_info = ReleaseInfo {
- name: item.name.ok_or(String::from("Release name not found"))?,
- published_at: item
- .published_at
- .ok_or(String::from("Release date not found"))?
- .to_rfc3339(),
- body: item.body.ok_or(String::from("Release body not found"))?,
- };
- release_info_vector.push(release_info);
- }
-
- log::info!("Done checking GitHub API");
-
- Ok(release_info_vector)
-}
-
-/// Checks latest GitHub release and generates a announcement message for Discord based on it
-#[tauri::command]
-pub async fn generate_release_note_announcement() -> Result<String, String> {
- let octocrab = octocrab::instance();
- let page = octocrab
- .repos("R2Northstar", "Northstar")
- .releases()
- .list()
- // Optional Parameters
- .per_page(1)
- .page(1u32)
- // Send the request
- .send()
- .await
- .unwrap();
-
- // Get newest element
- let latest_release_item = &page.items[0];
-
- // Extract the URL to the GitHub release note
- let github_release_link = latest_release_item.html_url.clone();
-
- // Extract release version number
- let current_ns_version = &latest_release_item.tag_name;
-
- // Extract changelog and format it
- let changelog = remove_markdown_links::remove_markdown_links(
- latest_release_item
- .body
- .as_ref()
- .unwrap()
- .split("**Contributors:**")
- .next()
- .unwrap()
- .trim(),
- );
-
- // Strings to insert for different sections
- // Hardcoded for now
- let general_info = "REPLACE ME";
- let modders_info = "Mod compatibility should not be impacted";
- let server_hosters_info = "REPLACE ME";
-
- let mut rng = rand::thread_rng();
- let attributes = vec![
- "adorable",
- "amazing",
- "beautiful",
- "blithsome",
- "brilliant",
- "compassionate",
- "dazzling",
- "delightful",
- "distinguished",
- "elegant",
- "enigmatic",
- "enthusiastic",
- "fashionable",
- "fortuitous",
- "friendly",
- "generous",
- "gleeful",
- "gorgeous",
- "handsome",
- "lively",
- "lovely",
- "lucky",
- "lustrous",
- "marvelous",
- "merry",
- "mirthful",
- "phantasmagorical",
- "pretty",
- "propitious",
- "ravishing",
- "sincere",
- "sophisticated fellow",
- "stupendous",
- "vivacious",
- "wonderful",
- "zestful",
- ];
-
- let selected_attribute = attributes.choose(&mut rng).unwrap();
-
- // Build announcement string
- let return_string = format!(
- r"Hello {selected_attribute} people <3
-**Northstar `{current_ns_version}` is out!**
-
-{general_info}
-
-__**Modders:**__
-
-{modders_info}
-
-__**Server hosters:**__
-
-{server_hosters_info}
-
-__**Changelog:**__
-```
-{changelog}
-```
-{github_release_link}
-
-Checkout #installation on how to install/update Northstar
-(the process is the same for both, using a Northstar installer like FlightCore, Viper, or VTOL is recommended over manual installation)
-
-If you do notice any bugs, please open an issue on Github or drop a message in the thread below
-"
- );
-
- // Return built announcement message
- Ok(return_string.to_string())
-}
diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs
new file mode 100644
index 00000000..4a277ef3
--- /dev/null
+++ b/src-tauri/src/lib.rs
@@ -0,0 +1,14 @@
+// Learn more about Tauri commands at https://tauri.app/develop/calling-rust/
+#[tauri::command]
+fn greet(name: &str) -> String {
+ format!("Hello, {}! You've been greeted from Rust!", name)
+}
+
+#[cfg_attr(mobile, tauri::mobile_entry_point)]
+pub fn run() {
+ tauri::Builder::default()
+ .plugin(tauri_plugin_opener::init())
+ .invoke_handler(tauri::generate_handler![greet])
+ .run(tauri::generate_context!())
+ .expect("error while running tauri application");
+}
diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs
index a9f484f5..2abccd9e 100644
--- a/src-tauri/src/main.rs
+++ b/src-tauri/src/main.rs
@@ -1,221 +1,6 @@
-#![cfg_attr(
- all(not(debug_assertions), target_os = "windows"),
- windows_subsystem = "windows"
-)]
-
-use std::{env, time::Duration};
-
-mod constants;
-mod development;
-mod github;
-mod mod_management;
-mod northstar;
-mod platform_specific;
-mod repair_and_verify;
-mod thunderstore;
-mod util;
-
-use serde::{Deserialize, Serialize};
-#[cfg(target_os = "windows")]
-use tauri::api::dialog::blocking::MessageDialogBuilder;
-#[cfg(target_os = "windows")]
-use tauri::api::dialog::{MessageDialogButtons, MessageDialogKind};
-use tauri::Manager;
-use tokio::time::sleep;
-use ts_rs::TS;
-
-#[derive(Serialize, Deserialize, Debug, Clone, TS)]
-#[ts(export)]
-struct NorthstarThunderstoreRelease {
- package: String,
- version: String,
-}
-
-#[derive(Serialize, Deserialize, Debug, Clone, TS)]
-#[ts(export)]
-pub struct NorthstarThunderstoreReleaseWrapper {
- label: String,
- value: NorthstarThunderstoreRelease,
-}
+// Prevents additional console window on Windows in release, DO NOT REMOVE!!
+#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
fn main() {
- // Setup logger
- let mut log_builder = pretty_env_logger::formatted_builder();
- log_builder.parse_filters("info");
- let logger = sentry_log::SentryLogger::with_dest(log_builder.build());
-
- log::set_boxed_logger(Box::new(logger)).unwrap();
- log::set_max_level(log::LevelFilter::Info);
-
- // Only enable Sentry crash logs on release
- #[cfg(not(debug_assertions))]
- let _guard = sentry::init((
- "https://f833732deb2240b0b2dc4abce97d0f1d@o1374052.ingest.sentry.io/6692177",
- sentry::ClientOptions {
- release: sentry::release_name!(),
- attach_stacktrace: true,
- ..Default::default()
- },
- ));
-
- let tauri_builder_res = tauri::Builder::default()
- .plugin(tauri_plugin_store::Builder::default().build())
- .setup(|app| {
- let app_handle = app.app_handle();
- tauri::async_runtime::spawn(async move {
- loop {
- sleep(Duration::from_millis(2000)).await;
- // println!("sending backend ping");
- app_handle.emit_all("backend-ping", "ping").unwrap();
- }
- });
- let app_handle = app.app_handle();
- tauri::async_runtime::spawn(async move {
- loop {
- sleep(Duration::from_millis(2000)).await;
- app_handle
- .emit_all(
- "ea-app-running-ping",
- util::check_ea_app_or_origin_running(),
- )
- .unwrap();
- }
- });
- let app_handle = app.app_handle();
- tauri::async_runtime::spawn(async move {
- loop {
- sleep(Duration::from_millis(2000)).await;
- app_handle
- .emit_all("northstar-running-ping", util::check_northstar_running())
- .unwrap();
- }
- });
-
- // Emit updated player and server count to GUI
- let app_handle = app.app_handle();
- tauri::async_runtime::spawn(async move {
- loop {
- sleep(constants::REFRESH_DELAY).await;
- app_handle
- .emit_all(
- "northstar-statistics",
- util::get_server_player_count().await,
- )
- .unwrap();
- }
- });
-
- Ok(())
- })
- .manage(())
- .invoke_handler(tauri::generate_handler![
- development::install_git_main,
- github::compare_tags,
- github::get_list_of_tags,
- github::pull_requests::apply_launcher_pr,
- github::pull_requests::apply_mods_pr,
- github::pull_requests::get_launcher_download_link,
- github::pull_requests::get_pull_requests_wrapper,
- github::release_notes::check_is_flightcore_outdated,
- github::release_notes::generate_release_note_announcement,
- github::release_notes::get_newest_flightcore_version,
- github::release_notes::get_northstar_release_notes,
- mod_management::delete_northstar_mod,
- mod_management::delete_thunderstore_mod,
- mod_management::get_installed_mods_and_properties,
- mod_management::install_mod_wrapper,
- mod_management::set_mod_enabled_status,
- northstar::check_is_northstar_outdated,
- northstar::get_available_northstar_versions,
- northstar::get_northstar_version_number,
- northstar::install::find_game_install_location,
- northstar::install::install_northstar_wrapper,
- northstar::install::update_northstar,
- northstar::launch_northstar,
- northstar::profile::clone_profile,
- northstar::profile::delete_profile,
- northstar::profile::fetch_profiles,
- northstar::profile::validate_profile,
- platform_specific::check_cgnat,
- platform_specific::get_host_os,
- platform_specific::get_local_northstar_proton_wrapper_version,
- platform_specific::install_northstar_proton_wrapper,
- platform_specific::uninstall_northstar_proton_wrapper,
- repair_and_verify::clean_up_download_folder_wrapper,
- repair_and_verify::disable_all_but_core,
- repair_and_verify::get_log_list,
- repair_and_verify::verify_game_files,
- repair_and_verify::verify_install_location,
- thunderstore::query_thunderstore_packages_api,
- util::close_application,
- util::force_panic,
- util::get_flightcore_version_number,
- util::get_server_player_count,
- util::is_debug_mode,
- util::kill_northstar,
- util::open_repair_window,
- ])
- .run(tauri::generate_context!());
-
- match tauri_builder_res {
- Ok(()) => (),
- Err(err) => {
- // Failed to launch system native web view
-
- // Log error on Linux
- #[cfg(not(target_os = "windows"))]
- {
- log::error!("{err}");
- }
-
- // On Windows we can show an error window using Windows API to show how to install WebView2
- #[cfg(target_os = "windows")]
- {
- log::error!("WebView2 not installed: {err}");
- let dialog = MessageDialogBuilder::new(
- "WebView2 not found",
- "FlightCore requires WebView2 to run.\n\nClick OK to open installation instructions."
- )
- .kind(MessageDialogKind::Error)
- .buttons(MessageDialogButtons::Ok);
-
- if dialog.show() {
- // Open the installation instructions URL in the user's default web browser
- open::that("https://github.com/R2NorthstarTools/FlightCore/blob/main/docs/TROUBLESHOOTING.md#flightcore-wont-launch").unwrap();
- }
- }
- }
- };
-}
-
-/// Defines how Titanfall2 was installed (Steam, Origin, ...)
-#[derive(Serialize, Deserialize, Debug, Clone, TS)]
-#[ts(export)]
-pub enum InstallType {
- STEAM,
- ORIGIN,
- EAPLAY,
- UNKNOWN,
-}
-
-/// Object holding information of the Titanfall2 install, including
-/// - Install path
-/// - Active profile
-/// - Type of installation (Steam, Origin, ...)
-#[derive(Serialize, Deserialize, Debug, Clone)]
-pub struct GameInstall {
- pub game_path: String,
- pub profile: String,
- pub install_type: InstallType,
-}
-
-/// Object holding various information about a Northstar mod
-#[derive(Serialize, Deserialize, Debug, Clone, TS)]
-#[ts(export)]
-pub struct NorthstarMod {
- pub name: String,
- pub version: Option<String>,
- pub thunderstore_mod_string: Option<String>,
- pub enabled: bool,
- pub directory: String,
+ tauri_app_lib::run()
}
diff --git a/src-tauri/src/mod_management/legacy.rs b/src-tauri/src/mod_management/legacy.rs
deleted file mode 100644
index 1e9f90f5..00000000
--- a/src-tauri/src/mod_management/legacy.rs
+++ /dev/null
@@ -1,213 +0,0 @@
-use crate::constants::BLACKLISTED_MODS;
-use crate::mod_management::{
- delete_mod_folder, get_installed_mods_and_properties, ParsedThunderstoreModString,
-};
-use crate::GameInstall;
-use crate::NorthstarMod;
-use anyhow::{anyhow, Result};
-use serde::{Deserialize, Serialize};
-use std::{io::Read, path::PathBuf};
-
-#[derive(Serialize, Deserialize, Debug, Clone)]
-pub struct ModJson {
- #[serde(rename = "Name")]
- name: String,
- #[serde(rename = "ThunderstoreModString")]
- thunderstore_mod_string: Option<String>,
- #[serde(rename = "Version")]
- version: Option<String>,
-}
-
-/// Parses `manifest.json` for Thunderstore mod string
-fn parse_for_thunderstore_mod_string(nsmod_path: &str) -> Result<String, anyhow::Error> {
- let manifest_json_path = format!("{}/manifest.json", nsmod_path);
- let ts_author_txt_path = format!("{}/thunderstore_author.txt", nsmod_path);
-
- // Check if `manifest.json` exists and parse
- let data = std::fs::read_to_string(manifest_json_path)?;
- let thunderstore_manifest: super::ThunderstoreManifest = json5::from_str(&data)?;
-
- // Check if `thunderstore_author.txt` exists and parse
- let mut file = std::fs::File::open(ts_author_txt_path)?;
- let mut thunderstore_author = String::new();
- file.read_to_string(&mut thunderstore_author)?;
-
- // Build mod string
- let thunderstore_mod_string = format!(
- "{}-{}-{}",
- thunderstore_author, thunderstore_manifest.name, thunderstore_manifest.version_number
- );
-
- Ok(thunderstore_mod_string)
-}
-
-/// Parse `mods` folder for installed mods.
-pub fn parse_installed_mods(
- game_install: &GameInstall,
-) -> Result<Vec<NorthstarMod>, anyhow::Error> {
- let ns_mods_folder = format!("{}/{}/mods/", game_install.game_path, game_install.profile);
-
- let paths = match std::fs::read_dir(ns_mods_folder) {
- Ok(paths) => paths,
- Err(_err) => return Err(anyhow!("No mods folder found")),
- };
-
- let mut directories: Vec<PathBuf> = Vec::new();
- let mut mods: Vec<NorthstarMod> = Vec::new();
-
- // Get list of folders in `mods` directory
- for path in paths {
- log::info!("{path:?}");
- let my_path = path.unwrap().path();
- log::info!("{my_path:?}");
-
- let md = std::fs::metadata(my_path.clone()).unwrap();
- if md.is_dir() {
- directories.push(my_path);
- }
- }
-
- // Iterate over folders and check if they are Northstar mods
- for directory in directories {
- let directory_str = directory.to_str().unwrap().to_string();
- // Check if mod.json exists
- let mod_json_path = format!("{}/mod.json", directory_str);
- if !std::path::Path::new(&mod_json_path).exists() {
- continue;
- }
-
- // Parse mod.json and get mod name
-
- // Read file into string and parse it
- let data = std::fs::read_to_string(mod_json_path.clone())?;
- let parsed_mod_json: ModJson = match json5::from_str(&data) {
- Ok(parsed_json) => parsed_json,
- Err(err) => {
- log::warn!("Failed parsing {} with {}", mod_json_path, err.to_string());
- continue;
- }
- };
- // Get Thunderstore mod string if it exists
- let thunderstore_mod_string = match parsed_mod_json.thunderstore_mod_string {
- // Attempt legacy method for getting Thunderstore string first
- Some(ts_mod_string) => Some(ts_mod_string),
- // Legacy method failed
- None => match parse_for_thunderstore_mod_string(&directory_str) {
- Ok(thunderstore_mod_string) => Some(thunderstore_mod_string),
- Err(_err) => None,
- },
- };
- // Get directory path
- let mod_directory = directory.to_str().unwrap().to_string();
-
- let ns_mod = NorthstarMod {
- name: parsed_mod_json.name,
- version: parsed_mod_json.version,
- thunderstore_mod_string,
- enabled: false, // Placeholder
- directory: mod_directory,
- };
-
- mods.push(ns_mod);
- }
-
- // Return found mod names
- Ok(mods)
-}
-
-/// Deletes all legacy packages that match in author and mod name
-/// regardless of version
-///
-/// "legacy package" refers to a Thunderstore package installed into the `mods` folder
-/// by extracting Northstar mods contained inside and then adding `manifest.json` and `thunderstore_author.txt`
-/// to indicate which Thunderstore package they are part of
-pub fn delete_legacy_package_install(
- thunderstore_mod_string: &str,
- game_install: &GameInstall,
-) -> Result<(), String> {
- let thunderstore_mod_string: ParsedThunderstoreModString =
- thunderstore_mod_string.parse().unwrap();
- let found_installed_legacy_mods = match parse_installed_mods(game_install) {
- Ok(res) => res,
- Err(err) => return Err(err.to_string()),
- };
-
- for legacy_mod in found_installed_legacy_mods {
- if legacy_mod.thunderstore_mod_string.is_none() {
- continue; // Not a thunderstore mod
- }
-
- let current_mod_ts_string: ParsedThunderstoreModString = legacy_mod
- .clone()
- .thunderstore_mod_string
- .unwrap()
- .parse()
- .unwrap();
-
- if thunderstore_mod_string.author_name == current_mod_ts_string.author_name
- && thunderstore_mod_string.mod_name == current_mod_ts_string.mod_name
- {
- // They match, delete
- delete_mod_folder(&legacy_mod.directory)?;
- }
- }
-
- Ok(())
-}
-
-/// Deletes all NorthstarMods related to a Thunderstore mod
-pub fn delete_thunderstore_mod(
- game_install: GameInstall,
- thunderstore_mod_string: String,
-) -> Result<(), String> {
- // Prevent deleting core mod
- for core_ts_mod in BLACKLISTED_MODS {
- if thunderstore_mod_string == core_ts_mod {
- return Err(format!("Cannot remove core mod {thunderstore_mod_string}"));
- }
- }
-
- let parsed_ts_mod_string: ParsedThunderstoreModString =
- thunderstore_mod_string.parse().unwrap();
-
- // Get installed mods
- let installed_ns_mods = get_installed_mods_and_properties(game_install)?;
-
- // List of mod folders to remove
- let mut mod_folders_to_remove: Vec<String> = Vec::new();
-
- // Get folder name based on Thundestore mod string
- for installed_ns_mod in installed_ns_mods {
- if installed_ns_mod.thunderstore_mod_string.is_none() {
- // Not a Thunderstore mod
- continue;
- }
-
- let installed_ns_mod_ts_string: ParsedThunderstoreModString = installed_ns_mod
- .thunderstore_mod_string
- .unwrap()
- .parse()
- .unwrap();
-
- // Installed mod matches specified Thunderstore mod string
- if parsed_ts_mod_string.author_name == installed_ns_mod_ts_string.author_name
- && parsed_ts_mod_string.mod_name == installed_ns_mod_ts_string.mod_name
- {
- // Add folder to list of folder to remove
- mod_folders_to_remove.push(installed_ns_mod.directory);
- }
- }
-
- if mod_folders_to_remove.is_empty() {
- return Err(format!(
- "No mods removed as no Northstar mods matching {thunderstore_mod_string} were found to be installed."
- ));
- }
-
- // Delete given folders
- for mod_folder in mod_folders_to_remove {
- delete_mod_folder(&mod_folder)?;
- }
-
- Ok(())
-}
diff --git a/src-tauri/src/mod_management/mod.rs b/src-tauri/src/mod_management/mod.rs
deleted file mode 100644
index 52ef1180..00000000
--- a/src-tauri/src/mod_management/mod.rs
+++ /dev/null
@@ -1,797 +0,0 @@
-// This file contains various mod management functions
-
-use crate::constants::{BLACKLISTED_MODS, CORE_MODS, MODS_WITH_SPECIAL_REQUIREMENTS};
-use async_recursion::async_recursion;
-use thermite::prelude::ThermiteError;
-
-use crate::NorthstarMod;
-use anyhow::{anyhow, Result};
-use serde::{Deserialize, Serialize};
-use std::error::Error;
-use std::str::FromStr;
-use std::string::ToString;
-use std::{fs, path::PathBuf};
-
-mod legacy;
-mod plugins;
-use crate::GameInstall;
-
-#[derive(Debug, Clone)]
-pub struct ParsedThunderstoreModString {
- author_name: String,
- mod_name: String,
- version: String,
-}
-
-impl std::str::FromStr for ParsedThunderstoreModString {
- type Err = &'static str; // todo use an better error management
-
- fn from_str(s: &str) -> Result<Self, Self::Err> {
- // Check whether Thunderstore string passes regex
- let re = regex::Regex::new(r"^[a-zA-Z0-9_]+-[a-zA-Z0-9_]+-\d+\.\d+\.\d++$").unwrap();
- if !re.is_match(s) {
- return Err("Incorrect format");
- }
-
- let mut parts = s.split('-');
-
- let author_name = parts.next().ok_or("None value on author_name")?.to_string();
- let mod_name = parts.next().ok_or("None value on mod_name")?.to_string();
- let version = parts.next().ok_or("None value on version")?.to_string();
-
- Ok(ParsedThunderstoreModString {
- author_name,
- mod_name,
- version,
- })
- }
-}
-
-impl std::fmt::Display for ParsedThunderstoreModString {
- fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
- write!(f, "{}-{}-{}", self.author_name, self.mod_name, self.version)
- }
-}
-
-#[derive(Serialize, Deserialize, Debug, Clone)]
-pub struct ThunderstoreManifest {
- name: String,
- version_number: String,
-}
-
-/// A wrapper around a temporary file handle and its path.
-///
-/// This struct is designed to be used for temporary files that should be automatically deleted
-/// when the `TempFile` instance goes out of scope.
-#[derive(Debug)]
-pub struct TempFile(fs::File, PathBuf);
-
-impl TempFile {
- pub fn new(file: fs::File, path: PathBuf) -> Self {
- Self(file, path)
- }
-
- pub fn file(&self) -> &fs::File {
- &self.0
- }
-}
-
-impl Drop for TempFile {
- fn drop(&mut self) {
- _ = fs::remove_file(&self.1)
- }
-}
-
-impl std::ops::Deref for TempFile {
- type Target = fs::File;
-
- fn deref(&self) -> &Self::Target {
- &self.0
- }
-}
-
-/// Installs the specified mod
-#[tauri::command]
-pub async fn install_mod_wrapper(
- game_install: GameInstall,
- thunderstore_mod_string: String,
-) -> Result<(), String> {
- match fc_download_mod_and_install(&game_install, &thunderstore_mod_string).await {
- Ok(()) => (),
- Err(err) => {
- log::warn!("{err}");
- return Err(err);
- }
- };
- match crate::repair_and_verify::clean_up_download_folder(&game_install, false) {
- Ok(()) => Ok(()),
- Err(err) => {
- log::info!("Failed to delete download folder due to {}", err);
- // Failure to delete download folder is not an error in mod install
- // As such ignore. User can still force delete if need be
- Ok(())
- }
- }
-}
-
-/// Returns a serde json object of the parsed `enabledmods.json` file
-pub fn get_enabled_mods(game_install: &GameInstall) -> Result<serde_json::value::Value, String> {
- let enabledmods_json_path = format!(
- "{}/{}/enabledmods.json",
- game_install.game_path, game_install.profile
- );
-
- // Check for JSON file
- if !std::path::Path::new(&enabledmods_json_path).exists() {
- return Err("enabledmods.json not found".to_string());
- }
-
- // Read file
- let data = match std::fs::read_to_string(enabledmods_json_path) {
- Ok(data) => data,
- Err(err) => return Err(err.to_string()),
- };
-
- // Parse JSON
- let res: serde_json::Value = match serde_json::from_str(&data) {
- Ok(result) => result,
- Err(err) => return Err(format!("Failed to read JSON due to: {}", err)),
- };
-
- // Return parsed data
- Ok(res)
-}
-
-/// Gets all currently installed and enabled/disabled mods to rebuild `enabledmods.json`
-pub fn rebuild_enabled_mods_json(game_install: &GameInstall) -> Result<(), String> {
- let enabledmods_json_path = format!(
- "{}/{}/enabledmods.json",
- game_install.game_path, game_install.profile
- );
- let mods_and_properties = get_installed_mods_and_properties(game_install.clone())?;
-
- // Create new mapping
- let mut my_map = serde_json::Map::new();
-
- // Build mapping
- for ns_mod in mods_and_properties.into_iter() {
- my_map.insert(ns_mod.name, serde_json::Value::Bool(ns_mod.enabled));
- }
-
- // Turn into serde object
- let obj = serde_json::Value::Object(my_map);
-
- // Write to file
- std::fs::write(
- enabledmods_json_path,
- serde_json::to_string_pretty(&obj).unwrap(),
- )
- .unwrap();
-
- Ok(())
-}
-
-/// Set the status of a passed mod to enabled/disabled
-#[tauri::command]
-pub fn set_mod_enabled_status(
- game_install: GameInstall,
- mod_name: String,
- is_enabled: bool,
-) -> Result<(), String> {
- let enabledmods_json_path = format!(
- "{}/{}/enabledmods.json",
- game_install.game_path, game_install.profile
- );
-
- // Parse JSON
- let mut res: serde_json::Value = match get_enabled_mods(&game_install) {
- Ok(res) => res,
- Err(err) => {
- log::warn!("Couldn't parse `enabledmod.json`: {}", err);
- log::warn!("Rebuilding file.");
-
- rebuild_enabled_mods_json(&game_install)?;
-
- // Then try again
- get_enabled_mods(&game_install)?
- }
- };
-
- // Check if key exists
- if res.get(mod_name.clone()).is_none() {
- // If it doesn't exist, rebuild `enabledmod.json`
- log::info!("Value not found in `enabledmod.json`. Rebuilding file");
- rebuild_enabled_mods_json(&game_install)?;
-
- // Then try again
- res = get_enabled_mods(&game_install)?;
- }
-
- // Update value
- res[mod_name] = serde_json::Value::Bool(is_enabled);
-
- // Save the JSON structure into the output file
- std::fs::write(
- enabledmods_json_path,
- serde_json::to_string_pretty(&res).unwrap(),
- )
- .unwrap();
-
- Ok(())
-}
-
-/// Resembles the bare minimum keys in Northstar `mods.json`
-#[derive(Serialize, Deserialize, Debug, Clone)]
-pub struct ModJson {
- #[serde(rename = "Name")]
- name: String,
- #[serde(rename = "Version")]
- version: Option<String>,
-}
-
-/// Parse `mods` folder for installed mods.
-pub fn parse_mods_in_package(
- package_mods_path: PathBuf,
- thunderstore_mod_string: ParsedThunderstoreModString,
-) -> Result<Vec<NorthstarMod>, anyhow::Error> {
- let paths = match std::fs::read_dir(package_mods_path) {
- Ok(paths) => paths,
- Err(_err) => return Err(anyhow!("No mods folder found")),
- };
-
- let mut directories: Vec<PathBuf> = Vec::new();
- let mut mods: Vec<NorthstarMod> = Vec::new();
-
- // Get list of folders in `mods` directory
- for path in paths {
- let my_path = path?.path();
- let md = std::fs::metadata(my_path.clone())?;
- if md.is_dir() {
- directories.push(my_path);
- }
- }
-
- // Iterate over folders and check if they are Northstar mods
- for directory in directories {
- let directory_str = directory.to_str().unwrap().to_string();
- // Check if mod.json exists
- let mod_json_path = format!("{}/mod.json", directory_str);
- if !std::path::Path::new(&mod_json_path).exists() {
- continue;
- }
-
- // Read file into string and parse it
- let data = std::fs::read_to_string(mod_json_path.clone())?;
- let parsed_mod_json: ModJson = match json5::from_str(&data) {
- Ok(parsed_json) => parsed_json,
- Err(err) => {
- log::warn!("Failed parsing {} with {}", mod_json_path, err.to_string());
- continue;
- }
- };
-
- // Get directory path
- let mod_directory = directory.to_str().unwrap().to_string();
-
- let ns_mod = NorthstarMod {
- name: parsed_mod_json.name,
- version: parsed_mod_json.version,
- thunderstore_mod_string: Some(thunderstore_mod_string.to_string()),
- enabled: false, // Placeholder
- directory: mod_directory,
- };
-
- mods.push(ns_mod);
- }
-
- // Return found mod names
- Ok(mods)
-}
-
-/// Parse `packages` folder for installed mods.
-pub fn parse_installed_package_mods(
- game_install: &GameInstall,
-) -> Result<Vec<NorthstarMod>, anyhow::Error> {
- let mut collected_mods: Vec<NorthstarMod> = Vec::new();
-
- let packages_folder = format!(
- "{}/{}/packages/",
- game_install.game_path, game_install.profile
- );
-
- let packages_dir = match fs::read_dir(packages_folder) {
- Ok(res) => res,
- Err(err) => {
- // We couldn't read directory, probably cause it doesn't exist yet.
- // In that case we just say no package mods installed.
- log::warn!("{err}");
- return Ok(vec![]);
- }
- };
-
- // Iteratore over folders in `packages` dir
- for entry in packages_dir {
- let entry_path = entry?.path();
- let entry_str = entry_path.file_name().unwrap().to_str().unwrap();
-
- // Use the struct's from_str function to verify format
- if entry_path.is_dir() {
- let package_thunderstore_string = match ParsedThunderstoreModString::from_str(entry_str)
- {
- Ok(res) => res,
- Err(err) => {
- log::warn!(
- "Not a Thunderstore mod string \"{}\" cause: {}",
- entry_path.display(),
- err
- );
- continue;
- }
- };
- let manifest_path = entry_path.join("manifest.json");
- let mods_path = entry_path.join("mods");
-
- // Ensure `manifest.json` and `mods/` dir exist
- if manifest_path.exists() && mods_path.is_dir() {
- let mods =
- match parse_mods_in_package(mods_path, package_thunderstore_string.clone()) {
- Ok(res) => res,
- Err(err) => {
- log::warn!("Failed parsing cause: {err}");
- continue;
- }
- };
- collected_mods.extend(mods);
- }
- }
- }
-
- Ok(collected_mods)
-}
-
-/// Gets list of installed mods and their properties
-/// - name
-/// - is enabled?
-#[tauri::command]
-pub fn get_installed_mods_and_properties(
- game_install: GameInstall,
-) -> Result<Vec<NorthstarMod>, String> {
- // Get installed mods from packages
- let mut found_installed_mods = match parse_installed_package_mods(&game_install) {
- Ok(res) => res,
- Err(err) => return Err(err.to_string()),
- };
- // Get installed legacy mods
- let found_installed_legacy_mods = match legacy::parse_installed_mods(&game_install) {
- Ok(res) => res,
- Err(err) => return Err(err.to_string()),
- };
-
- // Combine list of package and legacy mods
- found_installed_mods.extend(found_installed_legacy_mods);
-
- // Get enabled mods as JSON
- let enabled_mods: serde_json::Value = match get_enabled_mods(&game_install) {
- Ok(enabled_mods) => enabled_mods,
- Err(_) => serde_json::from_str("{}").unwrap(), // `enabledmods.json` not found, create empty object
- };
-
- let mut installed_mods = Vec::new();
- let binding = serde_json::Map::new(); // Empty map in case treating as object fails
- let mapping = enabled_mods.as_object().unwrap_or(&binding);
-
- // Use list of installed mods and set enabled based on `enabledmods.json`
- for mut current_mod in found_installed_mods {
- let current_mod_enabled = match mapping.get(&current_mod.name) {
- Some(enabled) => enabled.as_bool().unwrap(),
- None => true, // Northstar considers mods not in mapping as enabled.
- };
- current_mod.enabled = current_mod_enabled;
- installed_mods.push(current_mod);
- }
-
- Ok(installed_mods)
-}
-
-async fn get_ns_mod_download_url(thunderstore_mod_string: &str) -> Result<String, String> {
- // TODO: This will crash the thread if not internet connection exist. `match` should be used instead
- let index = thermite::api::get_package_index().unwrap().to_vec();
-
- // Parse mod string
- let parsed_ts_mod_string: ParsedThunderstoreModString = match thunderstore_mod_string.parse() {
- Ok(res) => res,
- Err(_) => return Err("Failed to parse mod string".to_string()),
- };
-
- // Encode as URL
- let ts_mod_string_url = format!(
- "{}/{}/{}",
- parsed_ts_mod_string.author_name,
- parsed_ts_mod_string.mod_name,
- parsed_ts_mod_string.version
- );
-
- for ns_mod in index {
- // Iterate over all versions of a given mod
- for ns_mod in ns_mod.versions.values() {
- if ns_mod.url.contains(&ts_mod_string_url) {
- return Ok(ns_mod.url.clone());
- }
- }
- }
-
- Err("Could not find mod on Thunderstore".to_string())
-}
-
-/// Returns a vector of modstrings containing the dependencies of a given mod
-async fn get_mod_dependencies(thunderstore_mod_string: &str) -> Result<Vec<String>, anyhow::Error> {
- log::info!("Attempting to get dependencies for: {thunderstore_mod_string}");
-
- let index = thermite::api::get_package_index()?.to_vec();
-
- // String replace works but more care should be taken in the future
- let ts_mod_string_url = thunderstore_mod_string.replace('-', "/");
-
- // Iterate over index
- for ns_mod in index {
- // Iterate over all versions of a given mod
- for ns_mod in ns_mod.versions.values() {
- if ns_mod.url.contains(&ts_mod_string_url) {
- return Ok(ns_mod.deps.clone());
- }
- }
- }
- Ok(Vec::<String>::new())
-}
-
-/// Deletes all versions of Thunderstore package except the specified one
-fn delete_older_versions(
- thunderstore_mod_string: &str,
- game_install: &GameInstall,
-) -> Result<(), String> {
- let thunderstore_mod_string: ParsedThunderstoreModString =
- thunderstore_mod_string.parse().unwrap();
- log::info!(
- "Deleting other versions of {}",
- thunderstore_mod_string.to_string()
- );
- let packages_folder = format!(
- "{}/{}/packages",
- game_install.game_path, game_install.profile
- );
-
- // Get folders in packages dir
- let paths = match std::fs::read_dir(&packages_folder) {
- Ok(paths) => paths,
- Err(_err) => return Err(format!("Failed to read directory {}", &packages_folder)),
- };
-
- let mut directories: Vec<PathBuf> = Vec::new();
-
- // Get list of folders in `mods` directory
- for path in paths {
- let my_path = path.unwrap().path();
-
- let md = std::fs::metadata(my_path.clone()).unwrap();
- if md.is_dir() {
- directories.push(my_path);
- }
- }
-
- for directory in directories {
- let folder_name = directory.file_name().unwrap().to_str().unwrap();
- let ts_mod_string_from_folder: ParsedThunderstoreModString = match folder_name.parse() {
- Ok(res) => res,
- Err(err) => {
- // Failed parsing folder name as Thunderstore mod string
- // This means it doesn't follow the `AUTHOR-MOD-VERSION` naming structure
- // This folder could've been manually created by the user or another application
- // As parsing failed we cannot determine the Thunderstore package it is part of hence we skip it
- log::warn!("{err}");
- continue;
- }
- };
- // Check which match `AUTHOR-MOD` and do NOT match `AUTHOR-MOD-VERSION`
- if ts_mod_string_from_folder.author_name == thunderstore_mod_string.author_name
- && ts_mod_string_from_folder.mod_name == thunderstore_mod_string.mod_name
- && ts_mod_string_from_folder.version != thunderstore_mod_string.version
- {
- delete_package_folder(&directory.display().to_string())?;
- }
- }
-
- Ok(())
-}
-
-/// Checks whether some mod is correctly formatted
-/// Currently checks whether
-/// - Some `mod.json` exists under `mods/*/mod.json`
-fn fc_sanity_check(input: &&fs::File) -> Result<(), Box<dyn Error + Send + Sync + 'static>> {
- let mut archive = match zip::read::ZipArchive::new(*input) {
- Ok(archive) => archive,
- Err(_) => {
- return Err(Box::new(ThermiteError::UnknownError(
- "Failed reading zip file".into(),
- )))
- }
- };
-
- let mut has_mods = false;
- let mut mod_json_exists = false;
-
- // Checks for `mods/*/mod.json`
- for i in 0..archive.len() {
- let file = match archive.by_index(i) {
- Ok(file) => file,
- Err(_) => continue,
- };
- let file_path = file.mangled_name();
- if file_path.starts_with("mods/") {
- has_mods = true;
- if let Some(name) = file_path.file_name() {
- if name == "mod.json" {
- let parent_path = file_path.parent().unwrap();
- if parent_path.parent().unwrap().to_str().unwrap() == "mods" {
- mod_json_exists = true;
- }
- }
- }
- }
-
- if file_path.starts_with("plugins/") {
- if let Some(name) = file_path.file_name() {
- if name.to_str().unwrap().contains(".dll") {
- log::warn!("Plugin detected, prompting user");
- if !plugins::plugin_prompt() {
- return Err(Box::new(ThermiteError::UnknownError(
- "Plugin detected and install denied".into(),
- )));
- }
- }
- }
- }
- }
-
- if has_mods && mod_json_exists {
- Ok(())
- } else {
- Err(Box::new(ThermiteError::UnknownError(
- "Mod not correctly formatted".into(),
- )))
- }
-}
-
-// Copied from `libtermite` source code and modified
-// Should be replaced with a library call to libthermite in the future
-/// Download and install mod to the specified target.
-#[async_recursion]
-pub async fn fc_download_mod_and_install(
- game_install: &GameInstall,
- thunderstore_mod_string: &str,
-) -> Result<(), String> {
- log::info!("Attempting to install \"{thunderstore_mod_string}\" to {game_install:?}");
- // Get mods and download directories
- let download_directory = format!(
- "{}/___flightcore-temp/download-dir/",
- game_install.game_path
- );
-
- // Early return on empty string
- if thunderstore_mod_string.is_empty() {
- return Err("Passed empty string".to_string());
- }
-
- let deps = match get_mod_dependencies(thunderstore_mod_string).await {
- Ok(deps) => deps,
- Err(err) => return Err(err.to_string()),
- };
- log::info!("Mod dependencies: {deps:?}");
-
- // Recursively install dependencies
- for dep in deps {
- match fc_download_mod_and_install(game_install, &dep).await {
- Ok(()) => (),
- Err(err) => {
- if err == "Cannot install Northstar as a mod!" {
- continue; // For Northstar as a dependency, we just skip it
- } else {
- return Err(err);
- }
- }
- };
- }
-
- // Prevent installing Northstar as a mod
- // While it would fail during install anyway, having explicit error message is nicer
- for blacklisted_mod in BLACKLISTED_MODS {
- if thunderstore_mod_string.contains(blacklisted_mod) {
- return Err("Cannot install Northstar as a mod!".to_string());
- }
- }
-
- // Prevent installing mods that have specific install requirements
- for special_mod in MODS_WITH_SPECIAL_REQUIREMENTS {
- if thunderstore_mod_string.contains(special_mod) {
- return Err(format!(
- "{} has special install requirements and cannot be installed with FlightCore",
- thunderstore_mod_string
- ));
- }
- }
-
- // Get download URL for the specified mod
- let download_url = get_ns_mod_download_url(thunderstore_mod_string).await?;
-
- // Create download directory
- match std::fs::create_dir_all(download_directory.clone()) {
- Ok(()) => (),
- Err(err) => return Err(err.to_string()),
- };
-
- let path = format!(
- "{}/___flightcore-temp/download-dir/{thunderstore_mod_string}.zip",
- game_install.game_path
- );
-
- // Download the mod
- let temp_file = TempFile::new(
- std::fs::File::options()
- .read(true)
- .write(true)
- .truncate(true)
- .create(true)
- .open(&path)
- .map_err(|e| e.to_string())?,
- (&path).into(),
- );
- match thermite::core::manage::download(temp_file.file(), download_url) {
- Ok(_written_bytes) => (),
- Err(err) => return Err(err.to_string()),
- };
-
- // Get directory to install to made up of packages directory and Thunderstore mod string
- let install_directory = format!(
- "{}/{}/packages/",
- game_install.game_path, game_install.profile
- );
-
- // Extract the mod to the mods directory
- match thermite::core::manage::install_with_sanity(
- thunderstore_mod_string,
- temp_file.file(),
- std::path::Path::new(&install_directory),
- fc_sanity_check,
- ) {
- Ok(_) => (),
- Err(err) => {
- log::warn!("libthermite couldn't install mod {thunderstore_mod_string} due to {err:?}",);
- return match err {
- ThermiteError::SanityError(e) => Err(
- format!("Mod failed sanity check during install. It's probably not correctly formatted. {}", e)
- ),
- _ => Err(err.to_string()),
- };
- }
- };
-
- // Successful package install
- match legacy::delete_legacy_package_install(thunderstore_mod_string, game_install) {
- Ok(()) => (),
- Err(err) => {
- // Catch error but ignore
- log::warn!("Failed deleting legacy versions due to: {}", err);
- }
- };
-
- match delete_older_versions(thunderstore_mod_string, game_install) {
- Ok(()) => (),
- Err(err) => {
- // Catch error but ignore
- log::warn!("Failed deleting older versions due to: {}", err);
- }
- };
-
- Ok(())
-}
-
-/// Deletes a given Northstar mod folder
-fn delete_mod_folder(ns_mod_directory: &str) -> Result<(), String> {
- let ns_mod_dir_path = std::path::Path::new(&ns_mod_directory);
-
- // Safety check: Check whether `mod.json` exists and exit early if not
- // If it does not exist, we might not be dealing with a Northstar mod
- let mod_json_path = ns_mod_dir_path.join("mod.json");
- if !mod_json_path.exists() {
- // If it doesn't exist, return an error
- return Err(format!("mod.json does not exist in {}", ns_mod_directory));
- }
-
- match std::fs::remove_dir_all(ns_mod_directory) {
- Ok(()) => Ok(()),
- Err(err) => Err(format!("Failed deleting mod: {err}")),
- }
-}
-
-/// Deletes a Northstar mod based on its name
-#[tauri::command]
-pub fn delete_northstar_mod(game_install: GameInstall, nsmod_name: String) -> Result<(), String> {
- // Prevent deleting core mod
- for core_mod in CORE_MODS {
- if nsmod_name == core_mod {
- return Err(format!("Cannot remove core mod {nsmod_name}"));
- }
- }
-
- // Get installed mods
- let installed_ns_mods = get_installed_mods_and_properties(game_install)?;
-
- // Get folder name based on northstarmods
- for installed_ns_mod in installed_ns_mods {
- // Installed mod matches specified mod
- if installed_ns_mod.name == nsmod_name {
- // Delete folder
- return delete_mod_folder(&installed_ns_mod.directory);
- }
- }
-
- Err(format!("Mod {nsmod_name} not found to be installed"))
-}
-
-/// Deletes a given Thunderstore package
-fn delete_package_folder(ts_package_directory: &str) -> Result<(), String> {
- let ns_mod_dir_path = std::path::Path::new(&ts_package_directory);
-
- // Safety check: Check whether `manifest.json` exists and exit early if not
- // If it does not exist, we might not be dealing with a Thunderstore package
- let mod_json_path = ns_mod_dir_path.join("manifest.json");
- if !mod_json_path.exists() {
- // If it doesn't exist, return an error
- return Err(format!(
- "manifest.json does not exist in {}",
- ts_package_directory
- ));
- }
-
- match std::fs::remove_dir_all(ts_package_directory) {
- Ok(()) => Ok(()),
- Err(err) => Err(format!("Failed deleting package: {err}")),
- }
-}
-
-/// Deletes all NorthstarMods related to a Thunderstore mod
-#[tauri::command]
-pub fn delete_thunderstore_mod(
- game_install: GameInstall,
- thunderstore_mod_string: String,
-) -> Result<(), String> {
- // Check packages
- let packages_folder = format!(
- "{}/{}/packages",
- game_install.game_path, game_install.profile
- );
- if std::path::Path::new(&packages_folder).exists() {
- for entry in fs::read_dir(packages_folder).unwrap() {
- let entry = entry.unwrap();
-
- // Check if it's a folder and skip if otherwise
- if !entry.file_type().unwrap().is_dir() {
- log::warn!("Skipping \"{}\", not a file", entry.path().display());
- continue;
- }
-
- let entry_path = entry.path();
- let package_folder_ts_string = entry_path.file_name().unwrap().to_string_lossy();
-
- if package_folder_ts_string != thunderstore_mod_string {
- // Not the mod folder we are looking for, try the next one\
- continue;
- }
-
- // All checks passed, this is the matching mod
- return delete_package_folder(&entry.path().display().to_string());
- }
- }
-
- // Try legacy mod installs as fallback
- legacy::delete_thunderstore_mod(game_install, thunderstore_mod_string)
-}
diff --git a/src-tauri/src/mod_management/plugins.rs b/src-tauri/src/mod_management/plugins.rs
deleted file mode 100644
index e2427a16..00000000
--- a/src-tauri/src/mod_management/plugins.rs
+++ /dev/null
@@ -1,26 +0,0 @@
-use tauri::api::dialog::blocking::MessageDialogBuilder;
-use tauri::api::dialog::{MessageDialogButtons, MessageDialogKind};
-
-/// Prompt on plugin
-/// Returns:
-/// - true: user accepted plugin install
-/// - false: user denied plugin install
-pub fn plugin_prompt() -> bool {
- let dialog = MessageDialogBuilder::new(
- "Plugin in package detected",
- "This mod contains a plugin. Plugins have unrestricted access to your computer!
- \nMake sure you trust the author!
- \n
- \nPress 'Ok' to continue or 'Cancel' to abort mod installation",
- )
- .kind(MessageDialogKind::Warning)
- .buttons(MessageDialogButtons::OkCancel);
-
- if dialog.show() {
- log::info!("Accepted plugin install");
- true
- } else {
- log::warn!("Plugin install cancelled");
- false
- }
-}
diff --git a/src-tauri/src/northstar/install.rs b/src-tauri/src/northstar/install.rs
deleted file mode 100644
index 0953fa38..00000000
--- a/src-tauri/src/northstar/install.rs
+++ /dev/null
@@ -1,358 +0,0 @@
-use anyhow::Result;
-use serde::{Deserialize, Serialize};
-use std::time::Duration;
-use std::{cell::RefCell, time::Instant};
-use ts_rs::TS;
-
-use crate::constants::{CORE_MODS, NORTHSTAR_DEFAULT_PROFILE, NORTHSTAR_DLL};
-use crate::{
- util::{extract, move_dir_all},
- GameInstall, InstallType,
-};
-
-#[cfg(target_os = "windows")]
-use crate::platform_specific::windows;
-
-#[derive(Serialize, Deserialize, Debug, Clone, TS)]
-#[ts(export)]
-enum InstallState {
- Downloading,
- Extracting,
- Done,
-}
-
-#[derive(Serialize, Deserialize, Debug, Clone, TS)]
-#[ts(export)]
-struct InstallProgress {
- current_downloaded: u64,
- total_size: u64,
- state: InstallState,
-}
-
-/// Installs Northstar to the given path
-#[tauri::command]
-pub async fn install_northstar_wrapper(
- window: tauri::Window,
- game_install: GameInstall,
- northstar_package_name: Option<String>,
- version_number: Option<String>,
-) -> Result<bool, String> {
- log::info!("Running Northstar install");
-
- // Get Northstar package name (`Northstar` vs `NorthstarReleaseCandidate`)
- let northstar_package_name = northstar_package_name
- .map(|name| {
- if name.len() <= 1 {
- "Northstar".to_string()
- } else {
- name
- }
- })
- .unwrap_or("Northstar".to_string());
-
- match install_northstar(window, game_install, northstar_package_name, version_number).await {
- Ok(_) => Ok(true),
- Err(err) => {
- log::error!("{}", err);
- Err(err)
- }
- }
-}
-
-/// Update Northstar install in the given path
-#[tauri::command]
-pub async fn update_northstar(
- window: tauri::Window,
- game_install: GameInstall,
- northstar_package_name: Option<String>,
-) -> Result<bool, String> {
- log::info!("Updating Northstar");
-
- // Simply re-run install with up-to-date version for upate
- install_northstar_wrapper(window, game_install, northstar_package_name, None).await
-}
-
-/// Copied from `papa` source code and modified
-///Install N* from the provided mod
-///
-///Checks cache, else downloads the latest version
-async fn do_install(
- window: tauri::Window,
- nmod: &thermite::model::ModVersion,
- game_install: GameInstall,
-) -> Result<()> {
- let filename = format!("northstar-{}.zip", nmod.version);
- let temp_dir = format!("{}/___flightcore-temp", game_install.game_path);
- let download_directory = format!("{}/download-dir", temp_dir);
- let extract_directory = format!("{}/extract-dir", temp_dir);
-
- log::info!("Attempting to create temporary directory {}", temp_dir);
- std::fs::create_dir_all(download_directory.clone())?;
- std::fs::create_dir_all(extract_directory.clone())?;
-
- let download_path = format!("{}/{}", download_directory, filename);
- log::info!("Download path: {download_path}");
-
- let last_emit = RefCell::new(Instant::now()); // Keep track of the last time a signal was emitted
- let mut nfile = std::fs::File::options()
- .read(true)
- .write(true)
- .truncate(true)
- .create(true)
- .open(download_path)?;
- thermite::core::manage::download_with_progress(
- &mut nfile,
- &nmod.url,
- |delta, current, total| {
- if delta != 0 {
- // Only emit a signal once every 100ms
- // This way we don't bombard the frontend with events on fast download speeds
- let time_since_last_emit = Instant::now().duration_since(*last_emit.borrow());
- if time_since_last_emit >= Duration::from_millis(100) {
- window
- .emit(
- "northstar-install-download-progress",
- InstallProgress {
- current_downloaded: current,
- total_size: total,
- state: InstallState::Downloading,
- },
- )
- .unwrap();
- *last_emit.borrow_mut() = Instant::now();
- }
- }
- },
- )?;
-
- window
- .emit(
- "northstar-install-download-progress",
- InstallProgress {
- current_downloaded: 0,
- total_size: 0,
- state: InstallState::Extracting,
- },
- )
- .unwrap();
-
- log::info!("Extracting Northstar...");
- extract(nfile, std::path::Path::new(&extract_directory))?;
-
- // Prepare Northstar for Installation
- log::info!("Preparing Northstar...");
- if game_install.profile != NORTHSTAR_DEFAULT_PROFILE {
- // We are using a non standard Profile, we must:
- // - move the DLL
- // - rename the Profile
-
- // Move DLL into the default R2Northstar Profile
- let old_dll_path = format!("{}/{}", extract_directory, NORTHSTAR_DLL);
- let new_dll_path = format!(
- "{}/{}/{}",
- extract_directory, NORTHSTAR_DEFAULT_PROFILE, NORTHSTAR_DLL
- );
- std::fs::rename(old_dll_path, new_dll_path)?;
-
- // rename default R2Northstar Profile to the profile we want to use
- let old_profile_path = format!("{}/{}/", extract_directory, NORTHSTAR_DEFAULT_PROFILE);
- let new_profile_path = format!("{}/{}/", extract_directory, game_install.profile);
- std::fs::rename(old_profile_path, new_profile_path)?;
- }
-
- log::info!("Installing Northstar...");
-
- // Delete previous version here
- for core_mod in CORE_MODS {
- let path_to_delete_string = format!(
- "{}/{}/mods/{}/",
- game_install.game_path, game_install.profile, core_mod
- );
- log::info!("Preparing to remove {}", path_to_delete_string);
-
- // Check if folder exists
- let path_to_delete = std::path::Path::new(&path_to_delete_string);
-
- // Check if path even exists before we attempt to remove
- if !path_to_delete.exists() {
- log::info!("{} does not exist. Skipping", path_to_delete_string);
- continue;
- }
-
- if !path_to_delete.is_dir() {
- log::error!(
- "{} exists but is a file? This should never happen",
- path_to_delete_string
- );
- continue;
- }
-
- // Safety check for mod.json
- // Just so that we won't ever have a https://github.com/ValveSoftware/steam-for-linux/issues/3671 moment
- let mod_json_path = format!("{}/mod.json", path_to_delete_string);
- let mod_json_path = std::path::Path::new(&mod_json_path);
-
- if !mod_json_path.exists() {
- log::error!("Missing mod.json for {path_to_delete_string} this shouldn't happen");
- continue;
- }
-
- // Finally delete file
- match std::fs::remove_dir_all(path_to_delete) {
- Ok(()) => {
- log::info!("Succesfully removed")
- }
- Err(err) => {
- log::error!("Failed removing {} due to {}", path_to_delete_string, err)
- }
- };
- }
-
- for entry in std::fs::read_dir(extract_directory).unwrap() {
- let entry = entry.unwrap();
- let destination = format!(
- "{}/{}",
- game_install.game_path,
- entry.path().file_name().unwrap().to_str().unwrap()
- );
-
- log::info!("Installing {}", entry.path().display());
- if !entry.file_type().unwrap().is_dir() {
- std::fs::rename(entry.path(), destination)?;
- } else {
- move_dir_all(entry.path(), destination)?;
- }
- }
-
- // Delete old copy
- log::info!("Delete temporary directory");
- std::fs::remove_dir_all(temp_dir).unwrap();
-
- log::info!("Done installing Northstar!");
- window
- .emit(
- "northstar-install-download-progress",
- InstallProgress {
- current_downloaded: 0,
- total_size: 0,
- state: InstallState::Done,
- },
- )
- .unwrap();
-
- Ok(())
-}
-
-pub async fn install_northstar(
- window: tauri::Window,
- game_install: GameInstall,
- northstar_package_name: String,
- version_number: Option<String>,
-) -> Result<String, String> {
- let index = match thermite::api::get_package_index() {
- Ok(res) => res.to_vec(),
- Err(err) => {
- log::warn!("Failed fetching package index due to: {err}");
- return Err("Failed to connect to Thunderstore.".to_string());
- }
- };
- let nmod = index
- .iter()
- .find(|f| f.name.to_lowercase() == northstar_package_name.to_lowercase())
- .ok_or_else(|| panic!("Couldn't find Northstar on thunderstore???"))
- .unwrap();
-
- // Use passed version or latest if no version was passed
- let version = version_number.as_ref().unwrap_or(&nmod.latest);
-
- let game_path = game_install.game_path.clone();
- log::info!("Install path \"{}\"", game_path);
-
- match do_install(window, nmod.versions.get(version).unwrap(), game_install).await {
- Ok(_) => (),
- Err(err) => {
- if game_path
- .to_lowercase()
- .contains(&r"C:\Program Files\".to_lowercase())
- // default is `C:\Program Files\EA Games\Titanfall2`
- {
- return Err(
- "Cannot install to default EA App install path, please move Titanfall2 to a different install location.".to_string(),
- );
- } else {
- return Err(err.to_string());
- }
- }
- }
-
- Ok(nmod.latest.clone())
-}
-
-/// Attempts to find the game install location
-#[tauri::command]
-pub fn find_game_install_location() -> Result<GameInstall, String> {
- // Attempt parsing Steam library directly
- match steamlocate::SteamDir::locate() {
- Ok(steamdir) => {
- #[cfg(target_os = "linux")]
- {
- let snap_dir = match std::env::var("SNAP_USER_DATA") {
- Ok(snap_dir) => std::path::PathBuf::from(snap_dir),
- Err(_) => match dirs::home_dir() {
- Some(path) => path,
- None => std::path::PathBuf::new(),
- }
- .join("snap"),
- };
-
- if steamdir.path().starts_with(snap_dir) {
- log::warn!("Found Steam installed via Snap, you may encounter issues");
- }
- }
-
- match steamdir.find_app(thermite::TITANFALL2_STEAM_ID) {
- Ok(Some((app, library))) => {
- let app_path = library
- .path()
- .join("steamapps")
- .join("common")
- .join(app.install_dir)
- .into_os_string()
- .into_string()
- .unwrap();
-
- let game_install = GameInstall {
- game_path: app_path,
- profile: "R2Northstar".to_string(),
- install_type: InstallType::STEAM,
- };
- return Ok(game_install);
- }
- Ok(None) => log::info!("Couldn't locate your Titanfall 2 Steam install."),
- Err(err) => log::info!(
- "Something went wrong while trying to find Titanfall 2 {}",
- err
- ),
- }
- }
- Err(err) => log::info!("Couldn't locate Steam on this computer! {}", err),
- }
-
- // (On Windows only) try parsing Windows registry for Origin install path
- #[cfg(target_os = "windows")]
- match windows::origin_install_location_detection() {
- Ok(game_path) => {
- let game_install = GameInstall {
- game_path,
- profile: "R2Northstar".to_string(),
- install_type: InstallType::ORIGIN,
- };
- return Ok(game_install);
- }
- Err(err) => {
- log::info!("{}", err);
- }
- };
-
- Err("Could not auto-detect game install location! Please enter it manually.".to_string())
-}
diff --git a/src-tauri/src/northstar/mod.rs b/src-tauri/src/northstar/mod.rs
deleted file mode 100644
index 9953d742..00000000
--- a/src-tauri/src/northstar/mod.rs
+++ /dev/null
@@ -1,276 +0,0 @@
-//! This module deals with handling things around Northstar such as
-//! - getting version number
-pub mod install;
-pub mod profile;
-
-use crate::util::check_ea_app_or_origin_running;
-use crate::{constants::CORE_MODS, platform_specific::get_host_os, GameInstall, InstallType};
-use crate::{NorthstarThunderstoreRelease, NorthstarThunderstoreReleaseWrapper};
-use anyhow::anyhow;
-use serde::{Deserialize, Serialize};
-use ts_rs::TS;
-
-#[derive(Serialize, Deserialize, Debug, Clone, TS)]
-#[ts(export)]
-pub struct NorthstarLaunchOptions {
- launch_via_steam: bool,
- bypass_checks: bool,
-}
-
-/// Gets list of available Northstar versions from Thunderstore
-#[tauri::command]
-pub async fn get_available_northstar_versions(
-) -> Result<Vec<NorthstarThunderstoreReleaseWrapper>, ()> {
- let northstar_package_name = "Northstar";
- let index = thermite::api::get_package_index().unwrap().to_vec();
- let nsmod = index
- .iter()
- .find(|f| f.name.to_lowercase() == northstar_package_name.to_lowercase())
- .ok_or_else(|| panic!("Couldn't find Northstar on thunderstore???"))
- .unwrap();
-
- let mut releases: Vec<NorthstarThunderstoreReleaseWrapper> = vec![];
- for (_version_string, nsmod_version_obj) in nsmod.versions.iter() {
- let current_elem = NorthstarThunderstoreRelease {
- package: nsmod_version_obj.name.clone(),
- version: nsmod_version_obj.version.clone(),
- };
- let current_elem_wrapped = NorthstarThunderstoreReleaseWrapper {
- label: format!(
- "{} v{}",
- nsmod_version_obj.name.clone(),
- nsmod_version_obj.version.clone()
- ),
- value: current_elem,
- };
-
- releases.push(current_elem_wrapped);
- }
-
- releases.sort_by(|a, b| {
- // Parse version number
- let a_ver = semver::Version::parse(&a.value.version).unwrap();
- let b_ver = semver::Version::parse(&b.value.version).unwrap();
- b_ver.partial_cmp(&a_ver).unwrap() // Sort newest first
- });
-
- Ok(releases)
-}
-
-/// Checks if installed Northstar version is up-to-date
-/// false -> Northstar install is up-to-date
-/// true -> Northstar install is outdated
-#[tauri::command]
-pub async fn check_is_northstar_outdated(
- game_install: GameInstall,
- northstar_package_name: Option<String>,
-) -> Result<bool, String> {
- let northstar_package_name = match northstar_package_name {
- Some(northstar_package_name) => {
- if northstar_package_name.len() <= 1 {
- "Northstar".to_string()
- } else {
- northstar_package_name
- }
- }
- None => "Northstar".to_string(),
- };
-
- let index = match thermite::api::get_package_index() {
- Ok(res) => res.to_vec(),
- Err(err) => return Err(format!("Couldn't check if Northstar up-to-date: {err}")),
- };
- let nmod = index
- .iter()
- .find(|f| f.name.to_lowercase() == northstar_package_name.to_lowercase())
- .expect("Couldn't find Northstar on thunderstore???");
- // .ok_or_else(|| anyhow!("Couldn't find Northstar on thunderstore???"))?;
-
- let version_number = match get_northstar_version_number(game_install) {
- Ok(version_number) => version_number,
- Err(err) => {
- log::warn!("{}", err);
- // If we fail to get new version just assume we are up-to-date
- return Err(err);
- }
- };
-
- // Release candidate version numbers are different between `mods.json` and Thunderstore
- let version_number = crate::util::convert_release_candidate_number(version_number);
-
- if version_number != nmod.latest {
- log::info!("Installed Northstar version outdated");
- Ok(true)
- } else {
- log::info!("Installed Northstar version up-to-date");
- Ok(false)
- }
-}
-
-/// Check version number of a mod
-pub fn check_mod_version_number(path_to_mod_folder: &str) -> Result<String, anyhow::Error> {
- let data = std::fs::read_to_string(format!("{path_to_mod_folder}/mod.json"))?;
- let parsed_json: serde_json::Value = serde_json::from_str(&data)?;
-
- let mod_version_number = match parsed_json.get("Version").and_then(|value| value.as_str()) {
- Some(version_number) => version_number,
- None => return Err(anyhow!("No version number found")),
- };
-
- log::info!("{}", mod_version_number);
-
- Ok(mod_version_number.to_string())
-}
-
-/// Returns the current Northstar version number as a string
-#[tauri::command]
-pub fn get_northstar_version_number(game_install: GameInstall) -> Result<String, String> {
- log::info!("{}", game_install.game_path);
-
- // TODO:
- // Check if NorthstarLauncher.exe exists and check its version number
- let initial_version_number = match check_mod_version_number(&format!(
- "{}/{}/mods/{}",
- game_install.game_path, game_install.profile, CORE_MODS[0]
- )) {
- Ok(version_number) => version_number,
- Err(err) => return Err(err.to_string()),
- };
-
- for core_mod in CORE_MODS {
- let current_version_number = match check_mod_version_number(&format!(
- "{}/{}/mods/{}",
- game_install.game_path, game_install.profile, core_mod
- )) {
- Ok(version_number) => version_number,
- Err(err) => return Err(err.to_string()),
- };
- if current_version_number != initial_version_number {
- // We have a version number mismatch
- return Err("Found version number mismatch".to_string());
- }
- }
- log::info!("All mods same version");
-
- Ok(initial_version_number)
-}
-
-/// Launches Northstar
-#[tauri::command]
-pub fn launch_northstar(
- game_install: GameInstall,
- launch_options: NorthstarLaunchOptions,
-) -> Result<String, String> {
- dbg!(game_install.clone());
-
- if launch_options.launch_via_steam {
- return launch_northstar_steam(game_install);
- }
-
- let host_os = get_host_os();
-
- // Explicitly fail early certain (currently) unsupported install setups
- if host_os != "windows" {
- if !matches!(game_install.install_type, InstallType::STEAM) {
- return Err(format!(
- "Not yet implemented for \"{}\" with Titanfall2 installed via \"{:?}\"",
- get_host_os(),
- game_install.install_type
- ));
- }
-
- return launch_northstar_steam(game_install);
- }
-
- // Only check guards if bypassing checks is not enabled
- if !launch_options.bypass_checks {
- // Some safety checks before, should have more in the future
- if get_northstar_version_number(game_install.clone()).is_err() {
- return Err(anyhow!("Not all checks were met").to_string());
- }
-
- // Require EA App or Origin to be running to launch Northstar
- let ea_app_is_running = check_ea_app_or_origin_running();
- if !ea_app_is_running {
- return Err(
- anyhow!("EA App not running, start EA App before launching Northstar").to_string(),
- );
- }
- }
-
- // Switch to Titanfall2 directory for launching
- // NorthstarLauncher.exe expects to be run from that folder
- if std::env::set_current_dir(game_install.game_path.clone()).is_err() {
- // We failed to get to Titanfall2 directory
- return Err(anyhow!("Couldn't access Titanfall2 directory").to_string());
- }
-
- // Only Windows with Steam or Origin are supported at the moment
- if host_os == "windows"
- && (matches!(game_install.install_type, InstallType::STEAM)
- || matches!(game_install.install_type, InstallType::ORIGIN)
- || matches!(game_install.install_type, InstallType::UNKNOWN))
- {
- let ns_exe_path = format!("{}/NorthstarLauncher.exe", game_install.game_path);
- let ns_profile_arg = format!("-profile={}", game_install.profile);
-
- let mut output = std::process::Command::new("C:\\Windows\\System32\\cmd.exe")
- .args(["/C", "start", "", &ns_exe_path, &ns_profile_arg])
- .spawn()
- .expect("failed to execute process");
- output.wait().expect("failed waiting on child process");
- return Ok("Launched game".to_string());
- }
-
- Err(format!(
- "Not yet implemented for {:?} on {}",
- game_install.install_type,
- get_host_os()
- ))
-}
-
-/// Prepare Northstar and Launch through Steam using the Browser Protocol
-pub fn launch_northstar_steam(game_install: GameInstall) -> Result<String, String> {
- if !matches!(game_install.install_type, InstallType::STEAM) {
- return Err("Titanfall2 was not installed via Steam".to_string());
- }
-
- match steamlocate::SteamDir::locate() {
- Ok(steamdir) => {
- if get_host_os() != "windows" {
- match steamdir.compat_tool_mapping() {
- Ok(map) => match map.get(&thermite::TITANFALL2_STEAM_ID) {
- Some(_) => {}
- None => {
- return Err(
- "Titanfall2 was not configured to use a compatibility tool"
- .to_string(),
- );
- }
- },
- Err(_) => {
- return Err("Could not get compatibility tool mapping".to_string());
- }
- }
- }
- }
- Err(_) => {
- return Err("Couldn't access Titanfall2 directory".to_string());
- }
- }
-
- // Switch to Titanfall2 directory to set everything up
- if std::env::set_current_dir(game_install.game_path).is_err() {
- // We failed to get to Titanfall2 directory
- return Err("Couldn't access Titanfall2 directory".to_string());
- }
-
- match open::that(format!(
- "steam://run/{}//-profile={} --northstar/",
- thermite::TITANFALL2_STEAM_ID,
- game_install.profile
- )) {
- Ok(()) => Ok("Started game".to_string()),
- Err(_err) => Err("Failed to launch Titanfall 2 via Steam".to_string()),
- }
-}
diff --git a/src-tauri/src/northstar/profile.rs b/src-tauri/src/northstar/profile.rs
deleted file mode 100644
index 26a32d6b..00000000
--- a/src-tauri/src/northstar/profile.rs
+++ /dev/null
@@ -1,121 +0,0 @@
-use crate::util::copy_dir_all;
-use crate::GameInstall;
-
-// These folders are part of Titanfall 2 and
-// should NEVER be used as a Profile
-const SKIP_PATHS: [&str; 8] = [
- "___flightcore-temp",
- "__overlay",
- "bin",
- "Core",
- "r2",
- "vpk",
- "platform",
- "Support",
-];
-
-// A profile may have one of these to be detected
-const MAY_CONTAIN: [&str; 10] = [
- "mods/",
- "plugins/",
- "packages/",
- "logs/",
- "runtime/",
- "save_data/",
- "Northstar.dll",
- "enabledmods.json",
- "placeholder.playerdata.pdata",
- "LEGAL.txt",
-];
-
-/// Returns a list of Profile names
-/// All the returned Profiles can be found relative to the game path
-#[tauri::command]
-pub fn fetch_profiles(game_install: GameInstall) -> Result<Vec<String>, String> {
- let mut profiles: Vec<String> = Vec::new();
-
- for content in MAY_CONTAIN {
- let pattern = format!("{}/*/{}", game_install.game_path, content);
- for e in glob::glob(&pattern).expect("Failed to read glob pattern") {
- let path = e.unwrap();
- let mut ancestors = path.ancestors();
-
- ancestors.next();
-
- let profile_path = std::path::Path::new(ancestors.next().unwrap());
- let profile_name = profile_path
- .file_name()
- .unwrap()
- .to_os_string()
- .into_string()
- .unwrap();
-
- if !profiles.contains(&profile_name) {
- profiles.push(profile_name);
- }
- }
- }
-
- Ok(profiles)
-}
-
-/// Validates if a given profile is actually a valid profile
-#[tauri::command]
-pub fn validate_profile(game_install: GameInstall, profile: String) -> bool {
- // Game files are never a valid profile
- // Prevent users with messed up installs from making it even worse
- if SKIP_PATHS.contains(&profile.as_str()) {
- return false;
- }
-
- log::info!("Validating Profile {}", profile);
-
- let profile_path = format!("{}/{}", game_install.game_path, profile);
- let profile_dir = std::path::Path::new(profile_path.as_str());
-
- profile_dir.is_dir()
-}
-
-#[tauri::command]
-pub fn delete_profile(game_install: GameInstall, profile: String) -> Result<(), String> {
- // Check if the Profile actually exists
- if !validate_profile(game_install.clone(), profile.clone()) {
- return Err(format!("{} is not a valid Profile", profile));
- }
-
- log::info!("Deleting Profile {}", profile);
-
- let profile_path = format!("{}/{}", game_install.game_path, profile);
-
- match std::fs::remove_dir_all(profile_path) {
- Ok(()) => Ok(()),
- Err(err) => Err(format!("Failed to delete Profile: {}", err)),
- }
-}
-
-/// Clones a profile by simply duplicating the folder under a new name
-#[tauri::command]
-pub fn clone_profile(
- game_install: GameInstall,
- old_profile: String,
- new_profile: String,
-) -> Result<(), String> {
- // Check if the old Profile already exists
- if !validate_profile(game_install.clone(), old_profile.clone()) {
- return Err(format!("{} is not a valid Profile", old_profile));
- }
-
- // Check that new Profile does not already exist
- if validate_profile(game_install.clone(), new_profile.clone()) {
- return Err(format!("{} already exists", new_profile));
- }
-
- log::info!("Cloning Profile {} to {}", old_profile, new_profile);
-
- let old_profile_path = format!("{}/{}", game_install.game_path, old_profile);
- let new_profile_path = format!("{}/{}", game_install.game_path, new_profile);
-
- copy_dir_all(old_profile_path, new_profile_path).unwrap();
-
- Ok(())
-}
diff --git a/src-tauri/src/platform_specific/linux.rs b/src-tauri/src/platform_specific/linux.rs
deleted file mode 100644
index fcac5b67..00000000
--- a/src-tauri/src/platform_specific/linux.rs
+++ /dev/null
@@ -1,98 +0,0 @@
-// Linux specific code
-
-fn get_proton_dir() -> Result<String, String> {
- let steam_dir = match steamlocate::SteamDir::locate() {
- Ok(result) => result,
- Err(_) => return Err("Unable to find Steam directory".to_string()),
- };
- let compat_dir = format!("{}/compatibilitytools.d", steam_dir.path().display());
-
- Ok(compat_dir)
-}
-
-/// Downloads and installs NS proton
-/// Assumes Steam install
-pub fn install_ns_proton() -> Result<(), String> {
- // Get latest NorthstarProton release
- let latest = match thermite::core::latest_release() {
- Ok(result) => result,
- Err(_) => return Err("Failed to fetch latest NorthstarProton release".to_string()),
- };
-
- let temp_dir = std::env::temp_dir();
- let path = format!("{}/nsproton-{}.tar.gz", temp_dir.display(), latest);
- let archive = match std::fs::File::create(path.clone()) {
- Ok(result) => result,
- Err(_) => return Err("Failed to allocate NorthstarProton archive on disk".to_string()),
- };
-
- // Download the latest Proton release
- log::info!("Downloading NorthstarProton to {}", path);
- match thermite::core::download_ns_proton(latest, archive) {
- Ok(_) => {}
- Err(_) => return Err("Failed to download NorthstarProton".to_string()),
- }
-
- log::info!("Finished Download");
-
- let compat_dir = get_proton_dir()?;
-
- match std::fs::create_dir_all(compat_dir.clone()) {
- Ok(_) => {}
- Err(_) => return Err("Failed to create compatibilitytools directory".to_string()),
- }
-
- let finished = match std::fs::File::open(path.clone()) {
- Ok(result) => result,
- Err(_) => return Err("Failed to open NorthstarProton archive".to_string()),
- };
-
- // Extract to Proton dir
- log::info!("Installing NorthstarProton to {}", compat_dir);
- match thermite::core::install_ns_proton(&finished, compat_dir) {
- Ok(_) => {}
- Err(_) => return Err("Failed to create install NorthstarProton".to_string()),
- }
- log::info!("Finished Installation");
- drop(finished);
-
- // We installed NSProton, lets ignore this if it fails
- let _ = std::fs::remove_file(path);
-
- Ok(())
-}
-
-/// Remove NS Proton
-pub fn uninstall_ns_proton() -> Result<(), String> {
- let compat_dir = get_proton_dir()?;
- let pattern = format!("{}/NorthstarProton*", compat_dir);
- for e in glob::glob(&pattern).expect("Failed to read glob pattern") {
- match e {
- Ok(path) => match std::fs::remove_dir_all(path.clone()) {
- Ok(_) => {}
- Err(_) => return Err(format!("Failed to remove {}", path.display())),
- },
- Err(e) => return Err(format!("Found unprocessable entry {}", e)),
- }
- }
-
- Ok(())
-}
-
-/// Get the latest installed NS Proton version
-pub fn get_local_ns_proton_version() -> Result<String, String> {
- let compat_dir = get_proton_dir().unwrap();
- let pattern = format!("{}/NorthstarProton*/version", compat_dir);
-
- if let Some(e) = glob::glob(&pattern)
- .expect("Failed to read glob pattern")
- .next()
- {
- let version_content = std::fs::read_to_string(e.unwrap()).unwrap();
- let version = version_content.split(' ').nth(1).unwrap().to_string();
-
- return Ok(version);
- }
-
- Err("Northstar Proton is not installed".to_string())
-}
diff --git a/src-tauri/src/platform_specific/mod.rs b/src-tauri/src/platform_specific/mod.rs
deleted file mode 100644
index 4e0514d4..00000000
--- a/src-tauri/src/platform_specific/mod.rs
+++ /dev/null
@@ -1,50 +0,0 @@
-#[cfg(target_os = "windows")]
-pub mod windows;
-
-#[cfg(target_os = "linux")]
-pub mod linux;
-
-/// Returns identifier of host OS FlightCore is running on
-#[tauri::command]
-pub fn get_host_os() -> String {
- std::env::consts::OS.to_string()
-}
-
-/// On Linux attempts to install NorthstarProton
-/// On Windows simply returns an error message
-#[tauri::command]
-pub async fn install_northstar_proton_wrapper() -> Result<(), String> {
- #[cfg(target_os = "linux")]
- return linux::install_ns_proton().map_err(|err| err.to_string());
-
- #[cfg(target_os = "windows")]
- Err("Not supported on Windows".to_string())
-}
-
-#[tauri::command]
-pub async fn uninstall_northstar_proton_wrapper() -> Result<(), String> {
- #[cfg(target_os = "linux")]
- return linux::uninstall_ns_proton();
-
- #[cfg(target_os = "windows")]
- Err("Not supported on Windows".to_string())
-}
-
-#[tauri::command]
-pub async fn get_local_northstar_proton_wrapper_version() -> Result<String, String> {
- #[cfg(target_os = "linux")]
- return linux::get_local_ns_proton_version();
-
- #[cfg(target_os = "windows")]
- Err("Not supported on Windows".to_string())
-}
-
-/// Check whether the current device might be behind a CGNAT
-#[tauri::command]
-pub async fn check_cgnat() -> Result<String, String> {
- #[cfg(target_os = "linux")]
- return Err("Not supported on Linux".to_string());
-
- #[cfg(target_os = "windows")]
- windows::check_cgnat().await
-}
diff --git a/src-tauri/src/platform_specific/windows.rs b/src-tauri/src/platform_specific/windows.rs
deleted file mode 100644
index fc6aab5d..00000000
--- a/src-tauri/src/platform_specific/windows.rs
+++ /dev/null
@@ -1,104 +0,0 @@
-/// Windows specific code
-use anyhow::{anyhow, Result};
-use std::net::Ipv4Addr;
-
-#[cfg(target_os = "windows")]
-use winreg::{enums::HKEY_LOCAL_MACHINE, RegKey};
-
-use crate::repair_and_verify::check_is_valid_game_path;
-
-/// Gets Titanfall2 install location on Origin
-pub fn origin_install_location_detection() -> Result<String, anyhow::Error> {
- #[cfg(target_os = "windows")]
- {
- let hklm = RegKey::predef(HKEY_LOCAL_MACHINE);
- match hklm.open_subkey("SOFTWARE\\Respawn\\Titanfall2") {
- Ok(tf) => {
- let game_path_str: String = tf.get_value("Install Dir")?;
-
- match check_is_valid_game_path(&game_path_str) {
- Ok(()) => {
- return Ok(game_path_str.to_string());
- }
- Err(err) => {
- log::warn!("{err}");
- }
- }
- }
- Err(err) => {
- log::warn!("{err}");
- }
- }
- }
-
- Err(anyhow!("No Origin / EA App install path found"))
-}
-
-/// Check whether the current device might be behind a CGNAT
-pub async fn check_cgnat() -> Result<String, String> {
- // Use external service to grap IP
- let url = "https://api.ipify.org";
- let response = reqwest::get(url).await.unwrap().text().await.unwrap();
-
- // Check if valid IPv4 address and return early if not
- if response.parse::<Ipv4Addr>().is_err() {
- return Err(format!("Not valid IPv4 address: {}", response));
- }
-
- let hops_count = run_tracert(&response)?;
- Ok(format!("Counted {} hops to {}", hops_count, response))
-}
-
-/// Count number of hops in tracert output
-fn count_hops(output: &str) -> usize {
- // Split the output into lines
- let lines: Vec<&str> = output.lines().collect();
-
- // Filter lines that appear to represent hops
- let hop_lines: Vec<&str> = lines
- .iter()
- .filter(|&line| line.contains("ms") || line.contains("*")) // TODO check if it contains just the `ms` surrounded by whitespace, otherwise it might falsely pick up some domain names as well
- .cloned()
- .collect();
-
- // Return the number of hops
- hop_lines.len()
-}
-
-/// Run `tracert`
-fn run_tracert(target_ip: &str) -> Result<usize, String> {
- // Ensure valid IPv4 address to avoid prevent command injection
- assert!(target_ip.parse::<Ipv4Addr>().is_ok());
-
- // Execute the `tracert` command
- let output = match std::process::Command::new("tracert")
- .arg("-4") // Force IPv4
- .arg("-d") // Prevent resolving intermediate IP addresses
- .arg("-w") // Set timeout to 1 second
- .arg("1000")
- .arg("-h") // Set max hop count
- .arg("5")
- .arg(target_ip)
- .output()
- {
- Ok(res) => res,
- Err(err) => return Err(format!("Failed running tracert: {}", err)),
- };
-
- // Check if the command was successful
- if output.status.success() {
- // Convert the output to a string
- let stdout =
- std::str::from_utf8(&output.stdout).expect("Invalid UTF-8 sequence in command output");
- println!("{}", stdout);
-
- // Count the number of hops
- let hop_count = count_hops(stdout);
- Ok(hop_count)
- } else {
- let stderr = std::str::from_utf8(&output.stderr)
- .expect("Invalid UTF-8 sequence in command error output");
- println!("{}", stderr);
- Err(format!("Failed collecting tracert output: {}", stderr))
- }
-}
diff --git a/src-tauri/src/repair_and_verify/mod.rs b/src-tauri/src/repair_and_verify/mod.rs
deleted file mode 100644
index 3c861609..00000000
--- a/src-tauri/src/repair_and_verify/mod.rs
+++ /dev/null
@@ -1,137 +0,0 @@
-use crate::mod_management::{get_enabled_mods, rebuild_enabled_mods_json, set_mod_enabled_status};
-/// Contains various functions to repair common issues and verifying installation
-use crate::{constants::CORE_MODS, GameInstall};
-
-/// Checks if is valid Titanfall2 install based on certain conditions
-#[tauri::command]
-pub async fn verify_install_location(game_path: String) -> bool {
- match check_is_valid_game_path(&game_path) {
- Ok(()) => true,
- Err(err) => {
- log::warn!("{}", err);
- false
- }
- }
-}
-
-/// Checks whether the provided path is a valid Titanfall2 gamepath by checking against a certain set of criteria
-pub fn check_is_valid_game_path(game_install_path: &str) -> Result<(), String> {
- let path_to_titanfall2_exe = format!("{game_install_path}/Titanfall2.exe");
- let is_correct_game_path = std::path::Path::new(&path_to_titanfall2_exe).exists();
- log::info!("Titanfall2.exe exists in path? {}", is_correct_game_path);
-
- // Exit early if wrong game path
- if !is_correct_game_path {
- return Err(format!("Incorrect game path \"{game_install_path}\"")); // Return error cause wrong game path
- }
- Ok(())
-}
-
-/// Verifies Titanfall2 game files
-#[tauri::command]
-pub fn verify_game_files(game_install: GameInstall) -> Result<String, String> {
- dbg!(game_install);
- Err("TODO, not yet implemented".to_string())
-}
-
-/// Disables all mods except core ones
-/// Enables core mods if disabled
-#[tauri::command]
-pub fn disable_all_but_core(game_install: GameInstall) -> Result<(), String> {
- // Rebuild `enabledmods.json` first to ensure all mods are added
- rebuild_enabled_mods_json(&game_install)?;
-
- let current_mods = get_enabled_mods(&game_install)?;
-
- // Disable all mods, set core mods to enabled
- for (key, _value) in current_mods.as_object().unwrap() {
- if CORE_MODS.contains(&key.as_str()) {
- // This is a core mod, we do not want to disable it
- set_mod_enabled_status(game_install.clone(), key.to_string(), true)?;
- } else {
- // Not a core mod
- set_mod_enabled_status(game_install.clone(), key.to_string(), false)?;
- }
- }
-
- Ok(())
-}
-
-/// Installs the specified mod
-#[tauri::command]
-pub async fn clean_up_download_folder_wrapper(
- game_install: GameInstall,
- force: bool,
-) -> Result<(), String> {
- match clean_up_download_folder(&game_install, force) {
- Ok(()) => Ok(()),
- Err(err) => Err(err.to_string()),
- }
-}
-
-/// Deletes download folder
-/// If `force` is FALSE, bails on non-empty folder
-/// If `force` is TRUE, deletes folder even if non-empty
-pub fn clean_up_download_folder(
- game_install: &GameInstall,
- force: bool,
-) -> Result<(), anyhow::Error> {
- const TEMPORARY_DIRECTORIES: [&str; 4] = [
- "___flightcore-temp-download-dir",
- "___flightcore-temp/download-dir",
- "___flightcore-temp/extract-dir",
- "___flightcore-temp",
- ];
-
- for directory in TEMPORARY_DIRECTORIES {
- // Get download directory
- let download_directory = format!("{}/{}/", game_install.game_path, directory);
-
- // Check if files in folder
- let download_dir_contents = match std::fs::read_dir(download_directory.clone()) {
- Ok(contents) => contents,
- Err(_) => continue,
- };
-
- let mut count = 0;
- download_dir_contents.for_each(|_| count += 1);
-
- if count > 0 && !force {
- // Skip folder if not empty
- log::warn!("Folder not empty, not deleting: {directory}");
- continue;
- }
-
- // Delete folder
- std::fs::remove_dir_all(download_directory)?;
- }
- Ok(())
-}
-
-/// Get list of Northstar logs
-#[tauri::command]
-pub fn get_log_list(game_install: GameInstall) -> Result<Vec<std::path::PathBuf>, String> {
- let ns_log_folder = format!("{}/{}/logs", game_install.game_path, game_install.profile);
-
- // List files in logs folder
- let paths = match std::fs::read_dir(ns_log_folder) {
- Ok(paths) => paths,
- Err(_err) => return Err("No logs folder found".to_string()),
- };
-
- // Stores paths of log files
- let mut log_files: Vec<std::path::PathBuf> = Vec::new();
-
- for path in paths {
- let path = path.unwrap().path();
- if path.display().to_string().contains("nslog") {
- log_files.push(path);
- }
- }
-
- if !log_files.is_empty() {
- Ok(log_files)
- } else {
- Err("No logs found".to_string())
- }
-}
diff --git a/src-tauri/src/thunderstore/mod.rs b/src-tauri/src/thunderstore/mod.rs
deleted file mode 100644
index fc2acb02..00000000
--- a/src-tauri/src/thunderstore/mod.rs
+++ /dev/null
@@ -1,86 +0,0 @@
-//! For interacting with Thunderstore API
-use crate::constants::{APP_USER_AGENT, BLACKLISTED_MODS};
-use serde::{Deserialize, Serialize};
-use std::collections::HashSet;
-use ts_rs::TS;
-
-#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize, TS)]
-#[ts(export)]
-pub struct ThunderstoreMod {
- pub name: String,
- pub full_name: String,
- pub owner: String,
- pub package_url: String,
- pub date_created: String,
- pub date_updated: String,
- pub uuid4: String,
- pub rating_score: i32,
- pub is_pinned: bool,
- pub is_deprecated: bool,
- pub has_nsfw_content: bool,
- pub categories: Vec<String>,
- pub versions: Vec<ThunderstoreModVersion>,
-}
-
-#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize, TS)]
-#[ts(export)]
-pub struct ThunderstoreModVersion {
- pub name: String,
- pub full_name: String,
- pub description: String,
- pub icon: String,
- pub version_number: String,
- pub dependencies: Vec<String>,
- pub download_url: String,
- pub downloads: i32,
- pub date_created: String,
- pub website_url: String,
- pub is_active: bool,
- pub uuid4: String,
- pub file_size: i64,
-}
-
-/// Performs actual fetch from Thunderstore and returns response
-async fn fetch_thunderstore_packages() -> Result<String, reqwest::Error> {
- log::info!("Fetching Thunderstore API");
-
- // Fetches
- let url = "https://northstar.thunderstore.io/api/v1/package/";
-
- let client = reqwest::Client::new();
- client
- .get(url)
- .header(reqwest::header::USER_AGENT, APP_USER_AGENT)
- .send()
- .await?
- .text()
- .await
-}
-
-/// Queries Thunderstore packages API
-#[tauri::command]
-pub async fn query_thunderstore_packages_api() -> Result<Vec<ThunderstoreMod>, String> {
- let res = match fetch_thunderstore_packages().await {
- Ok(res) => res,
- Err(err) => {
- let warn_response = format!("Couldn't fetch from Thunderstore: {err}");
- log::warn!("{warn_response}");
- return Err(warn_response);
- }
- };
-
- // Parse response
- let parsed_json: Vec<ThunderstoreMod> = match serde_json::from_str(&res) {
- Ok(res) => res,
- Err(err) => return Err(err.to_string()),
- };
-
- // Remove some mods from listing
- let to_remove_set: HashSet<&str> = BLACKLISTED_MODS.iter().copied().collect();
- let filtered_packages = parsed_json
- .into_iter()
- .filter(|package| !to_remove_set.contains(&package.full_name.as_ref()))
- .collect::<Vec<ThunderstoreMod>>();
-
- Ok(filtered_packages)
-}
diff --git a/src-tauri/src/util.rs b/src-tauri/src/util.rs
deleted file mode 100644
index 1d355997..00000000
--- a/src-tauri/src/util.rs
+++ /dev/null
@@ -1,324 +0,0 @@
-//! This module contains various utility/helper functions that do not fit into any other module
-
-use anyhow::{Context, Result};
-use serde::{Deserialize, Serialize};
-use zip::ZipArchive;
-
-use crate::constants::{APP_USER_AGENT, MASTER_SERVER_URL, SERVER_BROWSER_ENDPOINT};
-
-#[derive(Serialize, Deserialize, Debug, Clone)]
-pub struct NorthstarServer {
- #[serde(rename = "playerCount")]
- pub player_count: i32,
-}
-
-/// This function's only use is to force a `panic!()`
-// This must NOT be async to ensure crashing whole application.
-#[tauri::command]
-pub fn force_panic() {
- panic!("Force panicked!");
-}
-
-/// Returns true if built in debug mode
-#[tauri::command]
-pub async fn is_debug_mode() -> bool {
- cfg!(debug_assertions)
-}
-
-/// Returns the current version number as a string
-#[tauri::command]
-pub async fn get_flightcore_version_number() -> String {
- let version = env!("CARGO_PKG_VERSION");
- if cfg!(debug_assertions) {
- // Debugging enabled
- format!("v{} (debug mode)", version)
- } else {
- // Debugging disabled
- format!("v{}", version)
- }
-}
-
-/// Spawns repair window
-#[tauri::command]
-pub async fn open_repair_window(handle: tauri::AppHandle) -> Result<(), String> {
- // Spawn new window
- let repair_window = match tauri::WindowBuilder::new(
- &handle,
- "RepairWindow",
- tauri::WindowUrl::App("/#/repair".into()),
- )
- .build()
- {
- Ok(res) => res,
- Err(err) => return Err(err.to_string()),
- };
-
- // Set window title
- match repair_window.set_title("FlightCore Repair Window") {
- Ok(()) => (),
- Err(err) => return Err(err.to_string()),
- };
- Ok(())
-}
-
-/// Closes all windows and exits application
-#[tauri::command]
-pub async fn close_application<R: tauri::Runtime>(app: tauri::AppHandle<R>) -> Result<(), String> {
- app.exit(0); // Close application
- Ok(())
-}
-
-/// Fetches `/client/servers` endpoint from master server
-async fn fetch_server_list() -> Result<String, anyhow::Error> {
- let url = format!("{MASTER_SERVER_URL}{SERVER_BROWSER_ENDPOINT}");
- let client = reqwest::Client::new();
- let res = client
- .get(url)
- .header(reqwest::header::USER_AGENT, APP_USER_AGENT)
- .send()
- .await?
- .text()
- .await?;
-
- Ok(res)
-}
-
-/// Gets server and playercount from master server API
-#[tauri::command]
-pub async fn get_server_player_count() -> Result<(i32, usize), String> {
- let res = match fetch_server_list().await {
- Ok(res) => res,
- Err(err) => return Err(err.to_string()),
- };
-
- let ns_servers: Vec<NorthstarServer> =
- serde_json::from_str(&res).expect("JSON was not well-formatted");
-
- // Get server count
- let server_count = ns_servers.len();
-
- // Sum up player count
- let total_player_count: i32 = ns_servers.iter().map(|server| server.player_count).sum();
-
- log::info!("total_player_count: {}", total_player_count);
- log::info!("server_count: {}", server_count);
-
- Ok((total_player_count, server_count))
-}
-
-#[tauri::command]
-pub async fn kill_northstar() -> Result<(), String> {
- if !check_northstar_running() {
- return Err("Northstar is not running".to_string());
- }
-
- let s = sysinfo::System::new_all();
-
- for process in s.processes_by_exact_name("Titanfall2.exe") {
- log::info!("Killing Process {}", process.pid());
- process.kill();
- }
-
- for process in s.processes_by_exact_name("NorthstarLauncher.exe") {
- log::info!("Killing Process {}", process.pid());
- process.kill();
- }
-
- Ok(())
-}
-
-/// Copied from `papa` source code and modified
-///Extract N* zip file to target game path
-// fn extract(ctx: &Ctx, zip_file: File, target: &Path) -> Result<()> {
-pub fn extract(zip_file: std::fs::File, target: &std::path::Path) -> Result<()> {
- let mut archive = ZipArchive::new(&zip_file).context("Unable to open zip archive")?;
- for i in 0..archive.len() {
- let mut f = archive.by_index(i).unwrap();
-
- //This should work fine for N* because the dir structure *should* always be the same
- if f.enclosed_name().unwrap().starts_with("Northstar") {
- let out = target.join(
- f.enclosed_name()
- .unwrap()
- .strip_prefix("Northstar")
- .unwrap(),
- );
-
- if (*f.name()).ends_with('/') {
- log::info!("Create directory {}", f.name());
- std::fs::create_dir_all(target.join(f.name()))
- .context("Unable to create directory")?;
- continue;
- } else if let Some(p) = out.parent() {
- std::fs::create_dir_all(p).context("Unable to create directory")?;
- }
-
- let mut outfile = std::fs::OpenOptions::new()
- .create(true)
- .write(true)
- .truncate(true)
- .open(&out)?;
-
- log::info!("Write file {}", out.display());
-
- std::io::copy(&mut f, &mut outfile).context("Unable to write to file")?;
- }
- }
-
- Ok(())
-}
-
-pub fn check_ea_app_or_origin_running() -> bool {
- let s = sysinfo::System::new_all();
- let x = s.processes_by_name("Origin.exe").next().is_some()
- || s.processes_by_name("EADesktop.exe").next().is_some();
- x
-}
-
-/// Checks if Northstar process is running
-pub fn check_northstar_running() -> bool {
- let s = sysinfo::System::new_all();
- let x = s
- .processes_by_name("NorthstarLauncher.exe")
- .next()
- .is_some()
- || s.processes_by_name("Titanfall2.exe").next().is_some();
- x
-}
-
-/// Copies a folder and all its contents to a new location
-pub fn copy_dir_all(
- src: impl AsRef<std::path::Path>,
- dst: impl AsRef<std::path::Path>,
-) -> std::io::Result<()> {
- std::fs::create_dir_all(&dst)?;
- for entry in std::fs::read_dir(src)? {
- let entry = entry?;
- let ty = entry.file_type()?;
- if ty.is_dir() {
- copy_dir_all(entry.path(), dst.as_ref().join(entry.file_name()))?;
- } else {
- std::fs::copy(entry.path(), dst.as_ref().join(entry.file_name()))?;
- }
- }
- Ok(())
-}
-
-/// Moves a folders file structure to a new location
-/// Old folders are not removed
-pub fn move_dir_all(
- src: impl AsRef<std::path::Path>,
- dst: impl AsRef<std::path::Path>,
-) -> std::io::Result<()> {
- std::fs::create_dir_all(&dst)?;
- for entry in std::fs::read_dir(src)? {
- let entry = entry?;
- let ty = entry.file_type()?;
- if ty.is_dir() {
- move_dir_all(entry.path(), dst.as_ref().join(entry.file_name()))?;
- std::fs::remove_dir(entry.path())?;
- } else {
- std::fs::rename(entry.path(), dst.as_ref().join(entry.file_name()))?;
- }
- }
- Ok(())
-}
-
-/// Helps with converting release candidate numbers which are different on Thunderstore
-/// due to restrictions imposed by the platform
-pub fn convert_release_candidate_number(version_number: String) -> String {
- let release_candidate_suffix = "-rc";
-
- if !version_number.contains(release_candidate_suffix) {
- // Not an release-candidate version number, nothing to do, return early
- return version_number;
- }
-
- // Version number is guaranteed to contain `-rc`
- let re = regex::Regex::new(r"(\d+)\.(\d+)\.(\d+)-rc(\d+)").unwrap();
- if let Some(captures) = re.captures(&version_number) {
- // Extract versions
- let major_version: u32 = captures[1].parse().unwrap();
- let minor_version: u32 = captures[2].parse().unwrap();
- let patch_version: u32 = captures[3].parse().unwrap();
- let release_candidate: u32 = captures[4].parse().unwrap();
-
- // Zero pad
- let padded_release_candidate = format!("{:02}", release_candidate);
-
- // Combine
- let combined_patch_version = format!("{}{}", patch_version, padded_release_candidate);
-
- // Strip leading zeroes
- let trimmed_combined_patch_version = combined_patch_version.trim_start_matches('0');
-
- // Combine all
- let version_number = format!(
- "{}.{}.{}",
- major_version, minor_version, trimmed_combined_patch_version
- );
- return version_number;
- }
-
- // We should never end up here
- panic!();
-}
-
-#[cfg(test)]
-mod tests {
- use super::*;
-
- #[test]
- fn test_not_release_candidate() {
- let input = "1.2.3".to_string();
- let output = convert_release_candidate_number(input.clone());
- let expected_output = input;
- assert_eq!(output, expected_output);
- }
-
- #[test]
- fn test_basic_release_candidate_number_conversion() {
- let input = "1.2.3-rc4".to_string();
- let output = convert_release_candidate_number(input);
- let expected_output = "1.2.304";
- assert_eq!(output, expected_output);
- }
-
- #[test]
- fn test_leading_zero_release_candidate_number_conversion() {
- let input = "1.2.0-rc3".to_string();
- let output = convert_release_candidate_number(input);
- let expected_output = "1.2.3";
- assert_eq!(output, expected_output);
- }
-
- #[test]
- fn test_double_patch_digit_release_candidate_number_conversion() {
- // let input = "v1.2.34-rc5".to_string();
- // let output = convert_release_candidate_number(input);
- // let expected_output = "v1.2.3405";
- let input = "1.19.10-rc1".to_string();
- let output = convert_release_candidate_number(input);
- let expected_output = "1.19.1001";
-
- assert_eq!(output, expected_output);
- }
-
- #[test]
- fn test_double_digit_release_candidate_number_conversion() {
- let input = "1.2.3-rc45".to_string();
- let output = convert_release_candidate_number(input);
- let expected_output = "1.2.345";
-
- assert_eq!(output, expected_output);
- }
-
- #[test]
- fn test_double_digit_patch_and_rc_number_conversion() {
- let input = "1.2.34-rc56".to_string();
- let output = convert_release_candidate_number(input);
- let expected_output = "1.2.3456";
-
- assert_eq!(output, expected_output);
- }
-}
diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json
index 30dbdfcb..0fbb614c 100644
--- a/src-tauri/tauri.conf.json
+++ b/src-tauri/tauri.conf.json
@@ -1,74 +1,35 @@
{
- "$schema": "../node_modules/@tauri-apps/cli/schema.json",
+ "$schema": "https://schema.tauri.app/config/2",
+ "productName": "FlightCore",
+ "version": "2.26.2",
+ "identifier": "com.github.r2northstartools.flightcore",
"build": {
- "beforeBuildCommand": "cd src-vue && npm run build",
- "beforeDevCommand": "cd src-vue && npm run dev",
- "devPath": "http://localhost:5173/",
- "distDir": "../src-vue/dist"
+ "beforeDevCommand": "npm run dev",
+ "devUrl": "http://localhost:1420/",
+ "beforeBuildCommand": "npm run build",
+ "frontendDist": "../dist"
},
- "package": {
- "productName": "FlightCore",
- "version": "2.26.2"
- },
- "tauri": {
- "allowlist": {
- "all": true
- },
- "bundle": {
- "active": true,
- "category": "DeveloperTool",
- "copyright": "",
- "deb": {
- "depends": []
- },
- "externalBin": [],
- "icon": [
- "icons/32x32.png",
- "icons/128x128.png",
- "icons/128x128@2x.png",
- "icons/icon.icns",
- "icons/icon.ico"
- ],
- "identifier": "com.github.r2northstartools.flightcore",
- "longDescription": "",
- "macOS": {
- "entitlements": null,
- "exceptionDomain": "",
- "frameworks": [],
- "providerShortName": null,
- "signingIdentity": null
- },
- "resources": [],
- "shortDescription": "",
- "targets": "all",
- "windows": {
- "certificateThumbprint": null,
- "digestAlgorithm": "sha256",
- "timestampUrl": ""
- }
- },
- "security": {
- "csp": null
- },
- "updater": {
- "active": true,
- "pubkey": "dW50cnVzdGVkIGNvbW1lbnQ6IG1pbmlzaWduIHB1YmxpYyBrZXk6IEVBNjM3NzJGRDgxMTU4NUUKUldSZVdCSFlMM2RqNmdhK3pIZjhEYWg2WnZGSFJqdkhLSHNOSjNhaW5VQVFLaHV3YWFDTnFKWWQK",
- "endpoints": [
- "https://github.com/R2NorthstarTools/FlightCore/releases/latest/download/latest-release.json"
- ],
- "dialog": true
- },
+ "app": {
"windows": [
{
- "fullscreen": false,
- "resizable": true,
- "decorations": false,
"title": "FlightCore",
- "height": 600,
- "minHeight": 300,
"width": 1010,
- "minWidth": 600
+ "height": 600
}
+ ],
+ "security": {
+ "csp": null
+ }
+ },
+ "bundle": {
+ "active": true,
+ "targets": "all",
+ "icon": [
+ "icons/32x32.png",
+ "icons/128x128.png",
+ "icons/128x128@2x.png",
+ "icons/icon.icns",
+ "icons/icon.ico"
]
}
}