feat: support for automatic app updates (#274)

* feat: support for automatic app updates

* refactor: add force update instructions

* refactor: optimize version update alerts

* chore: updating configuration files
This commit is contained in:
ayangweb
2025-03-11 10:36:42 +08:00
committed by GitHub
parent a3bc997efe
commit 8c9ccef218
19 changed files with 873 additions and 535 deletions

View File

@@ -20,10 +20,10 @@
"@tauri-apps/plugin-dialog": "^2.2.0", "@tauri-apps/plugin-dialog": "^2.2.0",
"@tauri-apps/plugin-global-shortcut": "~2.0.0", "@tauri-apps/plugin-global-shortcut": "~2.0.0",
"@tauri-apps/plugin-http": "~2.0.2", "@tauri-apps/plugin-http": "~2.0.2",
"@tauri-apps/plugin-os": "^2.2.0", "@tauri-apps/plugin-os": "^2.2.1",
"@tauri-apps/plugin-process": "^2.2.0", "@tauri-apps/plugin-process": "^2.2.0",
"@tauri-apps/plugin-shell": "^2.2.0", "@tauri-apps/plugin-shell": "^2.2.0",
"@tauri-apps/plugin-updater": "^2.5.1", "@tauri-apps/plugin-updater": "^2.6.0",
"@tauri-apps/plugin-websocket": "~2.3.0", "@tauri-apps/plugin-websocket": "~2.3.0",
"@tauri-apps/plugin-window": "2.0.0-alpha.1", "@tauri-apps/plugin-window": "2.0.0-alpha.1",
"ahooks": "^3.8.4", "ahooks": "^3.8.4",
@@ -35,7 +35,7 @@
"lodash-es": "^4.17.21", "lodash-es": "^4.17.21",
"lucide-react": "^0.461.0", "lucide-react": "^0.461.0",
"mermaid": "^11.4.1", "mermaid": "^11.4.1",
"nanoid": "^5.1.2", "nanoid": "^5.1.3",
"react": "^18.3.1", "react": "^18.3.1",
"react-dom": "^18.3.1", "react-dom": "^18.3.1",
"react-hotkeys-hook": "^4.6.1", "react-hotkeys-hook": "^4.6.1",
@@ -59,14 +59,14 @@
"@tauri-apps/cli": "^2.3.1", "@tauri-apps/cli": "^2.3.1",
"@types/lodash-es": "^4.17.12", "@types/lodash-es": "^4.17.12",
"@types/markdown-it": "^14.1.2", "@types/markdown-it": "^14.1.2",
"@types/node": "^22.13.9", "@types/node": "^22.13.10",
"@types/react": "^18.3.18", "@types/react": "^18.3.18",
"@types/react-dom": "^18.3.5", "@types/react-dom": "^18.3.5",
"@types/react-i18next": "^8.1.0", "@types/react-i18next": "^8.1.0",
"@types/react-katex": "^3.0.4", "@types/react-katex": "^3.0.4",
"@types/react-window": "^1.8.8", "@types/react-window": "^1.8.8",
"@vitejs/plugin-react": "^4.3.4", "@vitejs/plugin-react": "^4.3.4",
"autoprefixer": "^10.4.20", "autoprefixer": "^10.4.21",
"immer": "^10.1.1", "immer": "^10.1.1",
"postcss": "^8.5.3", "postcss": "^8.5.3",
"release-it": "^18.1.2", "release-it": "^18.1.2",

758
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

327
src-tauri/Cargo.lock generated
View File

@@ -181,7 +181,7 @@ checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.99", "syn 2.0.100",
] ]
[[package]] [[package]]
@@ -272,7 +272,7 @@ dependencies = [
"futures-lite", "futures-lite",
"parking", "parking",
"polling", "polling",
"rustix", "rustix 0.38.44",
"slab", "slab",
"tracing", "tracing",
"windows-sys 0.59.0", "windows-sys 0.59.0",
@@ -304,7 +304,7 @@ dependencies = [
"cfg-if", "cfg-if",
"event-listener", "event-listener",
"futures-lite", "futures-lite",
"rustix", "rustix 0.38.44",
"tracing", "tracing",
] ]
@@ -316,7 +316,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.99", "syn 2.0.100",
] ]
[[package]] [[package]]
@@ -331,7 +331,7 @@ dependencies = [
"cfg-if", "cfg-if",
"futures-core", "futures-core",
"futures-io", "futures-io",
"rustix", "rustix 0.38.44",
"signal-hook-registry", "signal-hook-registry",
"slab", "slab",
"windows-sys 0.59.0", "windows-sys 0.59.0",
@@ -351,7 +351,7 @@ checksum = "d556ec1359574147ec0c4fc5eb525f3f23263a592b1a9c07e0a75b427de55c97"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.99", "syn 2.0.100",
] ]
[[package]] [[package]]
@@ -582,9 +582,9 @@ checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495"
[[package]] [[package]]
name = "bytes" name = "bytes"
version = "1.10.0" version = "1.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f61dac84819c6588b558454b194026eb1f09c293b9036ae9b159e74e73ab6cf9" checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a"
dependencies = [ dependencies = [
"serde", "serde",
] ]
@@ -1103,7 +1103,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331"
dependencies = [ dependencies = [
"quote", "quote",
"syn 2.0.99", "syn 2.0.100",
] ]
[[package]] [[package]]
@@ -1113,7 +1113,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501" checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501"
dependencies = [ dependencies = [
"quote", "quote",
"syn 2.0.99", "syn 2.0.100",
] ]
[[package]] [[package]]
@@ -1137,7 +1137,7 @@ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"strsim", "strsim",
"syn 2.0.99", "syn 2.0.100",
] ]
[[package]] [[package]]
@@ -1148,7 +1148,7 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806"
dependencies = [ dependencies = [
"darling_core", "darling_core",
"quote", "quote",
"syn 2.0.99", "syn 2.0.100",
] ]
[[package]] [[package]]
@@ -1192,7 +1192,7 @@ checksum = "30542c1ad912e0e3d22a1935c290e12e8a29d704a420177a31faad4a601a0800"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.99", "syn 2.0.100",
] ]
[[package]] [[package]]
@@ -1205,7 +1205,7 @@ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"rustc_version", "rustc_version",
"syn 2.0.99", "syn 2.0.100",
] ]
[[package]] [[package]]
@@ -1294,7 +1294,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.99", "syn 2.0.100",
] ]
[[package]] [[package]]
@@ -1326,7 +1326,7 @@ checksum = "f2b99bf03862d7f545ebc28ddd33a665b50865f4dfd84031a393823879bd4c54"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.99", "syn 2.0.100",
] ]
[[package]] [[package]]
@@ -1412,9 +1412,9 @@ checksum = "1c7a8fb8a9fbf66c1f703fe16184d10ca0ee9d23be5b4436400408ba54a95005"
[[package]] [[package]]
name = "either" name = "either"
version = "1.14.0" version = "1.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b7914353092ddf589ad78f25c5c1c21b7f80b0ff8621e7c814c3485b5306da9d" checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719"
[[package]] [[package]]
name = "embed-resource" name = "embed-resource"
@@ -1469,7 +1469,7 @@ checksum = "fc4caf64a58d7a6d65ab00639b046ff54399a39f5f2554728895ace4b297cd79"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.99", "syn 2.0.100",
] ]
[[package]] [[package]]
@@ -1484,14 +1484,14 @@ dependencies = [
[[package]] [[package]]
name = "env_logger" name = "env_logger"
version = "0.11.6" version = "0.11.7"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dcaee3d8e3cfc3fd92428d477bc97fc29ec8716d180c0d74c643bb26166660e0" checksum = "c3716d7a920fb4fac5d84e9d4bce8ceb321e9414b4409da61b07b75c1e3d0697"
dependencies = [ dependencies = [
"anstream", "anstream",
"anstyle", "anstyle",
"env_filter", "env_filter",
"humantime", "jiff",
"log", "log",
] ]
@@ -1652,7 +1652,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.99", "syn 2.0.100",
] ]
[[package]] [[package]]
@@ -1770,7 +1770,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.99", "syn 2.0.100",
] ]
[[package]] [[package]]
@@ -1929,11 +1929,11 @@ dependencies = [
[[package]] [[package]]
name = "gethostname" name = "gethostname"
version = "0.5.0" version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dc3655aa6818d65bc620d6911f05aa7b6aeb596291e1e9f79e52df85583d1e30" checksum = "4fd4b8790c0792e3b11895efdf5f289ebe8b59107a6624f1cce68f24ff8c7035"
dependencies = [ dependencies = [
"rustix", "rustix 0.38.44",
"windows-targets 0.52.6", "windows-targets 0.52.6",
] ]
@@ -2106,7 +2106,7 @@ dependencies = [
"proc-macro-error", "proc-macro-error",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.99", "syn 2.0.100",
] ]
[[package]] [[package]]
@@ -2116,10 +2116,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "715601f8f02e71baef9c1f94a657a9a77c192aea6097cf9ae7e5e177cd8cde68" checksum = "715601f8f02e71baef9c1f94a657a9a77c192aea6097cf9ae7e5e177cd8cde68"
dependencies = [ dependencies = [
"heck 0.5.0", "heck 0.5.0",
"proc-macro-crate 3.2.0", "proc-macro-crate 3.3.0",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.99", "syn 2.0.100",
] ]
[[package]] [[package]]
@@ -2236,7 +2236,7 @@ dependencies = [
"proc-macro-error", "proc-macro-error",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.99", "syn 2.0.100",
] ]
[[package]] [[package]]
@@ -2251,7 +2251,7 @@ dependencies = [
"futures-core", "futures-core",
"futures-sink", "futures-sink",
"http 1.2.0", "http 1.2.0",
"indexmap 2.7.1", "indexmap 2.8.0",
"slab", "slab",
"tokio", "tokio",
"tokio-util", "tokio-util",
@@ -2413,12 +2413,6 @@ version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
[[package]]
name = "humantime"
version = "2.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
[[package]] [[package]]
name = "hyper" name = "hyper"
version = "0.14.32" version = "0.14.32"
@@ -2662,7 +2656,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.99", "syn 2.0.100",
] ]
[[package]] [[package]]
@@ -2744,9 +2738,9 @@ dependencies = [
[[package]] [[package]]
name = "indexmap" name = "indexmap"
version = "2.7.1" version = "2.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652" checksum = "3954d50fe15b02142bf25d3b8bdadb634ec3948f103d04ffe3031bc8fe9d7058"
dependencies = [ dependencies = [
"equivalent", "equivalent",
"hashbrown 0.15.2", "hashbrown 0.15.2",
@@ -2799,7 +2793,7 @@ checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.99", "syn 2.0.100",
] ]
[[package]] [[package]]
@@ -2877,6 +2871,30 @@ dependencies = [
"system-deps 6.2.2", "system-deps 6.2.2",
] ]
[[package]]
name = "jiff"
version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d699bc6dfc879fb1bf9bdff0d4c56f0884fc6f0d0eb0fba397a6d00cd9a6b85e"
dependencies = [
"jiff-static",
"log",
"portable-atomic",
"portable-atomic-util",
"serde",
]
[[package]]
name = "jiff-static"
version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8d16e75759ee0aa64c57a56acbf43916987b20c77373cb7e808979e02b93c9f9"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.100",
]
[[package]] [[package]]
name = "jni" name = "jni"
version = "0.21.1" version = "0.21.1"
@@ -3088,6 +3106,12 @@ version = "0.4.15"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab"
[[package]]
name = "linux-raw-sys"
version = "0.9.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6db9c683daf087dc577b7506e9695b3d556a9f3849903fa28186283afd6809e9"
[[package]] [[package]]
name = "litemap" name = "litemap"
version = "0.7.5" version = "0.7.5"
@@ -3450,7 +3474,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.99", "syn 2.0.100",
] ]
[[package]] [[package]]
@@ -3497,10 +3521,10 @@ version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56"
dependencies = [ dependencies = [
"proc-macro-crate 3.2.0", "proc-macro-crate 3.3.0",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.99", "syn 2.0.100",
] ]
[[package]] [[package]]
@@ -3824,9 +3848,9 @@ dependencies = [
[[package]] [[package]]
name = "once_cell" name = "once_cell"
version = "1.20.3" version = "1.21.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e" checksum = "cde51589ab56b20a6f686b2c68f7a0bd6add753d697abf720d63f8db3ab7b1ad"
[[package]] [[package]]
name = "open" name = "open"
@@ -3863,7 +3887,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.99", "syn 2.0.100",
] ]
[[package]] [[package]]
@@ -4143,7 +4167,7 @@ dependencies = [
"phf_shared 0.11.3", "phf_shared 0.11.3",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.99", "syn 2.0.100",
] ]
[[package]] [[package]]
@@ -4227,7 +4251,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "42cf17e9a1800f5f396bc67d193dc9411b59012a5876445ef450d449881e1016" checksum = "42cf17e9a1800f5f396bc67d193dc9411b59012a5876445ef450d449881e1016"
dependencies = [ dependencies = [
"base64 0.22.1", "base64 0.22.1",
"indexmap 2.7.1", "indexmap 2.8.0",
"quick-xml 0.32.0", "quick-xml 0.32.0",
"serde", "serde",
"time", "time",
@@ -4256,11 +4280,26 @@ dependencies = [
"concurrent-queue", "concurrent-queue",
"hermit-abi", "hermit-abi",
"pin-project-lite", "pin-project-lite",
"rustix", "rustix 0.38.44",
"tracing", "tracing",
"windows-sys 0.59.0", "windows-sys 0.59.0",
] ]
[[package]]
name = "portable-atomic"
version = "1.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e"
[[package]]
name = "portable-atomic-util"
version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507"
dependencies = [
"portable-atomic",
]
[[package]] [[package]]
name = "powerfmt" name = "powerfmt"
version = "0.2.0" version = "0.2.0"
@@ -4269,11 +4308,11 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
[[package]] [[package]]
name = "ppv-lite86" name = "ppv-lite86"
version = "0.2.20" version = "0.2.21"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9"
dependencies = [ dependencies = [
"zerocopy 0.7.35", "zerocopy 0.8.23",
] ]
[[package]] [[package]]
@@ -4303,9 +4342,9 @@ dependencies = [
[[package]] [[package]]
name = "proc-macro-crate" name = "proc-macro-crate"
version = "3.2.0" version = "3.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35"
dependencies = [ dependencies = [
"toml_edit 0.22.24", "toml_edit 0.22.24",
] ]
@@ -4365,7 +4404,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a65f2e60fbf1063868558d69c6beacf412dc755f9fc020f514b7955fc914fe30" checksum = "a65f2e60fbf1063868558d69c6beacf412dc755f9fc020f514b7955fc914fe30"
dependencies = [ dependencies = [
"quote", "quote",
"syn 2.0.99", "syn 2.0.100",
] ]
[[package]] [[package]]
@@ -4520,7 +4559,7 @@ checksum = "3779b94aeb87e8bd4e834cee3650289ee9e0d5677f976ecdb6d219e5f4f6cd94"
dependencies = [ dependencies = [
"rand_chacha 0.9.0", "rand_chacha 0.9.0",
"rand_core 0.9.3", "rand_core 0.9.3",
"zerocopy 0.8.21", "zerocopy 0.8.23",
] ]
[[package]] [[package]]
@@ -4820,9 +4859,9 @@ checksum = "57397d16646700483b67d2dd6511d79318f9d057fdbd21a4066aeac8b41d310a"
[[package]] [[package]]
name = "ring" name = "ring"
version = "0.17.11" version = "0.17.13"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "da5349ae27d3887ca812fb375b45a4fbb36d8d12d2df394968cd86e35683fe73" checksum = "70ac5d832aa16abd7d1def883a8545280c20a60f523a370aa3a9617c2b8550ee"
dependencies = [ dependencies = [
"cc", "cc",
"cfg-if", "cfg-if",
@@ -4895,7 +4934,20 @@ dependencies = [
"bitflags 2.9.0", "bitflags 2.9.0",
"errno", "errno",
"libc", "libc",
"linux-raw-sys", "linux-raw-sys 0.4.15",
"windows-sys 0.59.0",
]
[[package]]
name = "rustix"
version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f7178faa4b75a30e269c71e61c353ce2748cf3d76f0c44c393f4e60abf49b825"
dependencies = [
"bitflags 2.9.0",
"errno",
"libc",
"linux-raw-sys 0.9.2",
"windows-sys 0.59.0", "windows-sys 0.59.0",
] ]
@@ -5018,7 +5070,7 @@ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"serde_derive_internals", "serde_derive_internals",
"syn 2.0.99", "syn 2.0.100",
] ]
[[package]] [[package]]
@@ -5097,9 +5149,9 @@ dependencies = [
[[package]] [[package]]
name = "serde" name = "serde"
version = "1.0.218" version = "1.0.219"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e8dfc9d19bdbf6d17e22319da49161d5d0108e4188e8b680aef6299eed22df60" checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6"
dependencies = [ dependencies = [
"serde_derive", "serde_derive",
] ]
@@ -5117,13 +5169,13 @@ dependencies = [
[[package]] [[package]]
name = "serde_derive" name = "serde_derive"
version = "1.0.218" version = "1.0.219"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f09503e191f4e797cb8aac08e9a4a4695c5edf6a2e70e376d961ddd5c969f82b" checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.99", "syn 2.0.100",
] ]
[[package]] [[package]]
@@ -5134,7 +5186,7 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.99", "syn 2.0.100",
] ]
[[package]] [[package]]
@@ -5157,7 +5209,7 @@ checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.99", "syn 2.0.100",
] ]
[[package]] [[package]]
@@ -5191,7 +5243,7 @@ dependencies = [
"chrono", "chrono",
"hex", "hex",
"indexmap 1.9.3", "indexmap 1.9.3",
"indexmap 2.7.1", "indexmap 2.8.0",
"serde", "serde",
"serde_derive", "serde_derive",
"serde_json", "serde_json",
@@ -5208,7 +5260,7 @@ dependencies = [
"darling", "darling",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.99", "syn 2.0.100",
] ]
[[package]] [[package]]
@@ -5475,9 +5527,9 @@ dependencies = [
[[package]] [[package]]
name = "syn" name = "syn"
version = "2.0.99" version = "2.0.100"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e02e925281e18ffd9d640e234264753c43edc62d64b2d4cf898f1bc5e75f3fc2" checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@@ -5501,7 +5553,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.99", "syn 2.0.100",
] ]
[[package]] [[package]]
@@ -5562,9 +5614,9 @@ dependencies = [
[[package]] [[package]]
name = "tao" name = "tao"
version = "0.32.7" version = "0.32.8"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7e7f38988a68dfb559899ea307b97577f008d3254f6cfdd219a67e27ce34c95b" checksum = "63c8b1020610b9138dd7b1e06cf259ae91aa05c30f3bd0d6b42a03997b92dec1"
dependencies = [ dependencies = [
"bitflags 2.9.0", "bitflags 2.9.0",
"core-foundation 0.10.0", "core-foundation 0.10.0",
@@ -5607,7 +5659,7 @@ checksum = "f4e16beb8b2ac17db28eab8bca40e62dbfbb34c0fcdc6d9826b11b7b5d047dfd"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.99", "syn 2.0.100",
] ]
[[package]] [[package]]
@@ -5719,7 +5771,7 @@ dependencies = [
"serde", "serde",
"serde_json", "serde_json",
"sha2", "sha2",
"syn 2.0.99", "syn 2.0.100",
"tauri-utils", "tauri-utils",
"thiserror 2.0.12", "thiserror 2.0.12",
"time", "time",
@@ -5747,7 +5799,7 @@ dependencies = [
"heck 0.5.0", "heck 0.5.0",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.99", "syn 2.0.100",
"tauri-codegen", "tauri-codegen",
"tauri-utils", "tauri-utils",
] ]
@@ -5755,7 +5807,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-nspanel" name = "tauri-nspanel"
version = "2.0.1" version = "2.0.1"
source = "git+https://github.com/ahkohd/tauri-nspanel?branch=v2#d20d53af786f1e2bdd48caac0145cd8ec3990c9b" source = "git+https://github.com/ahkohd/tauri-nspanel?branch=v2#16111b14441716350b6dc8157d926a5fda481687"
dependencies = [ dependencies = [
"bitflags 2.9.0", "bitflags 2.9.0",
"block", "block",
@@ -5911,9 +5963,9 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-http" name = "tauri-plugin-http"
version = "2.3.0" version = "2.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3a8137a106e0741fdd357366178fc6e0597abe7d20796f53f44171a1bcec1683" checksum = "028093def653e1f9da23a80beedfd33b88899427693b2c8357ce0c1cc26284b2"
dependencies = [ dependencies = [
"data-url", "data-url",
"http 1.2.0", "http 1.2.0",
@@ -5947,9 +5999,9 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-os" name = "tauri-plugin-os"
version = "2.2.0" version = "2.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dda2d571a9baf0664c1f2088db227e3072f9028602fafa885deade7547c3b738" checksum = "424f19432397850c2ddd42aa58078630c15287bbce3866eb1d90e7dbee680637"
dependencies = [ dependencies = [
"gethostname", "gethostname",
"log", "log",
@@ -6041,9 +6093,9 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-updater" name = "tauri-plugin-updater"
version = "2.5.1" version = "2.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "69b7db616844d73d55e4d00190be101b29de463d5cb70321c2840fa4e9c414c4" checksum = "67cd78a6cbd1255e989e96eedec004e9e8949e6c6359b41f861279aba64ea306"
dependencies = [ dependencies = [
"base64 0.22.1", "base64 0.22.1",
"dirs 6.0.0", "dirs 6.0.0",
@@ -6051,6 +6103,7 @@ dependencies = [
"futures-util", "futures-util",
"http 1.2.0", "http 1.2.0",
"infer", "infer",
"log",
"minisign-verify", "minisign-verify",
"osakit", "osakit",
"percent-encoding", "percent-encoding",
@@ -6184,15 +6237,15 @@ dependencies = [
[[package]] [[package]]
name = "tempfile" name = "tempfile"
version = "3.17.1" version = "3.18.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "22e5a0acb1f3f55f65cc4a866c361b2fb2a0ff6366785ae6fbb5f85df07ba230" checksum = "2c317e0a526ee6120d8dabad239c8dadca62b24b6f168914bbbc8e2fb1f0e567"
dependencies = [ dependencies = [
"cfg-if", "cfg-if",
"fastrand", "fastrand",
"getrandom 0.3.1", "getrandom 0.3.1",
"once_cell", "once_cell",
"rustix", "rustix 1.0.2",
"windows-sys 0.59.0", "windows-sys 0.59.0",
] ]
@@ -6239,7 +6292,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.99", "syn 2.0.100",
] ]
[[package]] [[package]]
@@ -6250,7 +6303,7 @@ checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.99", "syn 2.0.100",
] ]
[[package]] [[package]]
@@ -6266,9 +6319,9 @@ dependencies = [
[[package]] [[package]]
name = "time" name = "time"
version = "0.3.37" version = "0.3.39"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21" checksum = "dad298b01a40a23aac4580b67e3dbedb7cc8402f3592d7f49469de2ea4aecdd8"
dependencies = [ dependencies = [
"deranged", "deranged",
"itoa 1.0.15", "itoa 1.0.15",
@@ -6281,15 +6334,15 @@ dependencies = [
[[package]] [[package]]
name = "time-core" name = "time-core"
version = "0.1.2" version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" checksum = "765c97a5b985b7c11d7bc27fa927dc4fe6af3a6dfb021d28deb60d3bf51e76ef"
[[package]] [[package]]
name = "time-macros" name = "time-macros"
version = "0.2.19" version = "0.2.20"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2834e6017e3e5e4b9834939793b282bc03b37a3336245fa820e35e233e2a85de" checksum = "e8093bc3e81c3bc5f7879de09619d06c9a5a5e45ca44dfeeb7225bae38005c5c"
dependencies = [ dependencies = [
"num-conv", "num-conv",
"time-core", "time-core",
@@ -6331,9 +6384,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
[[package]] [[package]]
name = "tokio" name = "tokio"
version = "1.43.0" version = "1.44.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3d61fa4ffa3de412bfea335c6ecff681de2b609ba3c77ef3e00e521813a9ed9e" checksum = "9975ea0f48b5aa3972bf2d888c238182458437cc2a19374b81b25cdf1023fb3a"
dependencies = [ dependencies = [
"backtrace", "backtrace",
"bytes", "bytes",
@@ -6356,7 +6409,7 @@ checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.99", "syn 2.0.100",
] ]
[[package]] [[package]]
@@ -6460,7 +6513,7 @@ version = "0.19.15"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421"
dependencies = [ dependencies = [
"indexmap 2.7.1", "indexmap 2.8.0",
"toml_datetime", "toml_datetime",
"winnow 0.5.40", "winnow 0.5.40",
] ]
@@ -6471,7 +6524,7 @@ version = "0.20.7"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81" checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81"
dependencies = [ dependencies = [
"indexmap 2.7.1", "indexmap 2.8.0",
"toml_datetime", "toml_datetime",
"winnow 0.5.40", "winnow 0.5.40",
] ]
@@ -6482,7 +6535,7 @@ version = "0.22.24"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "17b4795ff5edd201c7cd6dca065ae59972ce77d1b80fa0a84d94950ece7d1474" checksum = "17b4795ff5edd201c7cd6dca065ae59972ce77d1b80fa0a84d94950ece7d1474"
dependencies = [ dependencies = [
"indexmap 2.7.1", "indexmap 2.8.0",
"serde", "serde",
"serde_spanned", "serde_spanned",
"toml_datetime", "toml_datetime",
@@ -6535,7 +6588,7 @@ checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.99", "syn 2.0.100",
] ]
[[package]] [[package]]
@@ -6895,7 +6948,7 @@ dependencies = [
"log", "log",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.99", "syn 2.0.100",
"wasm-bindgen-shared", "wasm-bindgen-shared",
] ]
@@ -6930,7 +6983,7 @@ checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.99", "syn 2.0.100",
"wasm-bindgen-backend", "wasm-bindgen-backend",
"wasm-bindgen-shared", "wasm-bindgen-shared",
] ]
@@ -6965,7 +7018,7 @@ checksum = "b7208998eaa3870dad37ec8836979581506e0c5c64c20c9e79e9d2a10d6f47bf"
dependencies = [ dependencies = [
"cc", "cc",
"downcast-rs", "downcast-rs",
"rustix", "rustix 0.38.44",
"scoped-tls", "scoped-tls",
"smallvec", "smallvec",
"wayland-sys", "wayland-sys",
@@ -6978,7 +7031,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c2120de3d33638aaef5b9f4472bff75f07c56379cf76ea320bd3a3d65ecaf73f" checksum = "c2120de3d33638aaef5b9f4472bff75f07c56379cf76ea320bd3a3d65ecaf73f"
dependencies = [ dependencies = [
"bitflags 2.9.0", "bitflags 2.9.0",
"rustix", "rustix 0.38.44",
"wayland-backend", "wayland-backend",
"wayland-scanner", "wayland-scanner",
] ]
@@ -7118,7 +7171,7 @@ checksum = "1d228f15bba3b9d56dde8bddbee66fa24545bd17b48d5128ccf4a8742b18e431"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.99", "syn 2.0.100",
] ]
[[package]] [[package]]
@@ -7329,7 +7382,7 @@ checksum = "12168c33176773b86799be25e2a2ba07c7aab9968b37541f1094dbd7a60c8946"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.99", "syn 2.0.100",
] ]
[[package]] [[package]]
@@ -7340,7 +7393,7 @@ checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.99", "syn 2.0.100",
] ]
[[package]] [[package]]
@@ -7351,7 +7404,7 @@ checksum = "83577b051e2f49a058c308f17f273b570a6a758386fc291b5f6a934dd84e48c1"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.99", "syn 2.0.100",
] ]
[[package]] [[package]]
@@ -7362,7 +7415,7 @@ checksum = "9d8dc32e0095a7eeccebd0e3f09e9509365ecb3fc6ac4d6f5f14a3f6392942d1"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.99", "syn 2.0.100",
] ]
[[package]] [[package]]
@@ -7373,7 +7426,7 @@ checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.99", "syn 2.0.100",
] ]
[[package]] [[package]]
@@ -7384,7 +7437,7 @@ checksum = "cb26fd936d991781ea39e87c3a27285081e3c0da5ca0fcbc02d368cc6f52ff01"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.99", "syn 2.0.100",
] ]
[[package]] [[package]]
@@ -7818,9 +7871,9 @@ checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51"
[[package]] [[package]]
name = "wry" name = "wry"
version = "0.50.3" version = "0.50.4"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d2ec139df5102db821f92a42033c3fa0467c5ab434511e79c65881d6bdf2b369" checksum = "804a7d1613bd699beccaa60f3b3c679acee21cebba1945a693f5eab95c08d1fa"
dependencies = [ dependencies = [
"base64 0.22.1", "base64 0.22.1",
"block2 0.6.0", "block2 0.6.0",
@@ -7883,13 +7936,12 @@ dependencies = [
[[package]] [[package]]
name = "xattr" name = "xattr"
version = "1.4.0" version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e105d177a3871454f754b33bb0ee637ecaaac997446375fd3e5d43a2ed00c909" checksum = "0d65cbf2f12c15564212d48f4e3dfb87923d25d611f2aed18f4cb23f0413d89e"
dependencies = [ dependencies = [
"libc", "libc",
"linux-raw-sys", "rustix 1.0.2",
"rustix",
] ]
[[package]] [[package]]
@@ -7955,7 +8007,7 @@ checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.99", "syn 2.0.100",
"synstructure", "synstructure",
] ]
@@ -8002,10 +8054,10 @@ version = "5.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f325ad10eb0d0a3eb060203494c3b7ec3162a01a59db75d2deee100339709fc0" checksum = "f325ad10eb0d0a3eb060203494c3b7ec3162a01a59db75d2deee100339709fc0"
dependencies = [ dependencies = [
"proc-macro-crate 3.2.0", "proc-macro-crate 3.3.0",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.99", "syn 2.0.100",
"zbus_names", "zbus_names",
"zvariant", "zvariant",
"zvariant_utils", "zvariant_utils",
@@ -8029,17 +8081,16 @@ version = "0.7.35"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0"
dependencies = [ dependencies = [
"byteorder",
"zerocopy-derive 0.7.35", "zerocopy-derive 0.7.35",
] ]
[[package]] [[package]]
name = "zerocopy" name = "zerocopy"
version = "0.8.21" version = "0.8.23"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dcf01143b2dd5d134f11f545cf9f1431b13b749695cb33bcce051e7568f99478" checksum = "fd97444d05a4328b90e75e503a34bad781f14e28a823ad3557f0750df1ebcbc6"
dependencies = [ dependencies = [
"zerocopy-derive 0.8.21", "zerocopy-derive 0.8.23",
] ]
[[package]] [[package]]
@@ -8050,18 +8101,18 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.99", "syn 2.0.100",
] ]
[[package]] [[package]]
name = "zerocopy-derive" name = "zerocopy-derive"
version = "0.8.21" version = "0.8.23"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "712c8386f4f4299382c9abee219bee7084f78fb939d88b6840fcc1320d5f6da2" checksum = "6352c01d0edd5db859a63e2605f4ea3183ddbd15e2c4a9e7d32184df75e4f154"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.99", "syn 2.0.100",
] ]
[[package]] [[package]]
@@ -8081,7 +8132,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.99", "syn 2.0.100",
"synstructure", "synstructure",
] ]
@@ -8110,7 +8161,7 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.99", "syn 2.0.100",
] ]
[[package]] [[package]]
@@ -8123,7 +8174,7 @@ dependencies = [
"crc32fast", "crc32fast",
"crossbeam-utils", "crossbeam-utils",
"displaydoc", "displaydoc",
"indexmap 2.7.1", "indexmap 2.8.0",
"memchr", "memchr",
"thiserror 2.0.12", "thiserror 2.0.12",
] ]
@@ -8174,10 +8225,10 @@ version = "5.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "74170caa85b8b84cc4935f2d56a57c7a15ea6185ccdd7eadb57e6edd90f94b2f" checksum = "74170caa85b8b84cc4935f2d56a57c7a15ea6185ccdd7eadb57e6edd90f94b2f"
dependencies = [ dependencies = [
"proc-macro-crate 3.2.0", "proc-macro-crate 3.3.0",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.99", "syn 2.0.100",
"zvariant_utils", "zvariant_utils",
] ]
@@ -8191,6 +8242,6 @@ dependencies = [
"quote", "quote",
"serde", "serde",
"static_assertions", "static_assertions",
"syn 2.0.99", "syn 2.0.100",
"winnow 0.7.3", "winnow 0.7.3",
] ]

View File

@@ -89,3 +89,4 @@ strip = true # Ensures debug symbols are removed.
[target.'cfg(not(any(target_os = "android", target_os = "ios")))'.dependencies] [target.'cfg(not(any(target_os = "android", target_os = "ios")))'.dependencies]
tauri-plugin-autostart = "^2.2" tauri-plugin-autostart = "^2.2"
tauri-plugin-global-shortcut = "2" tauri-plugin-global-shortcut = "2"
tauri-plugin-updater = "2"

View File

@@ -67,6 +67,7 @@
"macos-permissions:default", "macos-permissions:default",
"screenshots:default", "screenshots:default",
"core:window:allow-set-theme", "core:window:allow-set-theme",
"process:default" "process:default",
"updater:default"
] ]
} }

View File

@@ -9,6 +9,7 @@
"autostart:allow-enable", "autostart:allow-enable",
"autostart:allow-disable", "autostart:allow-disable",
"autostart:allow-is-enabled", "autostart:allow-is-enabled",
"global-shortcut:default" "global-shortcut:default",
"updater:default"
] ]
} }

View File

@@ -29,6 +29,11 @@ pub struct AuthProvider {
pub sso: Sso, pub sso: Sso,
} }
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MinimalClientVersion {
number: u32,
}
#[derive(Debug, Clone, Serialize, Deserialize)] #[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Server { pub struct Server {
#[serde(default = "default_empty_string")] // Custom default function for empty string #[serde(default = "default_empty_string")] // Custom default function for empty string
@@ -39,6 +44,7 @@ pub struct Server {
pub endpoint: String, pub endpoint: String,
pub provider: Provider, pub provider: Provider,
pub version: Version, pub version: Version,
pub minimal_client_version: Option<MinimalClientVersion>,
pub updated: String, pub updated: String,
#[serde(default = "default_enabled_type")] #[serde(default = "default_enabled_type")]
pub enabled: bool, pub enabled: bool,
@@ -70,7 +76,6 @@ impl Hash for Server {
} }
} }
#[derive(Debug, Clone, Serialize, Deserialize)] #[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ServerAccessToken { pub struct ServerAccessToken {
#[serde(default = "default_empty_string")] // Custom default function for empty string #[serde(default = "default_empty_string")] // Custom default function for empty string
@@ -104,11 +109,11 @@ impl Hash for ServerAccessToken {
} }
fn default_empty_string() -> String { fn default_empty_string() -> String {
"".to_string() // Default to empty string if not provided "".to_string() // Default to empty string if not provided
} }
fn default_bool_type() -> bool { fn default_bool_type() -> bool {
false // Default to false if not provided false // Default to false if not provided
} }
fn default_enabled_type() -> bool { fn default_enabled_type() -> bool {

View File

@@ -80,7 +80,8 @@ pub fn run() {
.plugin(tauri_plugin_fs_pro::init()) .plugin(tauri_plugin_fs_pro::init())
.plugin(tauri_plugin_macos_permissions::init()) .plugin(tauri_plugin_macos_permissions::init())
.plugin(tauri_plugin_screenshots::init()) .plugin(tauri_plugin_screenshots::init())
.plugin(tauri_plugin_process::init()); .plugin(tauri_plugin_process::init())
.plugin(tauri_plugin_updater::Builder::new().build());
// Conditional compilation for macOS // Conditional compilation for macOS
#[cfg(target_os = "macos")] #[cfg(target_os = "macos")]
@@ -223,7 +224,8 @@ pub async fn init<R: Runtime>(app_handle: &AppHandle<R>) {
let registry: State<SearchSourceRegistry> = app_handle.state::<SearchSourceRegistry>(); let registry: State<SearchSourceRegistry> = app_handle.state::<SearchSourceRegistry>();
for server in coco_servers { for server in coco_servers {
crate::server::servers::try_register_server_to_search_source(app_handle.clone(), &server).await; crate::server::servers::try_register_server_to_search_source(app_handle.clone(), &server)
.await;
} }
} }

View File

@@ -132,6 +132,7 @@ fn get_default_server() -> Server {
version: Version { version: Version {
number: "1.0.0_SNAPSHOT".to_string(), number: "1.0.0_SNAPSHOT".to_string(),
}, },
minimal_client_version: None,
updated: "2025-01-24T12:12:17.326286927+08:00".to_string(), updated: "2025-01-24T12:12:17.326286927+08:00".to_string(),
public: false, public: false,
available: true, available: true,
@@ -259,7 +260,6 @@ pub async fn load_or_insert_default_server<R: Runtime>(
pub async fn list_coco_servers<R: Runtime>( pub async fn list_coco_servers<R: Runtime>(
_app_handle: AppHandle<R>, _app_handle: AppHandle<R>,
) -> Result<Vec<Server>, String> { ) -> Result<Vec<Server>, String> {
//hard fresh all server's info, in order to get the actual health //hard fresh all server's info, in order to get the actual health
refresh_all_coco_server_info(_app_handle.clone()).await; refresh_all_coco_server_info(_app_handle.clone()).await;
@@ -282,9 +282,7 @@ pub const COCO_SERVERS: &str = "coco_servers";
const COCO_SERVER_TOKENS: &str = "coco_server_tokens"; const COCO_SERVER_TOKENS: &str = "coco_server_tokens";
pub async fn refresh_all_coco_server_info<R: Runtime>( pub async fn refresh_all_coco_server_info<R: Runtime>(app_handle: AppHandle<R>) {
app_handle: AppHandle<R>,
) {
let servers = get_all_servers(); let servers = get_all_servers();
for server in servers { for server in servers {
let _ = refresh_coco_server_info(app_handle.clone(), server.id.clone()).await; let _ = refresh_coco_server_info(app_handle.clone(), server.id.clone()).await;
@@ -334,7 +332,6 @@ pub async fn refresh_coco_server_info<R: Runtime>(
let _ = get_datasources_by_server(&id).await; let _ = get_datasources_by_server(&id).await;
Ok(server) Ok(server)
} }
Err(e) => Err(format!("Failed to deserialize the response: {:?}", e)), Err(e) => Err(format!("Failed to deserialize the response: {:?}", e)),
@@ -479,7 +476,6 @@ pub async fn try_register_server_to_search_source(
} }
} }
pub async fn mark_server_as_offline(id: &str) { pub async fn mark_server_as_offline(id: &str) {
// println!("server_is_offline: {}", id); // println!("server_is_offline: {}", id);
let server = get_server_by_id(id); let server = get_server_by_id(id);

View File

@@ -113,7 +113,7 @@
"updater": { "updater": {
"pubkey": "dW50cnVzdGVkIGNvbW1lbnQ6IG1pbmlzaWduIHB1YmxpYyBrZXk6IDlDRjNDRUU0NTdBMzdCRTMKUldUamU2Tlg1TTd6bkUwZWM0d2Zjdk0wdXJmendWVlpMMmhKN25EcmprYmIydnJ3dmFUME9QYXkK", "pubkey": "dW50cnVzdGVkIGNvbW1lbnQ6IG1pbmlzaWduIHB1YmxpYyBrZXk6IDlDRjNDRUU0NTdBMzdCRTMKUldUamU2Tlg1TTd6bkUwZWM0d2Zjdk0wdXJmendWVlpMMmhKN25EcmprYmIydnJ3dmFUME9QYXkK",
"endpoints": [ "endpoints": [
"https://api.coco.rs/update/{{target}}/{{arch}}/{{current_version}}" "https://release.infinilabs.com/coco/app/.latest.json?target={{target}}&arch={{arch}}&current_version={{current_version}}"
] ]
}, },
"websocket": {}, "websocket": {},

View File

@@ -10,6 +10,8 @@ import { useAppStore } from "@/stores/appStore";
import { isMac } from "@/utils/platform"; import { isMac } from "@/utils/platform";
import PinOffIcon from "@/icons/PinOff"; import PinOffIcon from "@/icons/PinOff";
import PinIcon from "@/icons/Pin"; import PinIcon from "@/icons/Pin";
import { useUpdateStore } from "@/stores/updateStore";
import clsx from "clsx";
interface FooterProps { interface FooterProps {
isChat: boolean; isChat: boolean;
@@ -22,6 +24,8 @@ export default function Footer({}: FooterProps) {
const isPinned = useAppStore((state) => state.isPinned); const isPinned = useAppStore((state) => state.isPinned);
const setIsPinned = useAppStore((state) => state.setIsPinned); const setIsPinned = useAppStore((state) => state.setIsPinned);
const setVisible = useUpdateStore((state) => state.setVisible);
const updateInfo = useUpdateStore((state) => state.updateInfo);
function openSetting() { function openSetting() {
emit("open_settings", ""); emit("open_settings", "");
@@ -55,16 +59,26 @@ export default function Footer({}: FooterProps) {
alt={t("search.footer.logoAlt")} alt={t("search.footer.logoAlt")}
/> />
)} )}
<span className="text-xs text-gray-500 dark:text-gray-400"> <div className="relative text-xs text-gray-500 dark:text-gray-400">
{sourceData?.source?.name || {updateInfo?.available ? (
<div className="cursor-pointer" onClick={() => setVisible(true)}>
<span>{t("search.footer.updateAvailable")}</span>
<span className="absolute top-0 -right-2 size-1.5 bg-[#FF3434] rounded-full"></span>
</div>
) : (
sourceData?.source?.name ||
t("search.footer.version", { t("search.footer.version", {
version: process.env.VERSION || "v1.0.0", version: process.env.VERSION || "v1.0.0",
})} })
</span> )}
</div>
<button <button
onClick={togglePin} onClick={togglePin}
className={`${isPinned ? "text-blue-500" : ""}`} className={clsx({
"text-blue-500": isPinned,
"pl-2": updateInfo?.available,
})}
> >
{isPinned ? <PinIcon /> : <PinOffIcon />} {isPinned ? <PinIcon /> : <PinOffIcon />}
</button> </button>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@@ -0,0 +1,181 @@
import { Button, Dialog, DialogPanel } from "@headlessui/react";
import { useTranslation } from "react-i18next";
import lightIcon from "./imgs/light-icon.png";
import darkIcon from "./imgs/dark-icon.png";
import { useThemeStore } from "@/stores/themeStore";
import { noop } from "lodash-es";
import { LoaderCircle, X } from "lucide-react";
import { useUpdateStore } from "@/stores/updateStore";
import { useInterval, useReactive } from "ahooks";
import { check } from "@tauri-apps/plugin-updater";
import { useCallback, useMemo } from "react";
import { relaunch } from "@tauri-apps/plugin-process";
import clsx from "clsx";
import { open } from "@tauri-apps/plugin-shell";
interface State {
loading?: boolean;
total?: number;
download: number;
}
const UpdateApp = () => {
const { t } = useTranslation();
const isDark = useThemeStore((state) => state.isDark);
const visible = useUpdateStore((state) => state.visible);
const setVisible = useUpdateStore((state) => state.setVisible);
const skipVersion = useUpdateStore((state) => state.skipVersion);
const setSkipVersion = useUpdateStore((state) => state.setSkipVersion);
const isOptional = useUpdateStore((state) => state.isOptional);
const updateInfo = useUpdateStore((state) => state.updateInfo);
const setUpdateInfo = useUpdateStore((state) => state.setUpdateInfo);
const state = useReactive<State>({ download: 0 });
useInterval(() => checkUpdate(), 1000 * 60 * 60 * 24, {
immediate: true,
});
const checkUpdate = useCallback(async () => {
const update = await check();
if (update?.available) {
setUpdateInfo(update);
if (skipVersion === update.version) return;
setVisible(true);
}
}, [skipVersion]);
const cursorClassName = useMemo(() => {
return state.loading ? "cursor-not-allowed" : "cursor-pointer";
}, [state.loading]);
const percent = useMemo(() => {
const { total, download } = state;
if (!total) return 0;
return ((download / total) * 100).toFixed(2);
}, [state.total, state.download]);
const handleDownload = async () => {
if (state.loading) return;
state.loading = true;
await updateInfo?.downloadAndInstall((progress) => {
switch (progress.event) {
case "Started":
state.total = progress.data.contentLength;
break;
case "Progress":
state.download += progress.data.chunkLength;
break;
}
});
state.loading = false;
relaunch();
};
const handleCancel = () => {
if (state.loading) return;
setVisible(false);
};
const handleSkip = () => {
if (state.loading) return;
setSkipVersion(updateInfo?.version);
setVisible(false);
};
return (
<Dialog
open={visible}
as="div"
className="relative z-10 focus:outline-none"
onClose={noop}
>
<div className="fixed inset-0 z-10 w-screen overflow-y-auto">
<div className="flex min-h-full items-center justify-center p-4">
<DialogPanel
transition
className="relative w-[340px] py-8 flex flex-col items-center bg-white shadow-md border border-[#EDEDED] rounded-lg dark:bg-[#333] dark:border-black/20"
>
<X
className={clsx(
"absolute size-5 text-[#999] top-3 right-3 dark:text-[#D8D8D8]",
cursorClassName,
{
hidden: !isOptional,
}
)}
onClick={handleCancel}
/>
<img src={isDark ? darkIcon : lightIcon} className="h-6" />
<div className="text-[#333] text-sm leading-5 py-2 dark:text-[#D8D8D8]">
{isOptional ? (
t("update.optional_description")
) : (
<div className="leading-5 text-center">
<p>{t("update.force_description1")}</p>
<p>{t("update.force_description2")}</p>
</div>
)}
</div>
<div
className="text-xs text-[#0072FF] cursor-pointer"
onClick={() => {
open(
"https://docs.infinilabs.com/coco-app/main/docs/release-notes"
);
}}
>
v{updateInfo?.version} {t("update.releaseNotes")}
</div>
<Button
className={clsx(
"mb-3 mt-6 bg-[#0072FF] text-white text-sm px-[14px] py-[8px] rounded-lg",
cursorClassName,
{
"opacity-50": state.loading,
}
)}
onClick={handleDownload}
>
{state.loading ? (
<div className="flex justify-center items-center gap-2">
<LoaderCircle className="animate-spin size-5" />
{percent}%
</div>
) : (
t("update.button.download")
)}
</Button>
<div
className={clsx("text-xs text-[#999]", cursorClassName, {
hidden: !isOptional,
})}
onClick={handleSkip}
>
{t("update.skip_version")}
</div>
</DialogPanel>
</div>
</div>
</Dialog>
);
};
export default UpdateApp;

View File

@@ -81,6 +81,7 @@
"footer": { "footer": {
"logoAlt": "Coco Logo", "logoAlt": "Coco Logo",
"version": "{{version}}", "version": "{{version}}",
"updateAvailable": "Update available",
"select": "Select", "select": "Select",
"open": "Open" "open": "Open"
}, },
@@ -206,5 +207,16 @@
"showCoco": "Show Coco", "showCoco": "Show Coco",
"settings": "Settings...", "settings": "Settings...",
"quitCoco": "Quit Coco" "quitCoco": "Quit Coco"
},
"update": {
"title": "New update available for Coco AI.",
"optional_description": "New update available for Coco AI.",
"force_description1": "Coco AI update required.",
"force_description2": "Please install the latest version to continue.",
"releaseNotes": "Release Notes",
"button": {
"download": "Download"
},
"skip_version": "Skip this version"
} }
} }

View File

@@ -81,6 +81,7 @@
"footer": { "footer": {
"logoAlt": "Coco 图标", "logoAlt": "Coco 图标",
"version": "{{version}}", "version": "{{version}}",
"updateAvailable": "有可用更新",
"select": "选择", "select": "选择",
"open": "打开" "open": "打开"
}, },
@@ -206,5 +207,15 @@
"showCoco": "显示 Coco", "showCoco": "显示 Coco",
"settings": "偏好设置", "settings": "偏好设置",
"quitCoco": "退出 Coco" "quitCoco": "退出 Coco"
},
"update": {
"optional_description": "Coco AI 有新的可用更新。",
"force_description1": "Coco Al 需要更新。",
"force_description2": "请安装最新版本后继续使用。",
"releaseNotes": "更新日志",
"button": {
"download": "下载"
},
"skip_version": "跳过此版本"
} }
} }

View File

@@ -10,6 +10,7 @@ import ChatAI, { ChatAIRef } from "@/components/Assistant/Chat";
import { useAppStore } from "@/stores/appStore"; import { useAppStore } from "@/stores/appStore";
import { useAuthStore } from "@/stores/authStore"; import { useAuthStore } from "@/stores/authStore";
import { isLinux, isWin } from "@/utils/platform"; import { isLinux, isWin } from "@/utils/platform";
import UpdateApp from "@/components/UpdateApp";
export default function DesktopApp() { export default function DesktopApp() {
const initializeListeners = useAppStore((state) => state.initializeListeners); const initializeListeners = useAppStore((state) => state.initializeListeners);
@@ -163,6 +164,8 @@ export default function DesktopApp() {
/> />
) : null} ) : null}
</div> </div>
<UpdateApp />
</div> </div>
); );
} }

View File

@@ -21,6 +21,9 @@ export interface IServer {
status: string; status: string;
}; };
assistantCount?: number; assistantCount?: number;
minimal_client_version?: {
number: number;
};
} }
export type IAppStore = { export type IAppStore = {

41
src/stores/updateStore.ts Normal file
View File

@@ -0,0 +1,41 @@
import { Update } from "@tauri-apps/plugin-updater";
import { create } from "zustand";
import { persist } from "zustand/middleware";
export type IUpdateStore = {
visible: boolean;
setVisible: (visible: boolean) => void;
skipVersion?: string;
setSkipVersion: (skipVersion?: string) => void;
isOptional: boolean;
setIsOptional: (isOptional: boolean) => void;
updateInfo?: Update;
setUpdateInfo: (updateInfo?: Update) => void;
};
export const useUpdateStore = create<IUpdateStore>()(
persist(
(set) => ({
visible: false,
setVisible: (visible: boolean) => {
return set({ visible });
},
setSkipVersion: (skipVersion?: string) => {
return set({ skipVersion });
},
isOptional: true,
setIsOptional: (isOptional: boolean) => {
return set({ isOptional });
},
setUpdateInfo: (updateInfo?: Update) => {
return set({ updateInfo });
},
}),
{
name: "update-store",
partialize: (state) => ({
skipVersion: state.skipVersion,
}),
}
)
);