diff --git a/.github/workflows/bridge.yml b/.github/workflows/bridge.yml
index b9285a87a..c94322102 100644
--- a/.github/workflows/bridge.yml
+++ b/.github/workflows/bridge.yml
@@ -6,8 +6,8 @@ on:
workflow_call:
env:
- FLUTTER_VERSION: "3.10.6"
- FLUTTER_RUST_BRIDGE_VERSION: "1.75.3"
+ FLUTTER_VERSION: "3.13.9"
+ FLUTTER_RUST_BRIDGE_VERSION: "1.80.1"
jobs:
generate_bridge:
diff --git a/.github/workflows/flutter-build.yml b/.github/workflows/flutter-build.yml
index 2aa6e564a..94a08fc37 100644
--- a/.github/workflows/flutter-build.yml
+++ b/.github/workflows/flutter-build.yml
@@ -13,8 +13,8 @@ on:
env:
CARGO_NDK_VERSION: "3.1.2"
LLVM_VERSION: "15.0.6"
- FLUTTER_VERSION: "3.10.6"
- FLUTTER_RUST_BRIDGE_VERSION: "1.75.3"
+ FLUTTER_VERSION: "3.13.9"
+ FLUTTER_RUST_BRIDGE_VERSION: "1.80.1"
# for arm64 linux
FLUTTER_ELINUX_VERSION: "3.10.6"
FLUTTER_ELINUX_COMMIT_ID: "410b3ca42f2cd0c485edf517a1666652bab442d4"
diff --git a/.github/workflows/history.yml b/.github/workflows/history.yml
index 4c23eaa66..c40641fcd 100644
--- a/.github/workflows/history.yml
+++ b/.github/workflows/history.yml
@@ -4,9 +4,9 @@ on: [workflow_dispatch]
env:
LLVM_VERSION: "10.0"
- FLUTTER_VERSION: "3.10.6"
+ FLUTTER_VERSION: "3.13.9"
TAG_NAME: "tmp"
- FLUTTER_RUST_BRIDGE_VERSION: "1.75.3"
+ FLUTTER_RUST_BRIDGE_VERSION: "1.80.1"
# vcpkg version: 2022.05.10
# for multiarch gcc compatibility
VCPKG_COMMIT_ID: "501db0f17ef6df184fcdbfbe0f87cde2313b6ab1"
diff --git a/Cargo.lock b/Cargo.lock
index 337a4a695..9a79c58e7 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -4,9 +4,9 @@ version = 3
[[package]]
name = "addr2line"
-version = "0.19.0"
+version = "0.21.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97"
+checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb"
dependencies = [
"gimli",
]
@@ -19,21 +19,20 @@ checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
[[package]]
name = "aes"
-version = "0.7.5"
+version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8"
+checksum = "ac1f845298e95f983ff1944b728ae08b8cebab80d684f0a832ed0fc74dfa27e2"
dependencies = [
"cfg-if 1.0.0",
"cipher",
"cpufeatures",
- "opaque-debug",
]
[[package]]
name = "ahash"
-version = "0.7.6"
+version = "0.7.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47"
+checksum = "5a824f2aa7e75a0c98c5a504fceb80649e9c35265d44525b5f94de4771a395cd"
dependencies = [
"getrandom",
"once_cell",
@@ -41,19 +40,31 @@ dependencies = [
]
[[package]]
-name = "aho-corasick"
-version = "1.0.1"
+name = "ahash"
+version = "0.8.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "67fc08ce920c31afb70f013dcce1bfc3a3195de6a228474e45e1f145b36f8d04"
+checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a"
+dependencies = [
+ "cfg-if 1.0.0",
+ "once_cell",
+ "version_check",
+ "zerocopy 0.7.18",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0"
dependencies = [
"memchr",
]
[[package]]
name = "allo-isolate"
-version = "0.1.14"
+version = "0.1.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8ed55848be9f41d44c79df6045b680a74a78bc579e0813f7f196cd7928e22fb1"
+checksum = "f56b7997817c178b853573e8bdfb6c3afe02810b43f17d766d6703560074b0c3"
dependencies = [
"anyhow",
"atomic",
@@ -77,13 +88,19 @@ dependencies = [
]
[[package]]
-name = "alsa"
-version = "0.7.0"
+name = "allocator-api2"
+version = "0.2.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8512c9117059663fb5606788fbca3619e2a91dac0e3fe516242eab1fa6be5e44"
+checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5"
+
+[[package]]
+name = "alsa"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2562ad8dcf0f789f65c6fdaad8a8a9708ed6b488e649da28c01656ad66b8b47"
dependencies = [
"alsa-sys",
- "bitflags",
+ "bitflags 1.3.2",
"libc",
"nix 0.24.3",
]
@@ -99,16 +116,22 @@ dependencies = [
]
[[package]]
-name = "android_log-sys"
-version = "0.3.0"
+name = "android-tzdata"
+version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "27f0fc03f560e1aebde41c2398b691cb98b5ea5996a6184a7a67bbbb77448969"
+checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
+
+[[package]]
+name = "android_log-sys"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ecc8056bf6ab9892dcd53216c83d1597487d7dacac16c8df6b877d127df9937"
[[package]]
name = "android_logger"
-version = "0.13.1"
+version = "0.13.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3fa490e751f3878eb9accb9f18988eca52c2337ce000a8bf31ef50d4c723ca9e"
+checksum = "c494134f746c14dc653a35a4ea5aca24ac368529da5370ecf41fe0341c35772f"
dependencies = [
"android_log-sys",
"env_logger 0.10.0",
@@ -136,30 +159,29 @@ dependencies = [
[[package]]
name = "anstream"
-version = "0.3.2"
+version = "0.6.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0ca84f3628370c59db74ee214b3263d58f9aadd9b4fe7e711fd87dc452b7f163"
+checksum = "2ab91ebe16eb252986481c5b62f6098f3b698a45e34b5b98200cf20dd2484a44"
dependencies = [
"anstyle",
"anstyle-parse",
"anstyle-query",
"anstyle-wincon",
"colorchoice",
- "is-terminal",
"utf8parse",
]
[[package]]
name = "anstyle"
-version = "1.0.0"
+version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "41ed9a86bf92ae6580e0a31281f65a1b1d867c0cc68d5346e2ae128dddfa6a7d"
+checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87"
[[package]]
name = "anstyle-parse"
-version = "0.2.0"
+version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e765fd216e48e067936442276d1d57399e37bce53c264d6fefbe298080cb57ee"
+checksum = "317b9a89c1868f5ea6ff1d9539a69f45dffc21ce321ac1fd1160dfa48c8e2140"
dependencies = [
"utf8parse",
]
@@ -175,9 +197,9 @@ dependencies = [
[[package]]
name = "anstyle-wincon"
-version = "1.0.1"
+version = "3.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "180abfa45703aebe0093f79badacc01b8fd4ea2e35118747e5811127f926e188"
+checksum = "f0699d10d2f4d628a98ee7b57b289abbc98ff3bad977cb3152709d4bf2330628"
dependencies = [
"anstyle",
"windows-sys 0.48.0",
@@ -185,9 +207,9 @@ dependencies = [
[[package]]
name = "anyhow"
-version = "1.0.71"
+version = "1.0.75"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8"
+checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6"
[[package]]
name = "apple-bindgen"
@@ -199,7 +221,7 @@ dependencies = [
"bindgen 0.63.0",
"derive_more",
"regex",
- "serde 1.0.163",
+ "serde 1.0.190",
"thiserror",
"toml 0.6.0",
]
@@ -211,8 +233,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a04f192a700686ee70008ff4e4eb76fe7d11814ab93b7ee9d48c36b9a9f0bd2a"
dependencies = [
"plist",
- "serde 1.0.163",
- "serde_json 1.0.96",
+ "serde 1.0.190",
+ "serde_json 1.0.107",
]
[[package]]
@@ -228,22 +250,21 @@ dependencies = [
[[package]]
name = "arboard"
-version = "3.2.0"
+version = "3.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d6041616acea41d67c4a984709ddab1587fd0b10efe5cc563fee954d2f011854"
+checksum = "ac57f2b058a76363e357c056e4f74f1945bf734d37b8b3ef49066c4787dde0fc"
dependencies = [
"clipboard-win",
- "core-graphics",
+ "core-graphics 0.22.3",
"image",
"log",
"objc",
"objc-foundation",
"objc_id",
- "once_cell",
"parking_lot",
"thiserror",
"winapi 0.3.9",
- "x11rb",
+ "x11rb 0.10.1",
]
[[package]]
@@ -252,31 +273,31 @@ version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7c48ccdbf6ca6b121e0f586cbc0e73ae440e56c67c30fa0873b4e110d9c26d2b"
dependencies = [
- "event-listener",
+ "event-listener 2.5.3",
"futures-core",
]
[[package]]
name = "async-channel"
-version = "1.8.0"
+version = "1.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cf46fee83e5ccffc220104713af3292ff9bc7c64c7de289f66dae8e38d826833"
+checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35"
dependencies = [
"concurrent-queue",
- "event-listener",
+ "event-listener 2.5.3",
"futures-core",
]
[[package]]
name = "async-executor"
-version = "1.5.1"
+version = "1.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6fa3dc5f2a8564f07759c008b9109dc0d39de92a88d5588b8a5036d286383afb"
+checksum = "4b0c4a4f319e45986f347ee47fef8bf5e81c9abc3f6f58dc2391439f30df65f0"
dependencies = [
"async-lock",
"async-task",
"concurrent-queue",
- "fastrand",
+ "fastrand 2.0.1",
"futures-lite",
"slab",
]
@@ -307,65 +328,82 @@ dependencies = [
"log",
"parking",
"polling",
- "rustix",
+ "rustix 0.37.27",
"slab",
- "socket2 0.4.9",
+ "socket2 0.4.10",
"waker-fn",
]
[[package]]
name = "async-lock"
-version = "2.7.0"
+version = "2.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fa24f727524730b077666307f2734b4a1a1c57acb79193127dcc8914d5242dd7"
+checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b"
dependencies = [
- "event-listener",
+ "event-listener 2.5.3",
]
[[package]]
name = "async-process"
-version = "1.7.0"
+version = "1.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7a9d28b1d97e08915212e2e45310d47854eafa69600756fc735fb788f75199c9"
+checksum = "ea6438ba0a08d81529c69b36700fa2f95837bfe3e776ab39cde9c14d9149da88"
dependencies = [
"async-io",
"async-lock",
- "autocfg 1.1.0",
+ "async-signal",
"blocking",
"cfg-if 1.0.0",
- "event-listener",
+ "event-listener 3.0.0",
"futures-lite",
- "rustix",
- "signal-hook",
+ "rustix 0.38.21",
"windows-sys 0.48.0",
]
[[package]]
name = "async-recursion"
-version = "1.0.4"
+version = "1.0.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0e97ce7de6cf12de5d7226c73f5ba9811622f4db3a5b91b55c53e987e5f91cba"
+checksum = "5fd55a5ba1179988837d24ab4c7cc8ed6efdeff578ede0416b4225a5fca35bd0"
dependencies = [
- "proc-macro2 1.0.63",
- "quote 1.0.27",
- "syn 2.0.15",
+ "proc-macro2 1.0.69",
+ "quote 1.0.33",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "async-signal"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2a5415b7abcdc9cd7d63d6badba5288b2ca017e3fbd4173b8f405449f1a2399"
+dependencies = [
+ "async-io",
+ "async-lock",
+ "atomic-waker",
+ "cfg-if 1.0.0",
+ "futures-core",
+ "futures-io",
+ "rustix 0.38.21",
+ "signal-hook-registry",
+ "slab",
+ "windows-sys 0.48.0",
]
[[package]]
name = "async-task"
-version = "4.4.0"
+version = "4.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ecc7ab41815b3c653ccd2978ec3255c81349336702dfdf62ee6f7069b12a3aae"
+checksum = "b4eb2cdb97421e01129ccb49169d8279ed21e829929144f4a22a6e54ac549ca1"
[[package]]
name = "async-trait"
-version = "0.1.68"
+version = "0.1.74"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842"
+checksum = "a66537f1bb974b254c98ed142ff995236e81b9d0fe4db0575f46612cb15eb0f9"
dependencies = [
- "proc-macro2 1.0.63",
- "quote 1.0.27",
- "syn 2.0.15",
+ "proc-macro2 1.0.69",
+ "quote 1.0.33",
+ "syn 2.0.38",
]
[[package]]
@@ -375,8 +413,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "39991bc421ddf72f70159011b323ff49b0f783cc676a7287c59453da2e2531cf"
dependencies = [
"atk-sys",
- "bitflags",
- "glib 0.16.7",
+ "bitflags 1.3.2",
+ "glib 0.16.9",
"libc",
]
@@ -389,23 +427,20 @@ dependencies = [
"glib-sys 0.16.3",
"gobject-sys 0.16.3",
"libc",
- "system-deps 6.1.0",
+ "system-deps 6.1.2",
]
[[package]]
name = "atomic"
-version = "0.5.1"
+version = "0.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b88d82667eca772c4aa12f0f1348b3ae643424c8876448f3f7bd5787032e234c"
-dependencies = [
- "autocfg 1.1.0",
-]
+checksum = "c59bdb34bc650a32731b31bd8f0829cc15d24a708ee31559e0bb34f2bc320cba"
[[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 = "atty"
@@ -435,24 +470,24 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
[[package]]
name = "backtrace"
-version = "0.3.67"
+version = "0.3.69"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "233d376d6d185f2a3093e58f283f60f880315b6c60075b01f36b3b85154564ca"
+checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837"
dependencies = [
"addr2line",
"cc",
"cfg-if 1.0.0",
"libc",
- "miniz_oxide 0.6.2",
+ "miniz_oxide",
"object",
"rustc-demangle",
]
[[package]]
name = "base64"
-version = "0.21.0"
+version = "0.21.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a"
+checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9"
[[package]]
name = "base64ct"
@@ -466,7 +501,7 @@ version = "0.59.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2bd2a9a458e8f4304c52c43ebb0cfbd520289f8379a52e329a38afda99bf8eb8"
dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
"cexpr",
"clang-sys",
"clap 2.34.0",
@@ -475,8 +510,8 @@ dependencies = [
"lazycell",
"log",
"peeking_take_while",
- "proc-macro2 1.0.63",
- "quote 1.0.27",
+ "proc-macro2 1.0.69",
+ "quote 1.0.33",
"regex",
"rustc-hash",
"shlex",
@@ -489,15 +524,15 @@ version = "0.63.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "36d860121800b2a9a94f9b5604b332d5cffb234ce17609ea479d723dbc9d3885"
dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
"cexpr",
"clang-sys",
"lazy_static",
"lazycell",
"log",
"peeking_take_while",
- "proc-macro2 1.0.63",
- "quote 1.0.27",
+ "proc-macro2 1.0.69",
+ "quote 1.0.33",
"regex",
"rustc-hash",
"shlex",
@@ -505,33 +540,13 @@ dependencies = [
"which",
]
-[[package]]
-name = "bindgen"
-version = "0.64.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c4243e6031260db77ede97ad86c27e501d646a27ab57b59a574f725d98ab1fb4"
-dependencies = [
- "bitflags",
- "cexpr",
- "clang-sys",
- "lazy_static",
- "lazycell",
- "peeking_take_while",
- "proc-macro2 1.0.63",
- "quote 1.0.27",
- "regex",
- "rustc-hash",
- "shlex",
- "syn 1.0.109",
-]
-
[[package]]
name = "bindgen"
version = "0.65.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cfdf7b466f9a4903edc73f95d6d2bcd5baf8ae620638762244d3f60143643cc5"
dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
"cexpr",
"clang-sys",
"lazy_static",
@@ -539,15 +554,35 @@ dependencies = [
"log",
"peeking_take_while",
"prettyplease",
- "proc-macro2 1.0.63",
- "quote 1.0.27",
+ "proc-macro2 1.0.69",
+ "quote 1.0.33",
"regex",
"rustc-hash",
"shlex",
- "syn 2.0.15",
+ "syn 2.0.38",
"which",
]
+[[package]]
+name = "bindgen"
+version = "0.68.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "726e4313eb6ec35d2730258ad4e15b547ee75d6afaa1361a922e78e59b7d8078"
+dependencies = [
+ "bitflags 2.4.1",
+ "cexpr",
+ "clang-sys",
+ "lazy_static",
+ "lazycell",
+ "peeking_take_while",
+ "proc-macro2 1.0.69",
+ "quote 1.0.33",
+ "regex",
+ "rustc-hash",
+ "shlex",
+ "syn 2.0.38",
+]
+
[[package]]
name = "bit_field"
version = "0.10.2"
@@ -560,6 +595,22 @@ version = "1.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+[[package]]
+name = "bitflags"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07"
+
+[[package]]
+name = "bitmask-enum"
+version = "2.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49fb8528abca6895a5ada33d62aedd538a5c33e77068256483b44a3230270163"
+dependencies = [
+ "quote 1.0.33",
+ "syn 2.0.38",
+]
+
[[package]]
name = "bitvec"
version = "1.0.1"
@@ -588,25 +639,45 @@ dependencies = [
]
[[package]]
-name = "blocking"
-version = "1.3.1"
+name = "block-sys"
+version = "0.1.0-beta.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "77231a1c8f801696fc0123ec6150ce92cffb8e164a02afb9c8ddee0e9b65ad65"
+checksum = "0fa55741ee90902547802152aaf3f8e5248aab7e21468089560d4c8840561146"
+dependencies = [
+ "objc-sys",
+]
+
+[[package]]
+name = "block2"
+version = "0.2.0-alpha.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8dd9e63c1744f755c2f60332b88de39d341e5e86239014ad839bd71c106dec42"
+dependencies = [
+ "block-sys",
+ "objc2-encode",
+]
+
+[[package]]
+name = "blocking"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c36a4d0d48574b3dd360b4b7d95cc651d2b6557b6402848a27d4b228a473e2a"
dependencies = [
"async-channel",
"async-lock",
"async-task",
- "atomic-waker",
- "fastrand",
+ "fastrand 2.0.1",
+ "futures-io",
"futures-lite",
- "log",
+ "piper",
+ "tracing",
]
[[package]]
name = "brotli"
-version = "3.3.4"
+version = "3.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a1a0b1dbcc8ae29329621f8d4f0d835787c1c38bb1401979b49d13b0b305ff68"
+checksum = "516074a47ef4bce09577a3b379392300159ce5b1ba2e501ff1c819950066100f"
dependencies = [
"alloc-no-stdlib",
"alloc-stdlib",
@@ -615,9 +686,9 @@ dependencies = [
[[package]]
name = "brotli-decompressor"
-version = "2.3.4"
+version = "2.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4b6561fd3f895a11e8f72af2cb7d22e08366bebc2b6b57f7744c4bda27034744"
+checksum = "4e2e4afe60d7dd600fdd3de8d0f08c2b7ec039712e3b6137ff98b7004e82de4f"
dependencies = [
"alloc-no-stdlib",
"alloc-stdlib",
@@ -631,29 +702,29 @@ checksum = "832133bbabbbaa9fbdba793456a2827627a7d2b8fb96032fa1e7666d7895832b"
[[package]]
name = "bumpalo"
-version = "3.12.2"
+version = "3.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3c6ed94e98ecff0c12dd1b04c15ec0d7d9458ca8fe806cea6f12954efe74c63b"
+checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec"
[[package]]
name = "bytemuck"
-version = "1.13.1"
+version = "1.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea"
+checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6"
[[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.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be"
+checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223"
dependencies = [
- "serde 1.0.163",
+ "serde 1.0.190",
]
[[package]]
@@ -677,15 +748,33 @@ dependencies = [
"pkg-config",
]
+[[package]]
+name = "cacao"
+version = "0.4.0-beta2"
+source = "git+https://github.com/clslaid/cacao?branch=feat/set-file-urls#05e1536b0b43aaae308ec72c0eed703e875b7b95"
+dependencies = [
+ "bitmask-enum",
+ "block2",
+ "core-foundation 0.9.3 (git+https://github.com/madsmtm/core-foundation-rs.git?rev=7d593d016175755e492a92ef89edca68ac3bd5cd)",
+ "core-graphics 0.23.1",
+ "dispatch",
+ "lazy_static",
+ "libc",
+ "objc2",
+ "os_info",
+ "percent-encoding",
+ "url",
+]
+
[[package]]
name = "cairo-rs"
version = "0.16.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f3125b15ec28b84c238f6f476c6034016a5f6cc0221cb514ca46c532139fc97d"
dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
"cairo-sys-rs",
- "glib 0.16.7",
+ "glib 0.16.9",
"libc",
"once_cell",
"thiserror",
@@ -699,66 +788,17 @@ checksum = "7c48f4af05fabdcfa9658178e1326efa061853f040ce7d72e33af6885196f421"
dependencies = [
"glib-sys 0.16.3",
"libc",
- "system-deps 6.1.0",
-]
-
-[[package]]
-name = "camino"
-version = "1.1.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c530edf18f37068ac2d977409ed5cd50d53d73bc653c7647b48eb78976ac9ae2"
-dependencies = [
- "serde 1.0.163",
-]
-
-[[package]]
-name = "cargo-platform"
-version = "0.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cbdb825da8a5df079a43676dbe042702f1707b1109f713a01420fbb4cc71fa27"
-dependencies = [
- "serde 1.0.163",
-]
-
-[[package]]
-name = "cargo_metadata"
-version = "0.14.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4acbb09d9ee8e23699b9634375c72795d095bf268439da88562cf9b501f181fa"
-dependencies = [
- "camino",
- "cargo-platform",
- "semver",
- "serde 1.0.163",
- "serde_json 1.0.96",
-]
-
-[[package]]
-name = "cbindgen"
-version = "0.24.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a6358dedf60f4d9b8db43ad187391afe959746101346fe51bb978126bec61dfb"
-dependencies = [
- "clap 3.2.25",
- "heck 0.4.1",
- "indexmap",
- "log",
- "proc-macro2 1.0.63",
- "quote 1.0.27",
- "serde 1.0.163",
- "serde_json 1.0.96",
- "syn 1.0.109",
- "tempfile",
- "toml 0.5.11",
+ "system-deps 6.1.2",
]
[[package]]
name = "cc"
-version = "1.0.79"
+version = "1.0.83"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
+checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
dependencies = [
"jobserver",
+ "libc",
]
[[package]]
@@ -778,9 +818,9 @@ dependencies = [
[[package]]
name = "cfg-expr"
-version = "0.15.1"
+version = "0.15.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c8790cf1286da485c72cf5fc7aeba308438800036ec67d89425924c4807268c9"
+checksum = "03915af431787e6ffdcc74c645077518c6b6e01f80b761e0fbbfa288536311b3"
dependencies = [
"smallvec",
"target-lexicon",
@@ -800,39 +840,39 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
[[package]]
name = "chrono"
-version = "0.4.24"
+version = "0.4.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b"
+checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38"
dependencies = [
+ "android-tzdata",
"iana-time-zone",
"js-sys",
- "num-integer",
- "num-traits 0.2.15",
- "time 0.1.45",
+ "num-traits 0.2.17",
"wasm-bindgen",
- "winapi 0.3.9",
+ "windows-targets 0.48.5",
]
[[package]]
name = "cidr-utils"
-version = "0.5.10"
+version = "0.5.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fdfa36f04861d39453affe1cf084ce2d6554021a84eb6f31ebdeafb6fb92a01c"
+checksum = "2315f7119b7146d6a883de6acd63ddf96071b5f79d9d98d2adaa84d749f6abf1"
dependencies = [
"debug-helper",
"num-bigint",
- "num-traits 0.2.15",
+ "num-traits 0.2.17",
"once_cell",
"regex",
]
[[package]]
name = "cipher"
-version = "0.3.0"
+version = "0.4.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7"
+checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad"
dependencies = [
- "generic-array",
+ "crypto-common",
+ "inout",
]
[[package]]
@@ -854,89 +894,61 @@ checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c"
dependencies = [
"ansi_term",
"atty",
- "bitflags",
+ "bitflags 1.3.2",
"strsim 0.8.0",
- "textwrap 0.11.0",
+ "textwrap",
"unicode-width",
"vec_map",
]
[[package]]
name = "clap"
-version = "3.2.25"
+version = "4.4.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4ea181bf566f71cb9a5d17a59e1871af638180a18fb0035c92ae62b705207123"
-dependencies = [
- "atty",
- "bitflags",
- "clap_lex 0.2.4",
- "indexmap",
- "strsim 0.10.0",
- "termcolor",
- "textwrap 0.16.0",
-]
-
-[[package]]
-name = "clap"
-version = "4.2.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "34d21f9bf1b425d2968943631ec91202fe5e837264063503708b83013f8fc938"
+checksum = "ac495e00dcec98c83465d5ad66c5c4fabd652fd6686e7c6269b117e729a6f17b"
dependencies = [
"clap_builder",
- "clap_derive",
- "once_cell",
]
[[package]]
name = "clap_builder"
-version = "4.2.7"
+version = "4.4.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "914c8c79fb560f238ef6429439a30023c862f7a28e688c58f7203f12b29970bd"
+checksum = "c77ed9a32a62e6ca27175d00d29d05ca32e396ea1eb5fb01d8256b669cec7663"
dependencies = [
"anstream",
"anstyle",
- "bitflags",
- "clap_lex 0.4.1",
+ "clap_lex",
"strsim 0.10.0",
]
-[[package]]
-name = "clap_derive"
-version = "4.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3f9644cd56d6b87dbe899ef8b053e331c0637664e9e21a33dfcdc36093f5c5c4"
-dependencies = [
- "heck 0.4.1",
- "proc-macro2 1.0.63",
- "quote 1.0.27",
- "syn 2.0.15",
-]
-
[[package]]
name = "clap_lex"
-version = "0.2.4"
+version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5"
-dependencies = [
- "os_str_bytes",
-]
-
-[[package]]
-name = "clap_lex"
-version = "0.4.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8a2dd5a6fe8c6e3502f568a6353e5273bbb15193ad9a89e457b9970798efbea1"
+checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1"
[[package]]
name = "clipboard"
version = "0.1.0"
dependencies = [
+ "cacao",
"cc",
+ "dashmap",
+ "fuser",
"hbb_common",
"lazy_static",
- "serde 1.0.163",
+ "libc",
+ "once_cell",
+ "parking_lot",
+ "percent-encoding",
+ "rand 0.8.5",
+ "serde 1.0.190",
"serde_derive",
"thiserror",
+ "utf16string",
+ "x11-clipboard",
+ "x11rb 0.12.0",
]
[[package]]
@@ -956,7 +968,7 @@ version = "0.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f"
dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
]
[[package]]
@@ -974,41 +986,30 @@ version = "0.24.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f425db7937052c684daec3bd6375c8abe2d146dca4b8b143d6db777c39138f3a"
dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
"block",
"cocoa-foundation",
- "core-foundation",
- "core-graphics",
- "foreign-types",
+ "core-foundation 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "core-graphics 0.22.3",
+ "foreign-types 0.3.2",
"libc",
"objc",
]
[[package]]
name = "cocoa-foundation"
-version = "0.1.1"
+version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "931d3837c286f56e3c58423ce4eba12d08db2374461a785c86f672b08b5650d6"
+checksum = "8c6234cbb2e4c785b456c0644748b1ac416dd045799740356f8363dfe00c93f7"
dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
"block",
- "core-foundation",
- "core-graphics-types",
- "foreign-types",
+ "core-foundation 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "core-graphics-types 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
"libc",
"objc",
]
-[[package]]
-name = "codespan-reporting"
-version = "0.11.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e"
-dependencies = [
- "termcolor",
- "unicode-width",
-]
-
[[package]]
name = "color_quant"
version = "1.1.0"
@@ -1021,17 +1022,6 @@ version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
-[[package]]
-name = "colored"
-version = "1.9.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f4ffc801dacf156c5854b9df4f425a626539c3a6ef7893cc0c5084a23f0b6c59"
-dependencies = [
- "atty",
- "lazy_static",
- "winapi 0.3.9",
-]
-
[[package]]
name = "combine"
version = "4.6.6"
@@ -1044,9 +1034,9 @@ dependencies = [
[[package]]
name = "concurrent-queue"
-version = "2.2.0"
+version = "2.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "62ec6771ecfa0762d24683ee5a32ad78487a3d3afdc0fb8cae19d2c5deb50b7c"
+checksum = "f057a694a54f12365049b0958a1685bb52d567f5593b355fbf685838e873d400"
dependencies = [
"crossbeam-utils",
]
@@ -1057,7 +1047,7 @@ version = "0.4.0-2"
source = "git+https://github.com/open-trade/confy#7855cd3c32b1a60b44e5076ee8f6b4131da10350"
dependencies = [
"directories-next",
- "serde 1.0.163",
+ "serde 1.0.190",
"thiserror",
"toml 0.5.11",
]
@@ -1080,21 +1070,21 @@ checksum = "fbdcdcb6d86f71c5e97409ad45898af11cbc995b4ee8112d59095a28d376c935"
[[package]]
name = "const_format"
-version = "0.2.31"
+version = "0.2.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c990efc7a285731f9a4378d81aff2f0e85a2c8781a05ef0f8baa8dac54d0ff48"
+checksum = "e3a214c7af3d04997541b18d432afaff4c455e79e2029079647e72fc2bd27673"
dependencies = [
"const_format_proc_macros",
]
[[package]]
name = "const_format_proc_macros"
-version = "0.2.31"
+version = "0.2.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e026b6ce194a874cb9cf32cd5772d1ef9767cc8fcb5765948d74f37a9d8b2bf6"
+checksum = "c7f6ff08fd20f4f299298a28e2dfa8a8ba1036e6cd2460ac1de7b425d76f2500"
dependencies = [
- "proc-macro2 1.0.63",
- "quote 1.0.27",
+ "proc-macro2 1.0.69",
+ "quote 1.0.33",
"unicode-xid 0.2.4",
]
@@ -1110,12 +1100,6 @@ version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e"
-[[package]]
-name = "convert_case"
-version = "0.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fb4a24b1aaf0fd0ce8b45161144d6f42cd91677fd5940fd431183eb023b3a2b8"
-
[[package]]
name = "core-foundation"
version = "0.9.3"
@@ -1127,10 +1111,13 @@ dependencies = [
]
[[package]]
-name = "core-foundation-sys"
-version = "0.6.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e7ca8a5221364ef15ce201e8ed2f609fc312682a8f4e0e3d4aa5879764e0fa3b"
+name = "core-foundation"
+version = "0.9.3"
+source = "git+https://github.com/madsmtm/core-foundation-rs.git?rev=7d593d016175755e492a92ef89edca68ac3bd5cd#7d593d016175755e492a92ef89edca68ac3bd5cd"
+dependencies = [
+ "core-foundation-sys 0.8.6",
+ "libc",
+]
[[package]]
name = "core-foundation-sys"
@@ -1138,49 +1125,80 @@ version = "0.8.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.6"
+source = "git+https://github.com/madsmtm/core-foundation-rs.git?rev=7d593d016175755e492a92ef89edca68ac3bd5cd#7d593d016175755e492a92ef89edca68ac3bd5cd"
+dependencies = [
+ "objc2-encode",
+]
+
[[package]]
name = "core-graphics"
version = "0.22.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb"
dependencies = [
- "bitflags",
- "core-foundation",
- "core-graphics-types",
- "foreign-types",
+ "bitflags 1.3.2",
+ "core-foundation 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "core-graphics-types 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "foreign-types 0.3.2",
+ "libc",
+]
+
+[[package]]
+name = "core-graphics"
+version = "0.23.1"
+source = "git+https://github.com/madsmtm/core-foundation-rs.git?rev=7d593d016175755e492a92ef89edca68ac3bd5cd#7d593d016175755e492a92ef89edca68ac3bd5cd"
+dependencies = [
+ "bitflags 1.3.2",
+ "core-foundation 0.9.3 (git+https://github.com/madsmtm/core-foundation-rs.git?rev=7d593d016175755e492a92ef89edca68ac3bd5cd)",
+ "core-graphics-types 0.1.2 (git+https://github.com/madsmtm/core-foundation-rs.git?rev=7d593d016175755e492a92ef89edca68ac3bd5cd)",
+ "foreign-types 0.5.0",
+ "libc",
+ "objc2-encode",
+]
+
+[[package]]
+name = "core-graphics-types"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2bb142d41022986c1d8ff29103a1411c8a3dfad3552f87a4f8dc50d61d4f4e33"
+dependencies = [
+ "bitflags 1.3.2",
+ "core-foundation 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)",
"libc",
]
[[package]]
name = "core-graphics-types"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3a68b68b3446082644c91ac778bf50cd4104bfb002b5a6a7c44cca5a2c70788b"
+version = "0.1.2"
+source = "git+https://github.com/madsmtm/core-foundation-rs.git?rev=7d593d016175755e492a92ef89edca68ac3bd5cd#7d593d016175755e492a92ef89edca68ac3bd5cd"
dependencies = [
- "bitflags",
- "core-foundation",
- "foreign-types",
+ "bitflags 1.3.2",
+ "core-foundation 0.9.3 (git+https://github.com/madsmtm/core-foundation-rs.git?rev=7d593d016175755e492a92ef89edca68ac3bd5cd)",
"libc",
+ "objc2-encode",
]
[[package]]
name = "coreaudio-rs"
-version = "0.11.2"
+version = "0.11.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cb17e2d1795b1996419648915df94bc7103c28f7b48062d7acf4652fc371b2ff"
+checksum = "321077172d79c662f64f5071a03120748d5bb652f5231570141be24cfcd2bace"
dependencies = [
- "bitflags",
- "core-foundation-sys 0.6.2",
+ "bitflags 1.3.2",
+ "core-foundation-sys 0.8.4",
"coreaudio-sys",
]
[[package]]
name = "coreaudio-sys"
-version = "0.2.12"
+version = "0.2.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f034b2258e6c4ade2f73bf87b21047567fb913ee9550837c2316d139b0262b24"
+checksum = "d8478e5bdad14dce236b9898ea002eabfa87cbe14f0aa538dbe3b6a4bec4332d"
dependencies = [
- "bindgen 0.64.0",
+ "bindgen 0.68.1",
]
[[package]]
@@ -1210,9 +1228,9 @@ dependencies = [
[[package]]
name = "cpufeatures"
-version = "0.2.7"
+version = "0.2.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3e4c1eaa2012c47becbbad2ab175484c2a84d1185b566fb2cc5b8707343dfe58"
+checksum = "ce420fe07aecd3e67c5f910618fe65e94158f6dcc0adf44e00d69ce2bdfe0fd0"
dependencies = [
"libc",
]
@@ -1249,14 +1267,14 @@ dependencies = [
[[package]]
name = "crossbeam-epoch"
-version = "0.9.14"
+version = "0.9.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "46bd5f3f85273295a9d14aedfb86f6aadbff6d8f5295c4a9edb08e819dcf5695"
+checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7"
dependencies = [
"autocfg 1.1.0",
"cfg-if 1.0.0",
"crossbeam-utils",
- "memoffset 0.8.0",
+ "memoffset 0.9.0",
"scopeguard",
]
@@ -1272,9 +1290,9 @@ dependencies = [
[[package]]
name = "crossbeam-utils"
-version = "0.8.15"
+version = "0.8.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b"
+checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294"
dependencies = [
"cfg-if 1.0.0",
]
@@ -1297,56 +1315,12 @@ dependencies = [
[[package]]
name = "ctrlc"
-version = "3.2.5"
+version = "3.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bbcf33c2a618cbe41ee43ae6e9f2e48368cd9f9db2896f10167d8d762679f639"
+checksum = "82e95fbd621905b854affdc67943b043a0fbb6ed7385fd5a25650d19a8a6cfdf"
dependencies = [
- "nix 0.26.2",
- "windows-sys 0.45.0",
-]
-
-[[package]]
-name = "cxx"
-version = "1.0.94"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f61f1b6389c3fe1c316bf8a4dccc90a38208354b330925bce1f74a6c4756eb93"
-dependencies = [
- "cc",
- "cxxbridge-flags",
- "cxxbridge-macro",
- "link-cplusplus",
-]
-
-[[package]]
-name = "cxx-build"
-version = "1.0.94"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "12cee708e8962df2aeb38f594aae5d827c022b6460ac71a7a3e2c3c2aae5a07b"
-dependencies = [
- "cc",
- "codespan-reporting",
- "once_cell",
- "proc-macro2 1.0.63",
- "quote 1.0.27",
- "scratch",
- "syn 2.0.15",
-]
-
-[[package]]
-name = "cxxbridge-flags"
-version = "1.0.94"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7944172ae7e4068c533afbb984114a56c46e9ccddda550499caa222902c7f7bb"
-
-[[package]]
-name = "cxxbridge-macro"
-version = "1.0.94"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2345488264226bf682893e25de0769f3360aac9957980ec49361b083ddaa5bc5"
-dependencies = [
- "proc-macro2 1.0.63",
- "quote 1.0.27",
- "syn 2.0.15",
+ "nix 0.27.1",
+ "windows-sys 0.48.0",
]
[[package]]
@@ -1375,6 +1349,19 @@ dependencies = [
"cc",
]
+[[package]]
+name = "dashmap"
+version = "5.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856"
+dependencies = [
+ "cfg-if 1.0.0",
+ "hashbrown 0.14.2",
+ "lock_api",
+ "once_cell",
+ "parking_lot_core",
+]
+
[[package]]
name = "dasp"
version = "0.11.0"
@@ -1544,14 +1531,12 @@ dependencies = [
]
[[package]]
-name = "delegate"
-version = "0.8.0"
+name = "deranged"
+version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "082a24a9967533dc5d743c602157637116fc1b52806d694a5a45e6f32567fcdd"
+checksum = "0f32d04922c60427da6f9fef14d042d9edddef64cb9d4ce0d64d0685fbeb1fd3"
dependencies = [
- "proc-macro2 1.0.63",
- "quote 1.0.27",
- "syn 1.0.109",
+ "powerfmt",
]
[[package]]
@@ -1560,8 +1545,8 @@ version = "2.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b"
dependencies = [
- "proc-macro2 1.0.63",
- "quote 1.0.27",
+ "proc-macro2 1.0.69",
+ "quote 1.0.33",
"syn 1.0.109",
]
@@ -1571,9 +1556,9 @@ version = "0.99.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321"
dependencies = [
- "convert_case 0.4.0",
- "proc-macro2 1.0.63",
- "quote 1.0.27",
+ "convert_case",
+ "proc-macro2 1.0.69",
+ "quote 1.0.33",
"rustc_version",
"syn 1.0.109",
]
@@ -1586,9 +1571,9 @@ checksum = "21d8ad60dd5b13a4ee6bd8fa2d5d88965c597c67bce32b5fc49c94f55cb50810"
[[package]]
name = "digest"
-version = "0.10.6"
+version = "0.10.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f"
+checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
dependencies = [
"block-buffer",
"crypto-common",
@@ -1713,8 +1698,8 @@ version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3a09ac8bb8c16a282264c379dffba707b9c998afc7506009137f3c6136888078"
dependencies = [
- "proc-macro2 1.0.63",
- "quote 1.0.27",
+ "proc-macro2 1.0.69",
+ "quote 1.0.33",
"syn 1.0.109",
]
@@ -1743,7 +1728,7 @@ checksum = "7f3f119846c823f9eafcf953a8f6ffb6ed69bf6240883261a7f13b634579a51f"
dependencies = [
"lazy_static",
"regex",
- "serde 1.0.163",
+ "serde 1.0.190",
"strsim 0.10.0",
]
@@ -1760,7 +1745,7 @@ dependencies = [
"cc",
"hbb_common",
"lazy_static",
- "serde 1.0.163",
+ "serde 1.0.190",
"serde_derive",
"thiserror",
]
@@ -1776,28 +1761,28 @@ dependencies = [
[[package]]
name = "either"
-version = "1.8.1"
+version = "1.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
+checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
[[package]]
name = "embed-resource"
-version = "2.1.1"
+version = "2.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "80663502655af01a2902dff3f06869330782267924bf1788410b74edcd93770a"
+checksum = "f54cc3e827ee1c3812239a9a41dede7b4d7d5d5464faa32d71bd7cba28ce2cb2"
dependencies = [
"cc",
"rustc_version",
- "toml 0.7.3",
+ "toml 0.8.6",
"vswhom",
- "winreg 0.11.0",
+ "winreg 0.51.0",
]
[[package]]
name = "encoding_rs"
-version = "0.8.32"
+version = "0.8.33"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394"
+checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1"
dependencies = [
"cfg-if 1.0.0",
]
@@ -1806,13 +1791,13 @@ dependencies = [
name = "enigo"
version = "0.0.14"
dependencies = [
- "core-graphics",
+ "core-graphics 0.22.3",
"hbb_common",
"log",
"objc",
"pkg-config",
"rdev 0.5.0-2 (git+https://github.com/fufesou/rdev)",
- "serde 1.0.163",
+ "serde 1.0.190",
"serde_derive",
"tfc",
"unicode-segmentation",
@@ -1828,77 +1813,45 @@ dependencies = [
"thiserror",
]
-[[package]]
-name = "enum-iterator"
-version = "1.4.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7add3873b5dd076766ee79c8e406ad1a472c385476b9e38849f8eec24f1be689"
-dependencies = [
- "enum-iterator-derive",
-]
-
-[[package]]
-name = "enum-iterator-derive"
-version = "1.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eecf8589574ce9b895052fa12d69af7a233f99e6107f5cb8dd1044f2a17bfdcb"
-dependencies = [
- "proc-macro2 1.0.63",
- "quote 1.0.27",
- "syn 2.0.15",
-]
-
[[package]]
name = "enum-map"
-version = "2.5.0"
+version = "2.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "988f0d17a0fa38291e5f41f71ea8d46a5d5497b9054d5a759fae2cbb819f2356"
+checksum = "53337c2dbf26a3c31eccc73a37b10c1614e8d4ae99b6a50d553e8936423c1f16"
dependencies = [
"enum-map-derive",
]
[[package]]
name = "enum-map-derive"
-version = "0.11.0"
+version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2a4da76b3b6116d758c7ba93f7ec6a35d2e2cf24feda76c6e38a375f4d5c59f2"
+checksum = "04d0b288e3bb1d861c4403c1774a6f7a798781dfc519b3647df2a3dd4ae95f25"
dependencies = [
- "proc-macro2 1.0.63",
- "quote 1.0.27",
- "syn 1.0.109",
-]
-
-[[package]]
-name = "enum_dispatch"
-version = "0.3.11"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "11f36e95862220b211a6e2aa5eca09b4fa391b13cd52ceb8035a24bf65a79de2"
-dependencies = [
- "once_cell",
- "proc-macro2 1.0.63",
- "quote 1.0.27",
- "syn 1.0.109",
+ "proc-macro2 1.0.69",
+ "quote 1.0.33",
+ "syn 2.0.38",
]
[[package]]
name = "enumflags2"
-version = "0.7.7"
+version = "0.7.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c041f5090df68b32bcd905365fd51769c8b9d553fe87fde0b683534f10c01bd2"
+checksum = "5998b4f30320c9d93aed72f63af821bfdac50465b75428fce77b48ec482c3939"
dependencies = [
"enumflags2_derive",
- "serde 1.0.163",
+ "serde 1.0.190",
]
[[package]]
name = "enumflags2_derive"
-version = "0.7.7"
+version = "0.7.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5e9a1f9f7d83e59740248a6e14ecf93929ade55027844dfcea78beafccc15745"
+checksum = "f95e2801cd355d4a1a3e3953ce6ee5ae9603a5c833455343a8bfe3f44d418246"
dependencies = [
- "proc-macro2 1.0.63",
- "quote 1.0.27",
- "syn 2.0.15",
+ "proc-macro2 1.0.69",
+ "quote 1.0.33",
+ "syn 2.0.38",
]
[[package]]
@@ -1929,35 +1882,30 @@ dependencies = [
[[package]]
name = "epoll"
-version = "4.3.1"
+version = "4.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "20df693c700404f7e19d4d6fae6b15215d2913c27955d2b9d6f2c0f537511cd0"
+checksum = "74351c3392ea1ff6cd2628e0042d268ac2371cb613252ff383b6dfa50d22fa79"
dependencies = [
- "bitflags",
+ "bitflags 2.4.1",
"libc",
]
+[[package]]
+name = "equivalent"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
+
[[package]]
name = "errno"
-version = "0.3.1"
+version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a"
+checksum = "ac3e13f66a2f95e32a39eaa81f6b95d42878ca0e1db0c7543723dfe12557e860"
dependencies = [
- "errno-dragonfly",
"libc",
"windows-sys 0.48.0",
]
-[[package]]
-name = "errno-dragonfly"
-version = "0.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
-dependencies = [
- "cc",
- "libc",
-]
-
[[package]]
name = "error-code"
version = "2.3.1"
@@ -1985,16 +1933,27 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0"
[[package]]
-name = "exr"
-version = "1.6.3"
+name = "event-listener"
+version = "3.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bdd2162b720141a91a054640662d3edce3d50a944a50ffca5313cd951abb35b4"
+checksum = "29e56284f00d94c1bc7fd3c77027b4623c88c1f53d8d2394c6199f2921dea325"
+dependencies = [
+ "concurrent-queue",
+ "parking",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "exr"
+version = "1.71.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "832a761f35ab3e6664babfbdc6cef35a4860e816ec3916dcfd0882954e98a8a8"
dependencies = [
"bit_field",
"flume",
"half",
"lebe",
- "miniz_oxide 0.6.2",
+ "miniz_oxide",
"rayon-core",
"smallvec",
"zune-inflate",
@@ -2009,6 +1968,12 @@ dependencies = [
"instant",
]
+[[package]]
+name = "fastrand"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5"
+
[[package]]
name = "fdeflate"
version = "0.3.0"
@@ -2018,54 +1983,43 @@ dependencies = [
"simd-adler32",
]
-[[package]]
-name = "fern"
-version = "0.6.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d9f0c14694cbd524c8720dd69b0e3179344f04ebb5f90f2e4a440c6ea3b2f1ee"
-dependencies = [
- "chrono",
- "colored",
- "log",
-]
-
[[package]]
name = "field-offset"
-version = "0.3.5"
+version = "0.3.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a3cf3a800ff6e860c863ca6d4b16fd999db8b752819c1606884047b73e468535"
+checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f"
dependencies = [
- "memoffset 0.8.0",
+ "memoffset 0.9.0",
"rustc_version",
]
[[package]]
name = "filetime"
-version = "0.2.21"
+version = "0.2.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5cbc844cecaee9d4443931972e1289c8ff485cb4cc2767cb03ca139ed6885153"
+checksum = "d4029edd3e734da6fe05b6cd7bd2960760a616bd2ddd0d59a0124746d6272af0"
dependencies = [
"cfg-if 1.0.0",
"libc",
- "redox_syscall 0.2.16",
+ "redox_syscall 0.3.5",
"windows-sys 0.48.0",
]
[[package]]
name = "flate2"
-version = "1.0.26"
+version = "1.0.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743"
+checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e"
dependencies = [
"crc32fast",
- "miniz_oxide 0.7.1",
+ "miniz_oxide",
]
[[package]]
name = "flexi_logger"
-version = "0.25.4"
+version = "0.25.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "611de758a8869ffffa7524aafdb48658c64dae95cdce49654d68a8442e500d89"
+checksum = "84075a94fd76ea9b7a0d2c257444ae30356e58fdac6cd0fe68af33f5279981ae"
dependencies = [
"chrono",
"crossbeam-channel",
@@ -2081,22 +2035,18 @@ dependencies = [
[[package]]
name = "flume"
-version = "0.10.14"
+version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1657b4441c3403d9f7b3409e47575237dac27b1b5726df654a6ecbf92f0f7577"
+checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181"
dependencies = [
- "futures-core",
- "futures-sink",
- "nanorand",
- "pin-project",
"spin 0.9.8",
]
[[package]]
name = "flutter_rust_bridge"
-version = "1.75.3"
+version = "1.80.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "907f6624c3c6a5a1421b1c1eb9c2881104607730d5f67ce7ae50051efa7a2cf3"
+checksum = "fd0305ebc9f097d9826530a55fc2acd63222e912c663f7adce3ab641ecc0f346"
dependencies = [
"allo-isolate",
"anyhow",
@@ -2118,44 +2068,11 @@ dependencies = [
"web-sys",
]
-[[package]]
-name = "flutter_rust_bridge_codegen"
-version = "1.75.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "49fdb2728cabeb86d1271ed4398ee1518b4a3d9f659756cf5021e5c5a91e3f25"
-dependencies = [
- "anyhow",
- "atty",
- "cargo_metadata",
- "cbindgen",
- "chrono",
- "clap 4.2.7",
- "convert_case 0.5.0",
- "delegate",
- "enum-iterator",
- "enum_dispatch",
- "fern",
- "itertools 0.10.5",
- "lazy_static",
- "log",
- "pathdiff",
- "quote 1.0.27",
- "regex",
- "serde 1.0.163",
- "serde_yaml",
- "strum_macros 0.24.3",
- "syn 1.0.109",
- "tempfile",
- "thiserror",
- "toml 0.5.11",
- "topological-sort",
-]
-
[[package]]
name = "flutter_rust_bridge_macros"
-version = "1.75.3"
+version = "1.82.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "de66560e226cb4a5da7ab042a0872c0be4e165288f5bcde809a08f3f5ca22962"
+checksum = "d1ab3d175f0a09c1adb55fd98d7b6460b00af72c4e889b9eec2c5aee88273996"
[[package]]
name = "fnv"
@@ -2178,7 +2095,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 1.0.69",
+ "quote 1.0.33",
+ "syn 2.0.38",
]
[[package]]
@@ -2188,10 +2126,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
[[package]]
-name = "form_urlencoded"
-version = "1.1.0"
+name = "foreign-types-shared"
+version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8"
+checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652"
dependencies = [
"percent-encoding",
]
@@ -2222,10 +2166,25 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c"
[[package]]
-name = "futures"
-version = "0.3.28"
+name = "fuser"
+version = "0.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40"
+checksum = "21370f84640642c8ea36dfb2a6bfc4c55941f476fcf431f6fef25a5ddcf0169b"
+dependencies = [
+ "libc",
+ "log",
+ "memchr",
+ "page_size",
+ "pkg-config",
+ "smallvec",
+ "zerocopy 0.6.5",
+]
+
+[[package]]
+name = "futures"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da0290714b38af9b4a7b094b8a37086d1b4e61f2df9122c3cad2577669145335"
dependencies = [
"futures-channel",
"futures-core",
@@ -2238,9 +2197,9 @@ dependencies = [
[[package]]
name = "futures-channel"
-version = "0.3.28"
+version = "0.3.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2"
+checksum = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb"
dependencies = [
"futures-core",
"futures-sink",
@@ -2248,15 +2207,15 @@ dependencies = [
[[package]]
name = "futures-core"
-version = "0.3.28"
+version = "0.3.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c"
+checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c"
[[package]]
name = "futures-executor"
-version = "0.3.28"
+version = "0.3.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0"
+checksum = "0f4fb8693db0cf099eadcca0efe2a5a22e4550f98ed16aba6c48700da29597bc"
dependencies = [
"futures-core",
"futures-task",
@@ -2265,9 +2224,9 @@ dependencies = [
[[package]]
name = "futures-io"
-version = "0.3.28"
+version = "0.3.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964"
+checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa"
[[package]]
name = "futures-lite"
@@ -2275,7 +2234,7 @@ version = "1.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce"
dependencies = [
- "fastrand",
+ "fastrand 1.9.0",
"futures-core",
"futures-io",
"memchr",
@@ -2286,32 +2245,32 @@ dependencies = [
[[package]]
name = "futures-macro"
-version = "0.3.28"
+version = "0.3.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
+checksum = "53b153fd91e4b0147f4aced87be237c98248656bb01050b96bf3ee89220a8ddb"
dependencies = [
- "proc-macro2 1.0.63",
- "quote 1.0.27",
- "syn 2.0.15",
+ "proc-macro2 1.0.69",
+ "quote 1.0.33",
+ "syn 2.0.38",
]
[[package]]
name = "futures-sink"
-version = "0.3.28"
+version = "0.3.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e"
+checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817"
[[package]]
name = "futures-task"
-version = "0.3.28"
+version = "0.3.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65"
+checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2"
[[package]]
name = "futures-util"
-version = "0.3.28"
+version = "0.3.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
+checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104"
dependencies = [
"futures-channel",
"futures-core",
@@ -2331,12 +2290,12 @@ version = "0.16.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aa9cb33da481c6c040404a11f8212d193889e9b435db2c14fd86987f630d3ce1"
dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
"cairo-rs",
"gdk-pixbuf",
"gdk-sys",
"gio",
- "glib 0.16.7",
+ "glib 0.16.9",
"libc",
"pango",
]
@@ -2347,10 +2306,10 @@ version = "0.16.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c3578c60dee9d029ad86593ed88cb40f35c1b83360e12498d055022385dd9a05"
dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
"gdk-pixbuf-sys",
"gio",
- "glib 0.16.7",
+ "glib 0.16.9",
"libc",
]
@@ -2364,7 +2323,7 @@ dependencies = [
"glib-sys 0.16.3",
"gobject-sys 0.16.3",
"libc",
- "system-deps 6.1.0",
+ "system-deps 6.1.2",
]
[[package]]
@@ -2381,7 +2340,7 @@ dependencies = [
"libc",
"pango-sys",
"pkg-config",
- "system-deps 6.1.0",
+ "system-deps 6.1.2",
]
[[package]]
@@ -2395,7 +2354,7 @@ dependencies = [
"gobject-sys 0.16.3",
"libc",
"pkg-config",
- "system-deps 6.1.0",
+ "system-deps 6.1.2",
]
[[package]]
@@ -2407,7 +2366,7 @@ dependencies = [
"gdk-sys",
"glib-sys 0.16.3",
"libc",
- "system-deps 6.1.0",
+ "system-deps 6.1.2",
"x11 2.21.0",
]
@@ -2432,16 +2391,24 @@ dependencies = [
]
[[package]]
-name = "getrandom"
-version = "0.2.9"
+name = "gethostname"
+version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4"
+checksum = "bb65d4ba3173c56a500b555b532f72c42e8d1fe64962b518897f8959fae2c177"
+dependencies = [
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
dependencies = [
"cfg-if 1.0.0",
- "js-sys",
"libc",
"wasi 0.11.0+wasi-snapshot-preview1",
- "wasm-bindgen",
]
[[package]]
@@ -2456,9 +2423,9 @@ dependencies = [
[[package]]
name = "gimli"
-version = "0.27.2"
+version = "0.28.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ad0a93d233ebf96623465aad4046a8d3aa4da22d4f4beba5388838c8a434bbb4"
+checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0"
[[package]]
name = "gio"
@@ -2466,13 +2433,13 @@ version = "0.16.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2a1c84b4534a290a29160ef5c6eff2a9c95833111472e824fc5cb78b513dd092"
dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
"futures-channel",
"futures-core",
"futures-io",
"futures-util",
"gio-sys",
- "glib 0.16.7",
+ "glib 0.16.9",
"libc",
"once_cell",
"pin-project-lite",
@@ -2489,7 +2456,7 @@ dependencies = [
"glib-sys 0.16.3",
"gobject-sys 0.16.3",
"libc",
- "system-deps 6.1.0",
+ "system-deps 6.1.2",
"winapi 0.3.9",
]
@@ -2499,7 +2466,7 @@ version = "0.16.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ccf7f68c2995f392c49fffb4f95ae2c873297830eb25c6bc4c114ce8f4562acc"
dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
"libc",
"libgit2-sys",
"log",
@@ -2512,7 +2479,7 @@ version = "0.10.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0c685013b7515e668f1b57a165b009d4d28cb139a8a989bbd699c10dad29d0c5"
dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
"futures-channel",
"futures-core",
"futures-executor",
@@ -2527,11 +2494,11 @@ dependencies = [
[[package]]
name = "glib"
-version = "0.16.7"
+version = "0.16.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ddd4df61a866ed7259d6189b8bcb1464989a77f1d85d25d002279bbe9dd38b2f"
+checksum = "16aa2475c9debed5a32832cb5ff2af5a3f9e1ab9e69df58eaadc1ab2004d6eba"
dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
"futures-channel",
"futures-core",
"futures-executor",
@@ -2555,11 +2522,11 @@ checksum = "41486a26d1366a8032b160b59065a59fb528530a46a49f627e7048fb8c064039"
dependencies = [
"anyhow",
"heck 0.3.3",
- "itertools 0.9.0",
+ "itertools",
"proc-macro-crate 0.1.5",
"proc-macro-error",
- "proc-macro2 1.0.63",
- "quote 1.0.27",
+ "proc-macro2 1.0.69",
+ "quote 1.0.33",
"syn 1.0.109",
]
@@ -2573,8 +2540,8 @@ dependencies = [
"heck 0.4.1",
"proc-macro-crate 1.3.1",
"proc-macro-error",
- "proc-macro2 1.0.63",
- "quote 1.0.27",
+ "proc-macro2 1.0.69",
+ "quote 1.0.33",
"syn 1.0.109",
]
@@ -2595,7 +2562,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c61a4f46316d06bfa33a7ac22df6f0524c8be58e3db2d9ca99ccb1f357b62a65"
dependencies = [
"libc",
- "system-deps 6.1.0",
+ "system-deps 6.1.2",
]
[[package]]
@@ -2623,7 +2590,7 @@ checksum = "3520bb9c07ae2a12c7f2fbb24d4efc11231c8146a86956413fb1a79bb760a0f1"
dependencies = [
"glib-sys 0.16.3",
"libc",
- "system-deps 6.1.0",
+ "system-deps 6.1.2",
]
[[package]]
@@ -2632,7 +2599,7 @@ version = "0.16.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9ff5d0f7ff308ae37e6eb47b6ded17785bdea06e438a708cd09e0288c1862f33"
dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
"cfg-if 1.0.0",
"futures-channel",
"futures-core",
@@ -2656,7 +2623,7 @@ version = "0.16.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cc80888271338c3ede875d8cafc452eb207476ff5539dcbe0018a8f5b827af0e"
dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
"futures-core",
"futures-sink",
"glib 0.10.3",
@@ -2689,7 +2656,7 @@ version = "0.16.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bafd01c56f59cb10f4b5a10f97bb4bdf8c2b2784ae5b04da7e2d400cf6e6afcf"
dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
"glib 0.10.3",
"glib-sys 0.10.1",
"gobject-sys 0.10.0",
@@ -2730,7 +2697,7 @@ version = "0.16.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f7bbb1485d87469849ec45c08e03c2f280d3ea20ff3c439d03185be54e3ce98e"
dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
"futures-channel",
"futures-util",
"glib 0.10.3",
@@ -2766,14 +2733,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e4d3507d43908c866c805f74c9dd593c0ce7ba5c38e576e41846639cdcd4bee6"
dependencies = [
"atk",
- "bitflags",
+ "bitflags 1.3.2",
"cairo-rs",
"field-offset",
"futures-channel",
"gdk",
"gdk-pixbuf",
"gio",
- "glib 0.16.7",
+ "glib 0.16.9",
"gtk-sys",
"gtk3-macros",
"libc",
@@ -2797,7 +2764,7 @@ dependencies = [
"gobject-sys 0.16.3",
"libc",
"pango-sys",
- "system-deps 6.1.0",
+ "system-deps 6.1.2",
]
[[package]]
@@ -2809,16 +2776,16 @@ dependencies = [
"anyhow",
"proc-macro-crate 1.3.1",
"proc-macro-error",
- "proc-macro2 1.0.63",
- "quote 1.0.27",
+ "proc-macro2 1.0.69",
+ "quote 1.0.33",
"syn 1.0.109",
]
[[package]]
name = "h2"
-version = "0.3.18"
+version = "0.3.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "17f8a914c2987b688368b5138aa05321db91f4090cf26118185672ad588bce21"
+checksum = "91fc23aa11be92976ef4729127f1a74adf36d8436f7816b185d18df956790833"
dependencies = [
"bytes",
"fnv",
@@ -2826,7 +2793,7 @@ dependencies = [
"futures-sink",
"futures-util",
"http",
- "indexmap",
+ "indexmap 1.9.3",
"slab",
"tokio",
"tokio-util",
@@ -2848,7 +2815,17 @@ version = "0.12.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
dependencies = [
- "ahash",
+ "ahash 0.7.7",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.14.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f93e7192158dbcda357bdec5fb5788eebf8bbac027f3f33e719d29135ae84156"
+dependencies = [
+ "ahash 0.8.6",
+ "allocator-api2",
]
[[package]]
@@ -2879,19 +2856,19 @@ dependencies = [
"quinn",
"rand 0.8.5",
"regex",
- "serde 1.0.163",
+ "serde 1.0.190",
"serde_derive",
- "serde_json 1.0.96",
+ "serde_json 1.0.107",
"socket2 0.3.19",
"sodiumoxide",
"sysinfo",
"tokio",
"tokio-socks",
"tokio-util",
- "toml 0.7.3",
+ "toml 0.7.8",
"uuid",
"winapi 0.3.9",
- "zstd 0.12.3+zstd.1.5.2",
+ "zstd 0.12.4",
]
[[package]]
@@ -2920,18 +2897,9 @@ dependencies = [
[[package]]
name = "hermit-abi"
-version = "0.2.6"
+version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7"
-dependencies = [
- "libc",
-]
-
-[[package]]
-name = "hermit-abi"
-version = "0.3.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286"
+checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7"
[[package]]
name = "hex"
@@ -2949,10 +2917,19 @@ dependencies = [
]
[[package]]
-name = "hound"
-version = "3.5.0"
+name = "home"
+version = "0.5.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4d13cdbd5dbb29f9c88095bbdc2590c9cba0d0a1269b983fef6b2cdd7e9f4db1"
+checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb"
+dependencies = [
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "hound"
+version = "3.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62adaabb884c94955b19907d60019f4e145d091c75345379e70d1ee696f7854f"
[[package]]
name = "http"
@@ -2962,7 +2939,7 @@ checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482"
dependencies = [
"bytes",
"fnv",
- "itoa 1.0.6",
+ "itoa 1.0.9",
]
[[package]]
@@ -2984,9 +2961,9 @@ checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
[[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"
@@ -2996,22 +2973,22 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
[[package]]
name = "hwcodec"
-version = "0.1.1"
-source = "git+https://github.com/21pages/hwcodec?branch=stable#82cdc15457e42feaf14e1b38622506b2d54baf76"
+version = "0.1.3"
+source = "git+https://github.com/21pages/hwcodec?branch=stable#83300549075158e5a3fa6c59ea527af3330e48ff"
dependencies = [
"bindgen 0.59.2",
"cc",
"log",
- "serde 1.0.163",
+ "serde 1.0.190",
"serde_derive",
- "serde_json 1.0.96",
+ "serde_json 1.0.107",
]
[[package]]
name = "hyper"
-version = "0.14.26"
+version = "0.14.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ab302d72a6f11a3b910431ff93aae7e773078c769f0a3ef15fb9ec692ed147d4"
+checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468"
dependencies = [
"bytes",
"futures-channel",
@@ -3022,9 +2999,9 @@ dependencies = [
"http-body",
"httparse",
"httpdate",
- "itoa 1.0.6",
+ "itoa 1.0.9",
"pin-project-lite",
- "socket2 0.4.9",
+ "socket2 0.4.10",
"tokio",
"tower-service",
"tracing",
@@ -3033,46 +3010,46 @@ dependencies = [
[[package]]
name = "hyper-rustls"
-version = "0.24.0"
+version = "0.24.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0646026eb1b3eea4cd9ba47912ea5ce9cc07713d105b1a14698f4e6433d348b7"
+checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590"
dependencies = [
+ "futures-util",
"http",
"hyper",
- "rustls 0.21.2",
+ "rustls 0.21.8",
"tokio",
"tokio-rustls",
]
[[package]]
name = "iana-time-zone"
-version = "0.1.56"
+version = "0.1.58"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0722cd7114b7de04316e7ea5456a0bbb20e4adb46fd27a3697adb812cff0f37c"
+checksum = "8326b86b6cff230b97d0d312a6c40a60726df3332e721f72a1b035f451663b20"
dependencies = [
"android_system_properties",
"core-foundation-sys 0.8.4",
"iana-time-zone-haiku",
"js-sys",
"wasm-bindgen",
- "windows 0.48.0",
+ "windows-core",
]
[[package]]
name = "iana-time-zone-haiku"
-version = "0.1.1"
+version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca"
+checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
dependencies = [
- "cxx",
- "cxx-build",
+ "cc",
]
[[package]]
name = "idna"
-version = "0.3.0"
+version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6"
+checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c"
dependencies = [
"unicode-bidi",
"unicode-normalization",
@@ -3080,9 +3057,9 @@ dependencies = [
[[package]]
name = "image"
-version = "0.24.6"
+version = "0.24.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "527909aa81e20ac3a44803521443a765550f09b5130c2c2fa1ea59c2f8f50a3a"
+checksum = "6f3dfdbdd72063086ff443e297b61695500514b1e41095b6fb9a5ab48a70a711"
dependencies = [
"bytemuck",
"byteorder",
@@ -3091,7 +3068,7 @@ dependencies = [
"gif",
"jpeg-decoder",
"num-rational 0.4.1",
- "num-traits 0.2.15",
+ "num-traits 0.2.17",
"png",
"qoi",
"tiff",
@@ -3100,7 +3077,7 @@ dependencies = [
[[package]]
name = "impersonate_system"
version = "0.1.0"
-source = "git+https://github.com/21pages/impersonate-system#84b401893d5b6628c8b33b295328d13fbbe2674b"
+source = "git+https://github.com/21pages/impersonate-system#2f429010a5a10b1fe5eceb553c6672fd53d20167"
dependencies = [
"cc",
]
@@ -3120,8 +3097,8 @@ version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b139284b5cf57ecfa712bcc66950bb635b31aff41c188e8a4cfc758eca374a3f"
dependencies = [
- "proc-macro2 1.0.63",
- "quote 1.0.27",
+ "proc-macro2 1.0.69",
+ "quote 1.0.33",
]
[[package]]
@@ -3131,16 +3108,26 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
dependencies = [
"autocfg 1.1.0",
- "hashbrown",
+ "hashbrown 0.12.3",
+]
+
+[[package]]
+name = "indexmap"
+version = "2.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8adf3ddd720272c6ea8bf59463c04e0f93d0bbf7c5439b691bca2987e0270897"
+dependencies = [
+ "equivalent",
+ "hashbrown 0.14.2",
]
[[package]]
name = "inotify"
-version = "0.10.0"
+version = "0.10.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "abf888f9575c290197b2c948dc9e9ff10bd1a39ad1ea8585f734585fa6b9d3f9"
+checksum = "fdd168d97690d0b8c412d6b6c10360277f4d7ee495c5d0d5d5fe0854923255cc"
dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
"inotify-sys",
"libc",
]
@@ -3154,6 +3141,15 @@ dependencies = [
"libc",
]
+[[package]]
+name = "inout"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5"
+dependencies = [
+ "generic-array",
+]
+
[[package]]
name = "instant"
version = "0.1.12"
@@ -3165,30 +3161,29 @@ dependencies = [
[[package]]
name = "io-lifetimes"
-version = "1.0.10"
+version = "1.0.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220"
+checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2"
dependencies = [
- "hermit-abi 0.3.1",
+ "hermit-abi 0.3.3",
"libc",
"windows-sys 0.48.0",
]
[[package]]
name = "ipnet"
-version = "2.7.2"
+version = "2.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "12b6ee2129af8d4fb011108c73d99a1b83a85977f23b82460c0ae2e25bb4b57f"
+checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3"
[[package]]
name = "is-terminal"
-version = "0.4.7"
+version = "0.4.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "adcf93614601c8129ddf72e2d5633df827ba6551541c6d8c59520a371475be1f"
+checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b"
dependencies = [
- "hermit-abi 0.3.1",
- "io-lifetimes",
- "rustix",
+ "hermit-abi 0.3.3",
+ "rustix 0.38.21",
"windows-sys 0.48.0",
]
@@ -3207,15 +3202,6 @@ dependencies = [
"either",
]
-[[package]]
-name = "itertools"
-version = "0.10.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
-dependencies = [
- "either",
-]
-
[[package]]
name = "itoa"
version = "0.3.4"
@@ -3224,9 +3210,9 @@ checksum = "8324a32baf01e2ae060e9de58ed0bc2320c9a2833491ee36cd3b4c414de4db8c"
[[package]]
name = "itoa"
-version = "1.0.6"
+version = "1.0.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6"
+checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
[[package]]
name = "jni"
@@ -3280,9 +3266,9 @@ checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130"
[[package]]
name = "jobserver"
-version = "0.1.26"
+version = "0.1.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2"
+checksum = "8c37f63953c4c63420ed5fd3d6d398c719489b9f872b9fa683262f8edd363c7d"
dependencies = [
"libc",
]
@@ -3298,9 +3284,9 @@ dependencies = [
[[package]]
name = "js-sys"
-version = "0.3.62"
+version = "0.3.64"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "68c16e1bfd491478ab155fd8b4896b86f9ede344949b641e61501e07c2b8b4d5"
+checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a"
dependencies = [
"wasm-bindgen",
]
@@ -3313,7 +3299,7 @@ dependencies = [
"anyhow",
"apple-sys",
"cfg-if 1.0.0",
- "core-foundation",
+ "core-foundation 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)",
"shadow-rs",
"windows 0.48.0",
"winres",
@@ -3336,8 +3322,8 @@ version = "0.6.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0b7668b7cff6a51fe61cdde64cd27c8a220786f399501b57ebe36f7d8112fd68"
dependencies = [
- "bitflags",
- "serde 1.0.163",
+ "bitflags 1.3.2",
+ "serde 1.0.190",
"unicode-segmentation",
]
@@ -3365,7 +3351,7 @@ version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "89e1edfdc9b0853358306c6dfb4b77c79c779174256fe93d80c0b5ebca451a2f"
dependencies = [
- "glib 0.16.7",
+ "glib 0.16.9",
"gtk",
"gtk-sys",
"libappindicator-sys",
@@ -3385,9 +3371,9 @@ dependencies = [
[[package]]
name = "libc"
-version = "0.2.144"
+version = "0.2.149"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2b00cc1c228a6782d0f076e7b232802e0c5689d41bb5df366f2a6b6621cfdfe1"
+checksum = "a08173bc88b7955d1b3145aa561539096c421ac8debde8cbc3612ec635fee29b"
[[package]]
name = "libdbus-sys"
@@ -3422,9 +3408,9 @@ dependencies = [
[[package]]
name = "libloading"
-version = "0.8.0"
+version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d580318f95776505201b28cf98eb1fa5e4be3b689633ba6a3e6cd880ff22d8cb"
+checksum = "c571b676ddfc9a8c12f1f3d3085a7b163966a8fd8098a90640953ce5f6170161"
dependencies = [
"cfg-if 1.0.0",
"windows-sys 0.48.0",
@@ -3432,29 +3418,29 @@ dependencies = [
[[package]]
name = "libm"
-version = "0.2.6"
+version = "0.2.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "348108ab3fba42ec82ff6e9564fc4ca0247bdccdc68dd8af9764bbc79c3c8ffb"
+checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058"
[[package]]
name = "libpulse-binding"
-version = "2.27.1"
+version = "2.28.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1745b20bfc194ac12ef828f144f0ec2d4a7fe993281fa3567a0bd4969aee6890"
+checksum = "ed3557a2dfc380c8f061189a01c6ae7348354e0c9886038dc6c171219c08eaff"
dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
"libc",
"libpulse-sys",
"num-derive",
- "num-traits 0.2.15",
+ "num-traits 0.2.17",
"winapi 0.3.9",
]
[[package]]
name = "libpulse-simple-binding"
-version = "2.27.1"
+version = "2.28.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5ced94199e6e44133431374e4043f34e1f0697ebfb7b7d6c244a65bfaedf0e31"
+checksum = "05fd6b68f33f6a251265e6ed1212dc3107caad7c5c6fdcd847b2e65ef58c308d"
dependencies = [
"libpulse-binding",
"libpulse-simple-sys",
@@ -3463,9 +3449,9 @@ dependencies = [
[[package]]
name = "libpulse-simple-sys"
-version = "1.20.1"
+version = "1.21.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "84e423d9c619c908ce9b4916080e65ab586ca55b8c4939379f15e6e72fb43842"
+checksum = "ea6613b4199d8b9f0edcfb623e020cb17bbd0bee8dd21f3c7cc938de561c4152"
dependencies = [
"libpulse-sys",
"pkg-config",
@@ -3473,13 +3459,13 @@ dependencies = [
[[package]]
name = "libpulse-sys"
-version = "1.20.1"
+version = "1.21.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2191e6880818d1df4cf72eac8e91dce7a5a52ba0da4b2a5cdafabc22b937eadb"
+checksum = "bc19e110fbf42c17260d30f6d3dc545f58491c7830d38ecb9aaca96e26067a9b"
dependencies = [
"libc",
"num-derive",
- "num-traits 0.2.15",
+ "num-traits 0.2.17",
"pkg-config",
"winapi 0.3.9",
]
@@ -3526,9 +3512,9 @@ dependencies = [
[[package]]
name = "libz-sys"
-version = "1.1.9"
+version = "1.1.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "56ee889ecc9568871456d42f603d6a0ce59ff328d291063a45cbdf0036baf6db"
+checksum = "d97137b25e321a73eef1418d1d5d2eda4d77e12813f8e6dead84bc52c5870a7b"
dependencies = [
"cc",
"libc",
@@ -3546,31 +3532,22 @@ dependencies = [
]
[[package]]
-name = "link-cplusplus"
-version = "1.0.8"
+name = "linux-raw-sys"
+version = "0.3.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5"
-dependencies = [
- "cc",
-]
-
-[[package]]
-name = "linked-hash-map"
-version = "0.5.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
+checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519"
[[package]]
name = "linux-raw-sys"
-version = "0.3.7"
+version = "0.4.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ece97ea872ece730aed82664c424eb4c8291e1ff2480247ccf7409044bc6479f"
+checksum = "da2479e8c062e40bf0066ffa0bc823de0a9368974af99c9f6df941d2c231e03f"
[[package]]
name = "lock_api"
-version = "0.4.9"
+version = "0.4.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df"
+checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45"
dependencies = [
"autocfg 1.1.0",
"scopeguard",
@@ -3578,18 +3555,15 @@ dependencies = [
[[package]]
name = "log"
-version = "0.4.17"
+version = "0.4.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
-dependencies = [
- "cfg-if 1.0.0",
-]
+checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
[[package]]
name = "mac_address"
-version = "1.1.4"
+version = "1.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b238e3235c8382b7653c6408ed1b08dd379bdb9fdf990fb0bbae3db2cc0ae963"
+checksum = "4863ee94f19ed315bf3bc00299338d857d4b5bc856af375cc97d237382ad3856"
dependencies = [
"nix 0.23.2",
"winapi 0.3.9",
@@ -3647,9 +3621,9 @@ checksum = "df39d232f5c40b0891c10216992c2f250c054105cb1e56f0fc9032db6203ecc1"
[[package]]
name = "memchr"
-version = "2.5.0"
+version = "2.6.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167"
[[package]]
name = "memoffset"
@@ -3671,9 +3645,9 @@ dependencies = [
[[package]]
name = "memoffset"
-version = "0.8.0"
+version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1"
+checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
dependencies = [
"autocfg 1.1.0",
]
@@ -3690,15 +3664,6 @@ version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
-[[package]]
-name = "miniz_oxide"
-version = "0.6.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa"
-dependencies = [
- "adler",
-]
-
[[package]]
name = "miniz_oxide"
version = "0.7.1"
@@ -3711,14 +3676,14 @@ dependencies = [
[[package]]
name = "mio"
-version = "0.8.6"
+version = "0.8.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9"
+checksum = "3dce281c5e46beae905d4de1870d8b1509a9142b62eedf18b443b011ca8343d0"
dependencies = [
"libc",
"log",
"wasi 0.11.0+wasi-snapshot-preview1",
- "windows-sys 0.45.0",
+ "windows-sys 0.48.0",
]
[[package]]
@@ -3764,22 +3729,13 @@ version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0419348c027fa7be448d2ae7ea0e4e04c2334c31dc4e74ab29f00a2a7ca69204"
-[[package]]
-name = "nanorand"
-version = "0.7.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3"
-dependencies = [
- "getrandom",
-]
-
[[package]]
name = "ndk"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "451422b7e4718271c8b5b3aadf5adedba43dc76312454b387e98fae0fc951aa0"
dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
"jni-sys",
"ndk-sys",
"num_enum",
@@ -3821,7 +3777,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ea993e32c77d87f01236c38f572ecb6c311d592e56a06262a007fd2a6e31253c"
dependencies = [
"anyhow",
- "bitflags",
+ "bitflags 1.3.2",
"byteorder",
"libc",
"netlink-packet-core",
@@ -3857,7 +3813,7 @@ version = "0.23.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8f3790c00a0150112de0f4cd161e3d7fc4b2d8a5542ffc35f099a2562aecb35c"
dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
"cc",
"cfg-if 1.0.0",
"libc",
@@ -3870,7 +3826,7 @@ version = "0.24.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069"
dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
"cfg-if 1.0.0",
"libc",
"memoffset 0.6.5",
@@ -3878,15 +3834,25 @@ dependencies = [
[[package]]
name = "nix"
-version = "0.26.2"
+version = "0.26.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a"
+checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b"
dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
"cfg-if 1.0.0",
"libc",
"memoffset 0.7.1",
- "static_assertions",
+]
+
+[[package]]
+name = "nix"
+version = "0.27.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053"
+dependencies = [
+ "bitflags 2.4.1",
+ "cfg-if 1.0.0",
+ "libc",
]
[[package]]
@@ -3919,32 +3885,31 @@ dependencies = [
[[package]]
name = "nu-ansi-term"
-version = "0.46.0"
+version = "0.49.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84"
+checksum = "c073d3c1930d0751774acf49e66653acecb416c3a54c6ec095a9b11caddb5a68"
dependencies = [
- "overload",
- "winapi 0.3.9",
+ "windows-sys 0.48.0",
]
[[package]]
name = "num-bigint"
-version = "0.4.3"
+version = "0.4.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f"
+checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0"
dependencies = [
"autocfg 1.1.0",
"num-integer",
- "num-traits 0.2.15",
+ "num-traits 0.2.17",
]
[[package]]
name = "num-complex"
-version = "0.4.3"
+version = "0.4.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "02e0d21255c828d6f128a1e41534206671e8c3ea0c62f32291e808dc82cff17d"
+checksum = "1ba157ca0885411de85d6ca030ba7e2a83a28636056c7c699b07c8b6f7383214"
dependencies = [
- "num-traits 0.2.15",
+ "num-traits 0.2.17",
]
[[package]]
@@ -3953,8 +3918,8 @@ version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d"
dependencies = [
- "proc-macro2 1.0.63",
- "quote 1.0.27",
+ "proc-macro2 1.0.69",
+ "quote 1.0.33",
"syn 1.0.109",
]
@@ -3965,7 +3930,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
dependencies = [
"autocfg 1.1.0",
- "num-traits 0.2.15",
+ "num-traits 0.2.17",
]
[[package]]
@@ -3976,7 +3941,7 @@ checksum = "12ac428b1cb17fce6f731001d307d351ec70a6d202fc2e60f7d4c5e42d8f4f07"
dependencies = [
"autocfg 1.1.0",
"num-integer",
- "num-traits 0.2.15",
+ "num-traits 0.2.17",
]
[[package]]
@@ -3987,7 +3952,7 @@ checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0"
dependencies = [
"autocfg 1.1.0",
"num-integer",
- "num-traits 0.2.15",
+ "num-traits 0.2.17",
]
[[package]]
@@ -3996,25 +3961,25 @@ version = "0.1.43"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "92e5113e9fd4cc14ded8e499429f396a20f98c772a47cc8622a736e1ec843c31"
dependencies = [
- "num-traits 0.2.15",
+ "num-traits 0.2.17",
]
[[package]]
name = "num-traits"
-version = "0.2.15"
+version = "0.2.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
+checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c"
dependencies = [
"autocfg 1.1.0",
]
[[package]]
name = "num_cpus"
-version = "1.15.0"
+version = "1.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b"
+checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
dependencies = [
- "hermit-abi 0.2.6",
+ "hermit-abi 0.3.3",
"libc",
]
@@ -4034,8 +3999,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799"
dependencies = [
"proc-macro-crate 1.3.1",
- "proc-macro2 1.0.63",
- "quote 1.0.27",
+ "proc-macro2 1.0.69",
+ "quote 1.0.33",
"syn 1.0.109",
]
@@ -4069,6 +4034,32 @@ dependencies = [
"objc_id",
]
+[[package]]
+name = "objc-sys"
+version = "0.2.0-beta.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df3b9834c1e95694a05a828b59f55fa2afec6288359cda67146126b3f90a55d7"
+
+[[package]]
+name = "objc2"
+version = "0.3.0-beta.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a49f420f16c8814efdcd6b4258664de9d9920cbc26b6f95d034a1ca9850ccc2c"
+dependencies = [
+ "block2",
+ "objc-sys",
+ "objc2-encode",
+]
+
+[[package]]
+name = "objc2-encode"
+version = "2.0.0-pre.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abfcac41015b00a120608fdaa6938c44cb983fee294351cc4bac7638b4e50512"
+dependencies = [
+ "objc-sys",
+]
+
[[package]]
name = "objc_exception"
version = "0.1.2"
@@ -4089,9 +4080,9 @@ dependencies = [
[[package]]
name = "object"
-version = "0.30.3"
+version = "0.32.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ea86265d3d3dcb6a27fc51bd29a4bf387fae9d2986b823079d4986af253eb439"
+checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0"
dependencies = [
"memchr",
]
@@ -4106,7 +4097,7 @@ dependencies = [
"ndk",
"ndk-context",
"num-derive",
- "num-traits 0.2.15",
+ "num-traits 0.2.17",
"oboe-sys",
]
@@ -4125,12 +4116,6 @@ version = "1.18.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
-[[package]]
-name = "opaque-debug"
-version = "0.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
-
[[package]]
name = "openssl-probe"
version = "0.1.5"
@@ -4150,7 +4135,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ccd746e37177e1711c20dd619a1620f34f5c8b569c53590a72dedd5344d8924a"
dependencies = [
"dlv-list",
- "hashbrown",
+ "hashbrown 0.12.3",
]
[[package]]
@@ -4176,10 +4161,15 @@ dependencies = [
]
[[package]]
-name = "os_str_bytes"
-version = "6.5.0"
+name = "os_info"
+version = "3.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ceedf44fb00f2d1984b0bc98102627ce622e083e49a5bacdb3e514fa4238e267"
+checksum = "006e42d5b888366f1880eda20371fedde764ed2213dc8496f49622fa0c99cd5e"
+dependencies = [
+ "log",
+ "serde 1.0.190",
+ "winapi 0.3.9",
+]
[[package]]
name = "osascript"
@@ -4187,16 +4177,20 @@ version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "38731fa859ef679f1aec66ca9562165926b442f298467f76f5990f431efe87dc"
dependencies = [
- "serde 1.0.163",
+ "serde 1.0.190",
"serde_derive",
- "serde_json 1.0.96",
+ "serde_json 1.0.107",
]
[[package]]
-name = "overload"
-version = "0.1.1"
+name = "page_size"
+version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
+checksum = "1b7663cbd190cfd818d08efa8497f6cd383076688c49a391ef7c0d03cd12b561"
+dependencies = [
+ "libc",
+ "winapi 0.3.9",
+]
[[package]]
name = "pam"
@@ -4215,8 +4209,8 @@ version = "0.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c94f3b9b97df3c6d4e51a14916639b24e02c7d15d1dba686ce9b1118277cb811"
dependencies = [
- "proc-macro2 1.0.63",
- "quote 1.0.27",
+ "proc-macro2 1.0.69",
+ "quote 1.0.33",
"syn 1.0.109",
]
@@ -4236,9 +4230,9 @@ version = "0.16.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cdff66b271861037b89d028656184059e03b0b6ccb36003820be19f7200b1e94"
dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
"gio",
- "glib 0.16.7",
+ "glib 0.16.9",
"libc",
"once_cell",
"pango-sys",
@@ -4253,7 +4247,7 @@ dependencies = [
"glib-sys 0.16.3",
"gobject-sys 0.16.3",
"libc",
- "system-deps 6.1.0",
+ "system-deps 6.1.2",
]
[[package]]
@@ -4272,9 +4266,9 @@ dependencies = [
[[package]]
name = "parking"
-version = "2.1.0"
+version = "2.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "14f2252c834a40ed9bb5422029649578e63aa341ac401f74e719dd1afda8394e"
+checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae"
[[package]]
name = "parking_lot"
@@ -4288,15 +4282,15 @@ dependencies = [
[[package]]
name = "parking_lot_core"
-version = "0.9.7"
+version = "0.9.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521"
+checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e"
dependencies = [
"cfg-if 1.0.0",
"libc",
- "redox_syscall 0.2.16",
+ "redox_syscall 0.4.1",
"smallvec",
- "windows-sys 0.45.0",
+ "windows-targets 0.48.5",
]
[[package]]
@@ -4312,15 +4306,9 @@ dependencies = [
[[package]]
name = "paste"
-version = "1.0.12"
+version = "1.0.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9f746c4065a8fa3fe23974dd82f15431cc8d40779821001404d10d2e79ca7d79"
-
-[[package]]
-name = "pathdiff"
-version = "0.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd"
+checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c"
[[package]]
name = "pbkdf2"
@@ -4342,9 +4330,9 @@ checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099"
[[package]]
name = "percent-encoding"
-version = "2.2.0"
+version = "2.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e"
+checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94"
[[package]]
name = "phf"
@@ -4386,29 +4374,29 @@ dependencies = [
[[package]]
name = "pin-project"
-version = "1.0.12"
+version = "1.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc"
+checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422"
dependencies = [
"pin-project-internal",
]
[[package]]
name = "pin-project-internal"
-version = "1.0.12"
+version = "1.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55"
+checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405"
dependencies = [
- "proc-macro2 1.0.63",
- "quote 1.0.27",
- "syn 1.0.109",
+ "proc-macro2 1.0.69",
+ "quote 1.0.33",
+ "syn 2.0.38",
]
[[package]]
name = "pin-project-lite"
-version = "0.2.9"
+version = "0.2.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116"
+checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58"
[[package]]
name = "pin-utils"
@@ -4416,6 +4404,17 @@ version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+[[package]]
+name = "piper"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "668d31b1c4eba19242f2088b2bf3316b82ca31082a8335764db4e083db7485d4"
+dependencies = [
+ "atomic-waker",
+ "fastrand 2.0.1",
+ "futures-io",
+]
+
[[package]]
name = "pkg-config"
version = "0.3.27"
@@ -4424,29 +4423,29 @@ checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
[[package]]
name = "plist"
-version = "1.4.3"
+version = "1.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9bd9647b268a3d3e14ff09c23201133a62589c658db02bb7388c7246aafe0590"
+checksum = "9a4a0cfc5fb21a09dc6af4bf834cf10d4a32fccd9e2ea468c4b1751a097487aa"
dependencies = [
"base64",
- "indexmap",
+ "indexmap 1.9.3",
"line-wrap",
- "quick-xml 0.28.2",
- "serde 1.0.163",
- "time 0.3.21",
+ "quick-xml",
+ "serde 1.0.190",
+ "time 0.3.30",
]
[[package]]
name = "png"
-version = "0.17.8"
+version = "0.17.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "aaeebc51f9e7d2c150d3f3bfeb667f2aa985db5ef1e3d212847bdedb488beeaa"
+checksum = "dd75bf2d8dd3702b9707cdbc56a5b9ef42cec752eb8b3bafc01234558442aa64"
dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
"crc32fast",
"fdeflate",
"flate2",
- "miniz_oxide 0.7.1",
+ "miniz_oxide",
]
[[package]]
@@ -4456,7 +4455,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce"
dependencies = [
"autocfg 1.1.0",
- "bitflags",
+ "bitflags 1.3.2",
"cfg-if 1.0.0",
"concurrent-queue",
"libc",
@@ -4465,6 +4464,12 @@ dependencies = [
"windows-sys 0.48.0",
]
+[[package]]
+name = "powerfmt"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
+
[[package]]
name = "ppv-lite86"
version = "0.2.17"
@@ -4479,12 +4484,12 @@ checksum = "bc5c99d529f0d30937f6f4b8a86d988047327bb88d04d2c4afc356de74722131"
[[package]]
name = "prettyplease"
-version = "0.2.4"
+version = "0.2.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1ceca8aaf45b5c46ec7ed39fff75f57290368c1846d33d24a122ca81416ab058"
+checksum = "ae005bd773ab59b4725093fd7df83fd7892f7d8eafb48dbd7de6e024e4215f9d"
dependencies = [
- "proc-macro2 1.0.63",
- "syn 2.0.15",
+ "proc-macro2 1.0.69",
+ "syn 2.0.38",
]
[[package]]
@@ -4512,7 +4517,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919"
dependencies = [
"once_cell",
- "toml_edit 0.19.8",
+ "toml_edit 0.19.15",
]
[[package]]
@@ -4522,8 +4527,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
dependencies = [
"proc-macro-error-attr",
- "proc-macro2 1.0.63",
- "quote 1.0.27",
+ "proc-macro2 1.0.69",
+ "quote 1.0.33",
"syn 1.0.109",
"version_check",
]
@@ -4534,8 +4539,8 @@ version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
dependencies = [
- "proc-macro2 1.0.63",
- "quote 1.0.27",
+ "proc-macro2 1.0.69",
+ "quote 1.0.33",
"version_check",
]
@@ -4550,18 +4555,18 @@ dependencies = [
[[package]]
name = "proc-macro2"
-version = "1.0.63"
+version = "1.0.69"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7b368fba921b0dce7e60f5e04ec15e565b3303972b42bcfde1d0713b881959eb"
+checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da"
dependencies = [
"unicode-ident",
]
[[package]]
name = "protobuf"
-version = "3.2.0"
+version = "3.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b55bad9126f378a853655831eb7363b7b01b81d19f8cb1218861086ca4a1a61e"
+checksum = "b65f4a8ec18723a734e5dc09c173e0abf9690432da5340285d536edcb4dac190"
dependencies = [
"bytes",
"once_cell",
@@ -4571,9 +4576,9 @@ dependencies = [
[[package]]
name = "protobuf-codegen"
-version = "3.2.0"
+version = "3.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0dd418ac3c91caa4032d37cb80ff0d44e2ebe637b2fb243b6234bf89cdac4901"
+checksum = "6e85514a216b1c73111d9032e26cc7a5ecb1bb3d4d9539e91fb72a4395060f78"
dependencies = [
"anyhow",
"once_cell",
@@ -4586,12 +4591,12 @@ dependencies = [
[[package]]
name = "protobuf-parse"
-version = "3.2.0"
+version = "3.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9d39b14605eaa1f6a340aec7f320b34064feb26c93aec35d6a9a2272a8ddfa49"
+checksum = "77d6fbd6697c9e531873e81cec565a85e226b99a0f10e1acc079be057fe2fcba"
dependencies = [
"anyhow",
- "indexmap",
+ "indexmap 1.9.3",
"log",
"protobuf",
"protobuf-support",
@@ -4602,9 +4607,9 @@ dependencies = [
[[package]]
name = "protobuf-support"
-version = "3.2.0"
+version = "3.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a5d4d7b8601c814cfb36bcebb79f0e61e45e1e93640cf778837833bbed05c372"
+checksum = "6872f4d4f4b98303239a2b5838f5bbbb77b01ffc892d627957f37a22d7cfe69c"
dependencies = [
"thiserror",
]
@@ -4633,34 +4638,25 @@ dependencies = [
[[package]]
name = "quick-xml"
-version = "0.23.1"
+version = "0.30.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "11bafc859c6815fbaffbbbf4229ecb767ac913fecb27f9ad4343662e9ef099ea"
-dependencies = [
- "memchr",
-]
-
-[[package]]
-name = "quick-xml"
-version = "0.28.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0ce5e73202a820a31f8a0ee32ada5e21029c81fd9e3ebf668a40832e4219d9d1"
+checksum = "eff6510e86862b57b210fd8cbe8ed3f0d7d600b9c2863cd4549a2e033c66e956"
dependencies = [
"memchr",
]
[[package]]
name = "quinn"
-version = "0.9.3"
+version = "0.9.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "445cbfe2382fa023c4f2f3c7e1c95c03dcc1df2bf23cebcb2b13e1402c4394d1"
+checksum = "2e8b432585672228923edbbf64b8b12c14e1112f62e88737655b4a083dbcd78e"
dependencies = [
"bytes",
"pin-project-lite",
"quinn-proto",
"quinn-udp",
"rustc-hash",
- "rustls 0.20.8",
+ "rustls 0.20.9",
"thiserror",
"tokio",
"tracing",
@@ -4669,15 +4665,15 @@ dependencies = [
[[package]]
name = "quinn-proto"
-version = "0.9.3"
+version = "0.9.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "67c10f662eee9c94ddd7135043e544f3c82fa839a1e7b865911331961b53186c"
+checksum = "94b0b33c13a79f669c85defaf4c275dc86a0c0372807d0ca3d78e0bb87274863"
dependencies = [
"bytes",
"rand 0.8.5",
- "ring",
+ "ring 0.16.20",
"rustc-hash",
- "rustls 0.20.8",
+ "rustls 0.20.9",
"rustls-native-certs",
"slab",
"thiserror",
@@ -4694,7 +4690,7 @@ checksum = "641538578b21f5e5c8ea733b736895576d0fe329bb883b937db6f4d163dbaaf4"
dependencies = [
"libc",
"quinn-proto",
- "socket2 0.4.9",
+ "socket2 0.4.10",
"tracing",
"windows-sys 0.42.0",
]
@@ -4710,11 +4706,11 @@ dependencies = [
[[package]]
name = "quote"
-version = "1.0.27"
+version = "1.0.33"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8f4f29d145265ec1c483c7c654450edde0bfe043d3938d6972630663356d9500"
+checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
dependencies = [
- "proc-macro2 1.0.63",
+ "proc-macro2 1.0.69",
]
[[package]]
@@ -4867,9 +4863,9 @@ checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9"
[[package]]
name = "rayon"
-version = "1.7.0"
+version = "1.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b"
+checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1"
dependencies = [
"either",
"rayon-core",
@@ -4877,14 +4873,12 @@ dependencies = [
[[package]]
name = "rayon-core"
-version = "1.11.0"
+version = "1.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d"
+checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed"
dependencies = [
- "crossbeam-channel",
"crossbeam-deque",
"crossbeam-utils",
- "num_cpus",
]
[[package]]
@@ -4893,9 +4887,9 @@ version = "0.5.0-2"
source = "git+https://github.com/fufesou/rdev?branch=master#339b2a334ba273afebb7e27fb76984e620fc76e5"
dependencies = [
"cocoa",
- "core-foundation",
+ "core-foundation 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)",
"core-foundation-sys 0.8.4",
- "core-graphics",
+ "core-graphics 0.22.3",
"dispatch",
"enum-map",
"epoll",
@@ -4914,12 +4908,12 @@ dependencies = [
[[package]]
name = "rdev"
version = "0.5.0-2"
-source = "git+https://github.com/fufesou/rdev#2e8221d653f4995c831ad52966e79a514516b1fa"
+source = "git+https://github.com/fufesou/rdev#339b2a334ba273afebb7e27fb76984e620fc76e5"
dependencies = [
"cocoa",
- "core-foundation",
+ "core-foundation 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)",
"core-foundation-sys 0.8.4",
- "core-graphics",
+ "core-graphics 0.22.3",
"dispatch",
"enum-map",
"epoll",
@@ -4946,9 +4940,9 @@ dependencies = [
[[package]]
name = "realfft"
-version = "3.2.0"
+version = "3.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "93d6b8e8f0c6d2234aa58048d7290c60bf92cd36fd2888cd8331c66ad4f2e1d2"
+checksum = "953d9f7e5cdd80963547b456251296efc2626ed4e3cbf36c869d9564e0220571"
dependencies = [
"rustfft",
]
@@ -4959,7 +4953,7 @@ version = "0.2.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
]
[[package]]
@@ -4968,7 +4962,16 @@ version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa"
+dependencies = [
+ "bitflags 1.3.2",
]
[[package]]
@@ -4984,9 +4987,21 @@ dependencies = [
[[package]]
name = "regex"
-version = "1.8.1"
+version = "1.10.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "af83e617f331cc6ae2da5443c602dfa5af81e517212d9d611a5b3ba1777b5370"
+checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-automata",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f"
dependencies = [
"aho-corasick",
"memchr",
@@ -4995,9 +5010,9 @@ dependencies = [
[[package]]
name = "regex-syntax"
-version = "0.7.1"
+version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a5996294f19bd3aae0453a862ad728f60e6600695733dd5df01da90c54363a3c"
+checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
[[package]]
name = "repng"
@@ -5031,10 +5046,10 @@ dependencies = [
"once_cell",
"percent-encoding",
"pin-project-lite",
- "rustls 0.21.2",
+ "rustls 0.21.8",
"rustls-pemfile",
- "serde 1.0.163",
- "serde_json 1.0.96",
+ "serde 1.0.190",
+ "serde_json 1.0.107",
"serde_urlencoded",
"tokio",
"tokio-rustls",
@@ -5057,11 +5072,25 @@ dependencies = [
"libc",
"once_cell",
"spin 0.5.2",
- "untrusted",
+ "untrusted 0.7.1",
"web-sys",
"winapi 0.3.9",
]
+[[package]]
+name = "ring"
+version = "0.17.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb0205304757e5d899b9c2e448b867ffd03ae7f988002e47cd24954391394d0b"
+dependencies = [
+ "cc",
+ "getrandom",
+ "libc",
+ "spin 0.9.8",
+ "untrusted 0.9.0",
+ "windows-sys 0.48.0",
+]
+
[[package]]
name = "ringbuf"
version = "0.3.3"
@@ -5111,7 +5140,7 @@ checksum = "cd70209c27d5b08f5528bdc779ea3ffb418954e28987f9f9775c6eac41003f9c"
dependencies = [
"num-complex",
"num-integer",
- "num-traits 0.2.15",
+ "num-traits 0.2.17",
"realfft",
]
@@ -5178,11 +5207,11 @@ dependencies = [
"cfg-if 1.0.0",
"chrono",
"cidr-utils",
- "clap 4.2.7",
+ "clap 4.4.7",
"clipboard",
"cocoa",
- "core-foundation",
- "core-graphics",
+ "core-foundation 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "core-graphics 0.22.3",
"cpal",
"crossbeam-queue",
"ctrlc",
@@ -5196,7 +5225,6 @@ dependencies = [
"errno",
"evdev",
"flutter_rust_bridge",
- "flutter_rust_bridge_codegen",
"fon",
"fruitbasket",
"hbb_common",
@@ -5208,7 +5236,7 @@ dependencies = [
"jni 0.21.1",
"keepawake",
"lazy_static",
- "libloading 0.8.0",
+ "libloading 0.8.1",
"libpulse-binding",
"libpulse-simple-binding",
"mac_address",
@@ -5217,9 +5245,11 @@ dependencies = [
"num_cpus",
"objc",
"objc_id",
+ "once_cell",
"os-version",
"pam",
"parity-tokio-ipc",
+ "percent-encoding",
"rdev 0.5.0-2 (git+https://github.com/fufesou/rdev?branch=master)",
"repng",
"reqwest",
@@ -5231,9 +5261,9 @@ dependencies = [
"samplerate",
"sciter-rs",
"scrap",
- "serde 1.0.163",
+ "serde 1.0.190",
"serde_derive",
- "serde_json 1.0.96",
+ "serde_json 1.0.107",
"serde_repr",
"sha2",
"shared_memory",
@@ -5254,6 +5284,8 @@ dependencies = [
"winreg 0.11.0",
"winres",
"wol-rs",
+ "x11-clipboard",
+ "x11rb 0.12.0",
"zip",
]
@@ -5276,7 +5308,7 @@ checksum = "e17d4f6cbdb180c9f4b2a26bbf01c4e647f1e1dea22fe8eb9db54198b32f9434"
dependencies = [
"num-complex",
"num-integer",
- "num-traits 0.2.15",
+ "num-traits 0.2.17",
"primal-check",
"strength_reduce",
"transpose",
@@ -5285,46 +5317,59 @@ dependencies = [
[[package]]
name = "rustix"
-version = "0.37.19"
+version = "0.37.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "acf8729d8542766f1b2cf77eb034d52f40d375bb8b615d0b147089946e16613d"
+checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2"
dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
"errno",
"io-lifetimes",
"libc",
- "linux-raw-sys",
+ "linux-raw-sys 0.3.8",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "rustix"
+version = "0.38.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b426b0506e5d50a7d8dafcf2e81471400deb602392c7dd110815afb4eaf02a3"
+dependencies = [
+ "bitflags 2.4.1",
+ "errno",
+ "libc",
+ "linux-raw-sys 0.4.10",
"windows-sys 0.48.0",
]
[[package]]
name = "rustls"
-version = "0.20.8"
+version = "0.20.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fff78fc74d175294f4e83b28343315ffcfb114b156f0185e9741cb5570f50e2f"
+checksum = "1b80e3dec595989ea8510028f30c408a4630db12c9cbb8de34203b89d6577e99"
dependencies = [
- "ring",
+ "ring 0.16.20",
"sct",
"webpki",
]
[[package]]
name = "rustls"
-version = "0.21.2"
+version = "0.21.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e32ca28af694bc1bbf399c33a516dbdf1c90090b8ab23c2bc24f834aa2247f5f"
+checksum = "446e14c5cda4f3f30fe71863c34ec70f5ac79d6087097ad0bb433e1be5edf04c"
dependencies = [
"log",
- "ring",
- "rustls-webpki",
+ "ring 0.17.5",
+ "rustls-webpki 0.101.7",
"sct",
]
[[package]]
name = "rustls-native-certs"
-version = "0.6.2"
+version = "0.6.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0167bac7a9f490495f3c33013e7722b53cb087ecbe082fb0c6387c96f634ea50"
+checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00"
dependencies = [
"openssl-probe",
"rustls-pemfile",
@@ -5334,34 +5379,44 @@ dependencies = [
[[package]]
name = "rustls-pemfile"
-version = "1.0.2"
+version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d194b56d58803a43635bdc398cd17e383d6f71f9182b9a192c127ca42494a59b"
+checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2"
dependencies = [
"base64",
]
[[package]]
name = "rustls-webpki"
-version = "0.100.1"
+version = "0.100.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d6207cd5ed3d8dca7816f8f3725513a34609c0c765bf652b8c3cb4cfd87db46b"
+checksum = "5f6a5fc258f1c1276dfe3016516945546e2d5383911efc0fc4f1cdc5df3a4ae3"
dependencies = [
- "ring",
- "untrusted",
+ "ring 0.16.20",
+ "untrusted 0.7.1",
+]
+
+[[package]]
+name = "rustls-webpki"
+version = "0.101.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765"
+dependencies = [
+ "ring 0.17.5",
+ "untrusted 0.9.0",
]
[[package]]
name = "rustversion"
-version = "1.0.12"
+version = "1.0.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06"
+checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4"
[[package]]
name = "ryu"
-version = "1.0.13"
+version = "1.0.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"
+checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741"
[[package]]
name = "safemem"
@@ -5389,11 +5444,11 @@ dependencies = [
[[package]]
name = "schannel"
-version = "0.1.21"
+version = "0.1.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3"
+checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88"
dependencies = [
- "windows-sys 0.42.0",
+ "windows-sys 0.48.0",
]
[[package]]
@@ -5409,9 +5464,9 @@ dependencies = [
[[package]]
name = "scopeguard"
-version = "1.1.0"
+version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
[[package]]
name = "scrap"
@@ -5436,38 +5491,32 @@ dependencies = [
"pkg-config",
"quest",
"repng",
- "serde 1.0.163",
- "serde_json 1.0.96",
+ "serde 1.0.190",
+ "serde_json 1.0.107",
"target_build_utils",
"tracing",
"webm",
"winapi 0.3.9",
]
-[[package]]
-name = "scratch"
-version = "1.0.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1792db035ce95be60c3f8853017b3999209281c24e2ba5bc8e59bf97a0c590c1"
-
[[package]]
name = "sct"
-version = "0.7.0"
+version = "0.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4"
+checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414"
dependencies = [
- "ring",
- "untrusted",
+ "ring 0.17.5",
+ "untrusted 0.9.0",
]
[[package]]
name = "security-framework"
-version = "2.8.2"
+version = "2.9.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a332be01508d814fed64bf28f798a146d73792121129962fdf335bb3c49a4254"
+checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de"
dependencies = [
- "bitflags",
- "core-foundation",
+ "bitflags 1.3.2",
+ "core-foundation 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)",
"core-foundation-sys 0.8.4",
"libc",
"security-framework-sys",
@@ -5475,9 +5524,9 @@ dependencies = [
[[package]]
name = "security-framework-sys"
-version = "2.8.0"
+version = "2.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "31c9bb296072e961fcbd8853511dd39c2d8be2deb1e17c6860b1d30732b323b4"
+checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a"
dependencies = [
"core-foundation-sys 0.8.4",
"libc",
@@ -5485,12 +5534,9 @@ dependencies = [
[[package]]
name = "semver"
-version = "1.0.17"
+version = "1.0.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed"
-dependencies = [
- "serde 1.0.163",
-]
+checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090"
[[package]]
name = "serde"
@@ -5500,22 +5546,22 @@ checksum = "34b623917345a631dc9608d5194cc206b3fe6c3554cd1c75b937e55e285254af"
[[package]]
name = "serde"
-version = "1.0.163"
+version = "1.0.190"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2113ab51b87a539ae008b5c6c02dc020ffa39afd2d83cffcb3f4eb2722cebec2"
+checksum = "91d3c334ca1ee894a2c6f6ad698fe8c435b76d504b13d436f0685d648d6d96f7"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
-version = "1.0.163"
+version = "1.0.190"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8c805777e3930c8883389c602315a24224bcc738b63905ef87cd1420353ea93e"
+checksum = "67c5609f394e5c2bd7fc51efda478004ea80ef42fee983d5c67a65e34f32c0e3"
dependencies = [
- "proc-macro2 1.0.63",
- "quote 1.0.27",
- "syn 2.0.15",
+ "proc-macro2 1.0.69",
+ "quote 1.0.33",
+ "syn 2.0.38",
]
[[package]]
@@ -5532,33 +5578,33 @@ dependencies = [
[[package]]
name = "serde_json"
-version = "1.0.96"
+version = "1.0.107"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1"
+checksum = "6b420ce6e3d8bd882e9b243c6eed35dbc9a6110c9769e74b584e0d68d1f20c65"
dependencies = [
- "itoa 1.0.6",
+ "itoa 1.0.9",
"ryu",
- "serde 1.0.163",
+ "serde 1.0.190",
]
[[package]]
name = "serde_repr"
-version = "0.1.12"
+version = "0.1.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bcec881020c684085e55a25f7fd888954d56609ef363479dc5a1305eb0d40cab"
+checksum = "8725e1dfadb3a50f7e5ce0b1a540466f6ed3fe7a0fca2ac2b8b831d31316bd00"
dependencies = [
- "proc-macro2 1.0.63",
- "quote 1.0.27",
- "syn 2.0.15",
+ "proc-macro2 1.0.69",
+ "quote 1.0.33",
+ "syn 2.0.38",
]
[[package]]
name = "serde_spanned"
-version = "0.6.1"
+version = "0.6.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0efd8caf556a6cebd3b285caf480045fcc1ac04f6bd786b09a6f11af30c4fcf4"
+checksum = "12022b835073e5b11e90a14f86838ceb1c8fb0325b72416845c487ac0fa95e80"
dependencies = [
- "serde 1.0.163",
+ "serde 1.0.190",
]
[[package]]
@@ -5568,28 +5614,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
dependencies = [
"form_urlencoded",
- "itoa 1.0.6",
+ "itoa 1.0.9",
"ryu",
- "serde 1.0.163",
-]
-
-[[package]]
-name = "serde_yaml"
-version = "0.8.26"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "578a7433b776b56a35785ed5ce9a7e777ac0598aac5a6dd1b4b18a307c7fc71b"
-dependencies = [
- "indexmap",
- "ryu",
- "serde 1.0.163",
- "yaml-rust",
+ "serde 1.0.190",
]
[[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 1.0.0",
"cpufeatures",
@@ -5598,9 +5632,9 @@ dependencies = [
[[package]]
name = "sha2"
-version = "0.10.6"
+version = "0.10.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0"
+checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8"
dependencies = [
"cfg-if 1.0.0",
"cpufeatures",
@@ -5616,7 +5650,7 @@ dependencies = [
"const_format",
"git2",
"is_debug",
- "time 0.3.21",
+ "time 0.3.30",
"tzdb",
]
@@ -5635,9 +5669,9 @@ dependencies = [
[[package]]
name = "shlex"
-version = "1.1.0"
+version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3"
+checksum = "a7cee0529a6d40f580e7a5e6c495c8fbfe21b7b52795ed4bb5e62cdf92bc6380"
[[package]]
name = "shutdown_hooks"
@@ -5645,16 +5679,6 @@ version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6057adedbec913419c92996f395ba69931acbd50b7d56955394cd3f7bedbfa45"
-[[package]]
-name = "signal-hook"
-version = "0.3.15"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "732768f1176d21d09e076c23a93123d40bba92d50c4058da34d45c8de8e682b9"
-dependencies = [
- "libc",
- "signal-hook-registry",
-]
-
[[package]]
name = "signal-hook-registry"
version = "1.4.1"
@@ -5672,9 +5696,9 @@ checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c"
[[package]]
name = "simd-adler32"
-version = "0.3.5"
+version = "0.3.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "238abfbb77c1915110ad968465608b68e869e0772622c9656714e73e5a1a522f"
+checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe"
[[package]]
name = "siphasher"
@@ -5684,18 +5708,18 @@ checksum = "0b8de496cf83d4ed58b6be86c3a275b8602f6ffe98d3024a869e124147a9a3ac"
[[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 1.1.0",
]
[[package]]
name = "smallvec"
-version = "1.10.0"
+version = "1.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
+checksum = "942b4a808e05215192e39f4ab80813e599068285906cc91aa64f923db842bd5a"
[[package]]
name = "socket2"
@@ -5710,9 +5734,9 @@ dependencies = [
[[package]]
name = "socket2"
-version = "0.4.9"
+version = "0.4.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662"
+checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d"
dependencies = [
"libc",
"winapi 0.3.9",
@@ -5727,7 +5751,7 @@ dependencies = [
"ed25519",
"libc",
"libsodium-sys",
- "serde 1.0.163",
+ "serde 1.0.190",
]
[[package]]
@@ -5794,8 +5818,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "87c85aa3f8ea653bfd3ddf25f7ee357ee4d204731f6aa9ad04002306f6e2774c"
dependencies = [
"heck 0.3.3",
- "proc-macro2 1.0.63",
- "quote 1.0.27",
+ "proc-macro2 1.0.69",
+ "quote 1.0.33",
"syn 1.0.109",
]
@@ -5806,17 +5830,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59"
dependencies = [
"heck 0.4.1",
- "proc-macro2 1.0.63",
- "quote 1.0.27",
+ "proc-macro2 1.0.69",
+ "quote 1.0.33",
"rustversion",
"syn 1.0.109",
]
[[package]]
name = "subtle"
-version = "2.4.1"
+version = "2.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601"
+checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc"
[[package]]
name = "syn"
@@ -5835,37 +5859,36 @@ version = "1.0.109"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
dependencies = [
- "proc-macro2 1.0.63",
- "quote 1.0.27",
+ "proc-macro2 1.0.69",
+ "quote 1.0.33",
"unicode-ident",
]
[[package]]
name = "syn"
-version = "2.0.15"
+version = "2.0.38"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a34fcf3e8b60f57e6a14301a2e916d323af98b0ea63c599441eec8558660c822"
+checksum = "e96b79aaa137db8f61e26363a0c9b47d8b4ec75da28b7d1d614c2303e232408b"
dependencies = [
- "proc-macro2 1.0.63",
- "quote 1.0.27",
+ "proc-macro2 1.0.69",
+ "quote 1.0.33",
"unicode-ident",
]
[[package]]
name = "sys-locale"
-version = "0.3.0"
+version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ea0b9eefabb91675082b41eb94c3ecd91af7656caee3fb4961a07c0ec8c7ca6f"
+checksum = "e801cf239ecd6ccd71f03d270d67dd53d13e90aab208bf4b8fe4ad957ea949b0"
dependencies = [
"libc",
- "windows-sys 0.45.0",
]
[[package]]
name = "sysinfo"
-version = "0.29.6"
+version = "0.29.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c7cb97a5a85a136d84e75d5c3cf89655090602efb1be0d8d5337b7e386af2908"
+checksum = "0a18d114d420ada3a891e6bc8e96a2023402203296a47cdd65083377dad18ba5"
dependencies = [
"cfg-if 1.0.0",
"core-foundation-sys 0.8.4",
@@ -5878,12 +5901,12 @@ dependencies = [
[[package]]
name = "system-configuration"
-version = "0.5.0"
+version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d75182f12f490e953596550b65ee31bda7c8e043d9386174b353bda50838c3fd"
+checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7"
dependencies = [
- "bitflags",
- "core-foundation",
+ "bitflags 1.3.2",
+ "core-foundation 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)",
"system-configuration-sys",
]
@@ -5914,14 +5937,14 @@ dependencies = [
[[package]]
name = "system-deps"
-version = "6.1.0"
+version = "6.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e5fa6fb9ee296c0dc2df41a656ca7948546d061958115ddb0bcaae43ad0d17d2"
+checksum = "94af52f9402f94aac4948a2518b43359be8d9ce6cd9efc1c4de3b2f7b7e897d6"
dependencies = [
"cfg-expr",
"heck 0.4.1",
"pkg-config",
- "toml 0.7.3",
+ "toml 0.8.6",
"version-compare 0.1.1",
]
@@ -5940,12 +5963,12 @@ name = "tao"
version = "0.22.2"
source = "git+https://github.com/rustdesk-org/tao?branch=dev#1e5b97258cf42a30f80f85a6aa0b1a4aece1977e"
dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
"cairo-rs",
"cc",
"cocoa",
- "core-foundation",
- "core-graphics",
+ "core-foundation 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "core-graphics 0.22.3",
"crossbeam-channel",
"dispatch",
"gdk",
@@ -5954,7 +5977,7 @@ dependencies = [
"gdkwayland-sys",
"gdkx11-sys",
"gio",
- "glib 0.16.7",
+ "glib 0.16.9",
"glib-sys 0.16.3",
"gtk",
"image",
@@ -5987,8 +6010,8 @@ name = "tao-macros"
version = "0.1.2"
source = "git+https://github.com/rustdesk-org/tao?branch=dev#1e5b97258cf42a30f80f85a6aa0b1a4aece1977e"
dependencies = [
- "proc-macro2 1.0.63",
- "quote 1.0.27",
+ "proc-macro2 1.0.69",
+ "quote 1.0.33",
"syn 1.0.109",
]
@@ -6000,9 +6023,9 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369"
[[package]]
name = "target-lexicon"
-version = "0.12.7"
+version = "0.12.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fd1ba337640d60c3e96bc6f0638a939b9c9a7f2c316a1598c279828b3d1dc8c5"
+checksum = "14c39fd04924ca3a864207c66fc2cd7d22d7c016007f9ce846cbb9326331930a"
[[package]]
name = "target_build_utils"
@@ -6017,32 +6040,32 @@ dependencies = [
[[package]]
name = "tauri-winrt-notification"
-version = "0.1.2"
+version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4f5bff1d532fead7c43324a0fa33643b8621a47ce2944a633be4cb6c0240898f"
+checksum = "006851c9ccefa3c38a7646b8cec804bb429def3da10497bfa977179869c3e8e2"
dependencies = [
- "quick-xml 0.23.1",
- "windows 0.39.0",
+ "quick-xml",
+ "windows 0.51.1",
]
[[package]]
name = "tempfile"
-version = "3.5.0"
+version = "3.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998"
+checksum = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5"
dependencies = [
"cfg-if 1.0.0",
- "fastrand",
- "redox_syscall 0.3.5",
- "rustix",
- "windows-sys 0.45.0",
+ "fastrand 2.0.1",
+ "redox_syscall 0.4.1",
+ "rustix 0.38.21",
+ "windows-sys 0.48.0",
]
[[package]]
name = "termcolor"
-version = "1.2.0"
+version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
+checksum = "6093bad37da69aab9d123a8091e4be0aa4a03e4d601ec641c327398315f62b64"
dependencies = [
"winapi-util",
]
@@ -6065,19 +6088,13 @@ dependencies = [
"unicode-width",
]
-[[package]]
-name = "textwrap"
-version = "0.16.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d"
-
[[package]]
name = "tfc"
version = "0.6.1"
source = "git+https://github.com/fufesou/The-Fat-Controller#9dd86151525fd010dc93f6bc9b6aedd1a75cc342"
dependencies = [
"anyhow",
- "core-graphics",
+ "core-graphics 0.22.3",
"unicode-segmentation",
"winapi 0.3.9",
"x11 2.19.0",
@@ -6085,22 +6102,22 @@ dependencies = [
[[package]]
name = "thiserror"
-version = "1.0.40"
+version = "1.0.50"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac"
+checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2"
dependencies = [
"thiserror-impl",
]
[[package]]
name = "thiserror-impl"
-version = "1.0.40"
+version = "1.0.50"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f"
+checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8"
dependencies = [
- "proc-macro2 1.0.63",
- "quote 1.0.27",
- "syn 2.0.15",
+ "proc-macro2 1.0.69",
+ "quote 1.0.33",
+ "syn 2.0.38",
]
[[package]]
@@ -6114,9 +6131,9 @@ dependencies = [
[[package]]
name = "tiff"
-version = "0.8.1"
+version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7449334f9ff2baf290d55d73983a7d6fa15e01198faef72af07e2a8db851e471"
+checksum = "6d172b0f4d3fba17ba89811858b9d3d97f928aece846475bbda076ca46736211"
dependencies = [
"flate2",
"jpeg-decoder",
@@ -6136,29 +6153,31 @@ dependencies = [
[[package]]
name = "time"
-version = "0.3.21"
+version = "0.3.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8f3403384eaacbca9923fa06940178ac13e4edb725486d70e8e15881d0c836cc"
+checksum = "c4a34ab300f2dee6e562c10a046fc05e358b29f9bf92277f30c3c8d82275f6f5"
dependencies = [
- "itoa 1.0.6",
+ "deranged",
+ "itoa 1.0.9",
"libc",
"num_threads",
- "serde 1.0.163",
+ "powerfmt",
+ "serde 1.0.190",
"time-core",
"time-macros",
]
[[package]]
name = "time-core"
-version = "0.1.1"
+version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb"
+checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3"
[[package]]
name = "time-macros"
-version = "0.2.9"
+version = "0.2.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "372950940a5f07bf38dbe211d7283c9e6d7327df53794992d293e534c733d09b"
+checksum = "4ad70d68dba9e1f8aceda7aa6711965dfec1cac869f311a51bd08b3a2ccbce20"
dependencies = [
"time-core",
]
@@ -6192,7 +6211,7 @@ dependencies = [
"parking_lot",
"pin-project-lite",
"signal-hook-registry",
- "socket2 0.4.9",
+ "socket2 0.4.10",
"tokio-macros",
"windows-sys 0.48.0",
]
@@ -6203,9 +6222,9 @@ version = "2.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e"
dependencies = [
- "proc-macro2 1.0.63",
- "quote 1.0.27",
- "syn 2.0.15",
+ "proc-macro2 1.0.69",
+ "quote 1.0.33",
+ "syn 2.0.38",
]
[[package]]
@@ -6214,7 +6233,7 @@ version = "0.24.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081"
dependencies = [
- "rustls 0.21.2",
+ "rustls 0.21.8",
"tokio",
]
@@ -6236,16 +6255,16 @@ dependencies = [
[[package]]
name = "tokio-util"
-version = "0.7.8"
+version = "0.7.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d"
+checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15"
dependencies = [
"bytes",
"futures-core",
"futures-io",
"futures-sink",
"futures-util",
- "hashbrown",
+ "hashbrown 0.14.2",
"pin-project-lite",
"slab",
"tokio",
@@ -6258,7 +6277,7 @@ version = "0.5.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
dependencies = [
- "serde 1.0.163",
+ "serde 1.0.190",
]
[[package]]
@@ -6267,7 +6286,7 @@ version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4fb9d890e4dc9298b70f740f615f2e05b9db37dce531f6b24fb77ac993f9f217"
dependencies = [
- "serde 1.0.163",
+ "serde 1.0.190",
"serde_spanned",
"toml_datetime 0.5.1",
"toml_edit 0.18.1",
@@ -6275,14 +6294,26 @@ dependencies = [
[[package]]
name = "toml"
-version = "0.7.3"
+version = "0.7.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b403acf6f2bb0859c93c7f0d967cb4a75a7ac552100f9322faf64dc047669b21"
+checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257"
dependencies = [
- "serde 1.0.163",
+ "serde 1.0.190",
"serde_spanned",
- "toml_datetime 0.6.1",
- "toml_edit 0.19.8",
+ "toml_datetime 0.6.5",
+ "toml_edit 0.19.15",
+]
+
+[[package]]
+name = "toml"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ff9e3abce27ee2c9a37f9ad37238c1bdd4e789c84ba37df76aa4d528f5072cc"
+dependencies = [
+ "serde 1.0.190",
+ "serde_spanned",
+ "toml_datetime 0.6.5",
+ "toml_edit 0.20.7",
]
[[package]]
@@ -6291,16 +6322,16 @@ version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4553f467ac8e3d374bc9a177a26801e5d0f9b211aa1673fb137a403afd1c9cf5"
dependencies = [
- "serde 1.0.163",
+ "serde 1.0.190",
]
[[package]]
name = "toml_datetime"
-version = "0.6.1"
+version = "0.6.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3ab8ed2edee10b50132aed5f331333428b011c99402b5a534154ed15746f9622"
+checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1"
dependencies = [
- "serde 1.0.163",
+ "serde 1.0.190",
]
[[package]]
@@ -6309,31 +6340,38 @@ version = "0.18.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "56c59d8dd7d0dcbc6428bf7aa2f0e823e26e43b3c9aca15bbc9475d23e5fa12b"
dependencies = [
- "indexmap",
+ "indexmap 1.9.3",
"nom8",
- "serde 1.0.163",
+ "serde 1.0.190",
"serde_spanned",
"toml_datetime 0.5.1",
]
[[package]]
name = "toml_edit"
-version = "0.19.8"
+version = "0.19.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "239410c8609e8125456927e6707163a3b1fdb40561e4b803bc041f466ccfdc13"
+checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421"
dependencies = [
- "indexmap",
- "serde 1.0.163",
+ "indexmap 2.0.2",
+ "serde 1.0.190",
"serde_spanned",
- "toml_datetime 0.6.1",
+ "toml_datetime 0.6.5",
"winnow",
]
[[package]]
-name = "topological-sort"
-version = "0.2.2"
+name = "toml_edit"
+version = "0.20.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ea68304e134ecd095ac6c3574494fc62b909f416c4fca77e440530221e549d3d"
+checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81"
+dependencies = [
+ "indexmap 2.0.2",
+ "serde 1.0.190",
+ "serde_spanned",
+ "toml_datetime 0.6.5",
+ "winnow",
+]
[[package]]
name = "tower-service"
@@ -6343,11 +6381,10 @@ checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
[[package]]
name = "tracing"
-version = "0.1.37"
+version = "0.1.40"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
+checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef"
dependencies = [
- "cfg-if 1.0.0",
"pin-project-lite",
"tracing-attributes",
"tracing-core",
@@ -6355,20 +6392,20 @@ dependencies = [
[[package]]
name = "tracing-attributes"
-version = "0.1.24"
+version = "0.1.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0f57e3ca2a01450b1a921183a9c9cbfda207fd822cef4ccb00a65402cbba7a74"
+checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
dependencies = [
- "proc-macro2 1.0.63",
- "quote 1.0.27",
- "syn 2.0.15",
+ "proc-macro2 1.0.69",
+ "quote 1.0.33",
+ "syn 2.0.38",
]
[[package]]
name = "tracing-core"
-version = "0.1.30"
+version = "0.1.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a"
+checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54"
dependencies = [
"once_cell",
]
@@ -6389,7 +6426,7 @@ version = "0.5.1"
source = "git+https://github.com/rustdesk-org/tray-icon#ef98e7b98abed2e3da614277eced12a85bfb717c"
dependencies = [
"cocoa",
- "core-graphics",
+ "core-graphics 0.22.3",
"crossbeam-channel",
"dirs-next",
"libappindicator",
@@ -6409,9 +6446,9 @@ checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
[[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 = "tz-rs"
@@ -6459,9 +6496,9 @@ checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
[[package]]
name = "unicode-ident"
-version = "1.0.8"
+version = "1.0.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4"
+checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
[[package]]
name = "unicode-normalization"
@@ -6480,9 +6517,9 @@ checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
[[package]]
name = "unicode-width"
-version = "0.1.10"
+version = "0.1.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85"
[[package]]
name = "unicode-xid"
@@ -6503,15 +6540,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
[[package]]
-name = "url"
-version = "2.3.1"
+name = "untrusted"
+version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643"
+checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
+
+[[package]]
+name = "url"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5"
dependencies = [
"form_urlencoded",
"idna",
"percent-encoding",
- "serde 1.0.163",
+ "serde 1.0.190",
]
[[package]]
@@ -6534,6 +6577,15 @@ dependencies = [
"log",
]
+[[package]]
+name = "utf16string"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b62a1e85e12d5d712bf47a85f426b73d303e2d00a90de5f3004df3596e9d216"
+dependencies = [
+ "byteorder",
+]
+
[[package]]
name = "utf8parse"
version = "0.2.1"
@@ -6542,9 +6594,9 @@ checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
[[package]]
name = "uuid"
-version = "1.3.2"
+version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4dad5567ad0cf5b760e5665964bec1b47dfd077ba8a2544b513f3556d3d239a2"
+checksum = "88ad59a7560b41a70d191093a945f0b87bc1deeda46fb237479708a1d6b6cdfc"
dependencies = [
"getrandom",
]
@@ -6609,15 +6661,15 @@ dependencies = [
[[package]]
name = "waker-fn"
-version = "1.1.0"
+version = "1.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca"
+checksum = "f3c4517f54858c779bbcbf228f4fca63d121bf85fbecb2dc578cdf4a39395690"
[[package]]
name = "walkdir"
-version = "2.3.3"
+version = "2.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698"
+checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee"
dependencies = [
"same-file",
"winapi-util",
@@ -6638,11 +6690,10 @@ dependencies = [
[[package]]
name = "want"
-version = "0.3.0"
+version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0"
+checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e"
dependencies = [
- "log",
"try-lock",
]
@@ -6660,9 +6711,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
[[package]]
name = "wasm-bindgen"
-version = "0.2.85"
+version = "0.2.87"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5b6cb788c4e39112fbe1822277ef6fb3c55cd86b95cb3d3c4c1c9597e4ac74b4"
+checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342"
dependencies = [
"cfg-if 1.0.0",
"wasm-bindgen-macro",
@@ -6670,24 +6721,24 @@ dependencies = [
[[package]]
name = "wasm-bindgen-backend"
-version = "0.2.85"
+version = "0.2.87"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "35e522ed4105a9d626d885b35d62501b30d9666283a5c8be12c14a8bdafe7822"
+checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd"
dependencies = [
"bumpalo",
"log",
"once_cell",
- "proc-macro2 1.0.63",
- "quote 1.0.27",
- "syn 2.0.15",
+ "proc-macro2 1.0.69",
+ "quote 1.0.33",
+ "syn 2.0.38",
"wasm-bindgen-shared",
]
[[package]]
name = "wasm-bindgen-futures"
-version = "0.4.35"
+version = "0.4.37"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "083abe15c5d88556b77bdf7aef403625be9e327ad37c62c4e4129af740168163"
+checksum = "c02dbc21516f9f1f04f187958890d7e6026df8d16540b7ad9492bc34a67cea03"
dependencies = [
"cfg-if 1.0.0",
"js-sys",
@@ -6697,38 +6748,38 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro"
-version = "0.2.85"
+version = "0.2.87"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "358a79a0cb89d21db8120cbfb91392335913e4890665b1a7981d9e956903b434"
+checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d"
dependencies = [
- "quote 1.0.27",
+ "quote 1.0.33",
"wasm-bindgen-macro-support",
]
[[package]]
name = "wasm-bindgen-macro-support"
-version = "0.2.85"
+version = "0.2.87"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4783ce29f09b9d93134d41297aded3a712b7b979e9c6f28c32cb88c973a94869"
+checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
dependencies = [
- "proc-macro2 1.0.63",
- "quote 1.0.27",
- "syn 2.0.15",
+ "proc-macro2 1.0.69",
+ "quote 1.0.33",
+ "syn 2.0.38",
"wasm-bindgen-backend",
"wasm-bindgen-shared",
]
[[package]]
name = "wasm-bindgen-shared"
-version = "0.2.85"
+version = "0.2.87"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a901d592cafaa4d711bc324edfaff879ac700b19c3dfd60058d2b445be2691eb"
+checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1"
[[package]]
name = "web-sys"
-version = "0.3.62"
+version = "0.3.64"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "16b5f940c7edfdc6d12126d98c9ef4d1b3d470011c47c76a6581df47ad9ba721"
+checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b"
dependencies = [
"js-sys",
"wasm-bindgen",
@@ -6752,12 +6803,12 @@ dependencies = [
[[package]]
name = "webpki"
-version = "0.22.0"
+version = "0.22.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd"
+checksum = "ed63aea5ce73d0ff405984102c42de94fc55a6b75765d621c65262469b3c9b53"
dependencies = [
- "ring",
- "untrusted",
+ "ring 0.17.5",
+ "untrusted 0.9.0",
]
[[package]]
@@ -6766,7 +6817,7 @@ version = "0.23.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b03058f88386e5ff5310d9111d53f48b17d732b401aeb83a8d5190f2ac459338"
dependencies = [
- "rustls-webpki",
+ "rustls-webpki 0.100.3",
]
[[package]]
@@ -6777,20 +6828,21 @@ checksum = "9193164d4de03a926d909d3bc7c30543cecb35400c02114792c2cae20d5e2dbb"
[[package]]
name = "which"
-version = "4.4.0"
+version = "4.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2441c784c52b289a054b7201fc93253e288f094e2f4be9058343127c4226a269"
+checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7"
dependencies = [
"either",
- "libc",
+ "home",
"once_cell",
+ "rustix 0.38.21",
]
[[package]]
name = "whoami"
-version = "1.4.0"
+version = "1.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2c70234412ca409cc04e864e89523cb0fc37f5e1344ebed5a3ebf4192b6b9f68"
+checksum = "22fc3756b8a9133049b26c7f61ab35416c130e8c09b660f5b3958b446f52cc50"
dependencies = [
"wasm-bindgen",
"web-sys",
@@ -6841,9 +6893,9 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
[[package]]
name = "winapi-util"
-version = "0.1.5"
+version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596"
dependencies = [
"winapi 0.3.9",
]
@@ -6889,19 +6941,6 @@ dependencies = [
"windows_x86_64_msvc 0.34.0",
]
-[[package]]
-name = "windows"
-version = "0.39.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f1c4bd0a50ac6020f65184721f758dba47bb9fbc2133df715ec74a237b26794a"
-dependencies = [
- "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",
-]
-
[[package]]
name = "windows"
version = "0.44.0"
@@ -6928,7 +6967,26 @@ checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f"
dependencies = [
"windows-implement",
"windows-interface",
- "windows-targets 0.48.0",
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "windows"
+version = "0.51.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca229916c5ee38c2f2bc1e9d8f04df975b4bd93f9955dc69fabb5d91270045c9"
+dependencies = [
+ "windows-core",
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "windows-core"
+version = "0.51.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64"
+dependencies = [
+ "windows-targets 0.48.5",
]
[[package]]
@@ -6937,8 +6995,8 @@ version = "0.48.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5e2ee588991b9e7e6c8338edf3333fbe4da35dc72092643958ebb43f0ab2c49c"
dependencies = [
- "proc-macro2 1.0.63",
- "quote 1.0.27",
+ "proc-macro2 1.0.69",
+ "quote 1.0.33",
"syn 1.0.109",
]
@@ -6948,8 +7006,8 @@ version = "0.48.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e6fb8df20c9bcaa8ad6ab513f7b40104840c8867d5751126e4df3b08388d0cc7"
dependencies = [
- "proc-macro2 1.0.63",
- "quote 1.0.27",
+ "proc-macro2 1.0.69",
+ "quote 1.0.33",
"syn 1.0.109",
]
@@ -6959,7 +7017,7 @@ version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cd9db37ecb5b13762d95468a2fc6009d4b2c62801243223aabd44fca13ad13c8"
dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
"widestring",
"windows-sys 0.45.0",
]
@@ -6994,7 +7052,7 @@ version = "0.48.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
dependencies = [
- "windows-targets 0.48.0",
+ "windows-targets 0.48.5",
]
[[package]]
@@ -7014,17 +7072,17 @@ dependencies = [
[[package]]
name = "windows-targets"
-version = "0.48.0"
+version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5"
+checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
dependencies = [
- "windows_aarch64_gnullvm 0.48.0",
- "windows_aarch64_msvc 0.48.0",
- "windows_i686_gnu 0.48.0",
- "windows_i686_msvc 0.48.0",
- "windows_x86_64_gnu 0.48.0",
- "windows_x86_64_gnullvm 0.48.0",
- "windows_x86_64_msvc 0.48.0",
+ "windows_aarch64_gnullvm 0.48.5",
+ "windows_aarch64_msvc 0.48.5",
+ "windows_i686_gnu 0.48.5",
+ "windows_i686_msvc 0.48.5",
+ "windows_x86_64_gnu 0.48.5",
+ "windows_x86_64_gnullvm 0.48.5",
+ "windows_x86_64_msvc 0.48.5",
]
[[package]]
@@ -7035,9 +7093,9 @@ 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_msvc"
@@ -7051,12 +7109,6 @@ version = "0.34.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "17cffbe740121affb56fad0fc0e421804adf0ae00891205213b5cecd30db881d"
-[[package]]
-name = "windows_aarch64_msvc"
-version = "0.39.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ec7711666096bd4096ffa835238905bb33fb87267910e154b18b44eaabb340f2"
-
[[package]]
name = "windows_aarch64_msvc"
version = "0.42.2"
@@ -7065,9 +7117,9 @@ 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_i686_gnu"
@@ -7081,12 +7133,6 @@ version = "0.34.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2564fde759adb79129d9b4f54be42b32c89970c18ebf93124ca8870a498688ed"
-[[package]]
-name = "windows_i686_gnu"
-version = "0.39.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "763fc57100a5f7042e3057e7e8d9bdd7860d330070251a73d003563a3bb49e1b"
-
[[package]]
name = "windows_i686_gnu"
version = "0.42.2"
@@ -7095,9 +7141,9 @@ 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_msvc"
@@ -7111,12 +7157,6 @@ version = "0.34.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9cd9d32ba70453522332c14d38814bceeb747d80b3958676007acadd7e166956"
-[[package]]
-name = "windows_i686_msvc"
-version = "0.39.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7bc7cbfe58828921e10a9f446fcaaf649204dcfe6c1ddd712c5eebae6bda1106"
-
[[package]]
name = "windows_i686_msvc"
version = "0.42.2"
@@ -7125,9 +7165,9 @@ 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_x86_64_gnu"
@@ -7141,12 +7181,6 @@ version = "0.34.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cfce6deae227ee8d356d19effc141a509cc503dfd1f850622ec4b0f84428e1f4"
-[[package]]
-name = "windows_x86_64_gnu"
-version = "0.39.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6868c165637d653ae1e8dc4d82c25d4f97dd6605eaa8d784b5c6e0ab2a252b65"
-
[[package]]
name = "windows_x86_64_gnu"
version = "0.42.2"
@@ -7155,9 +7189,9 @@ 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_gnullvm"
@@ -7167,9 +7201,9 @@ 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_msvc"
@@ -7183,12 +7217,6 @@ version = "0.34.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d19538ccc21819d01deaf88d6a17eae6596a12e9aafdbb97916fb49896d89de9"
-[[package]]
-name = "windows_x86_64_msvc"
-version = "0.39.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5e4d40883ae9cae962787ca76ba76390ffa29214667a111db9e0a1ad8377e809"
-
[[package]]
name = "windows_x86_64_msvc"
version = "0.42.2"
@@ -7197,15 +7225,15 @@ checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
[[package]]
name = "windows_x86_64_msvc"
-version = "0.48.0"
+version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
+checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
[[package]]
name = "winnow"
-version = "0.4.6"
+version = "0.5.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "61de7bac303dc551fe038e2b3cef0f571087a47571ea6e79a87692ac99b99699"
+checksum = "a3b801d0e0a6726477cc207f60162da452f3a95adb368399bef20a946e06f65c"
dependencies = [
"memchr",
]
@@ -7239,6 +7267,16 @@ dependencies = [
"windows-sys 0.48.0",
]
+[[package]]
+name = "winreg"
+version = "0.51.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "937f3df7948156640f46aacef17a70db0de5917bda9c92b0f751f3a955b588fc"
+dependencies = [
+ "cfg-if 1.0.0",
+ "windows-sys 0.48.0",
+]
+
[[package]]
name = "winres"
version = "0.1.12"
@@ -7250,9 +7288,9 @@ dependencies = [
[[package]]
name = "wol-rs"
-version = "1.0.0"
+version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "48dc5e486e34a31515518d370cdd8bf59ec696323fe8f92b858e43942e84a765"
+checksum = "3c5a8a033ef9b208ec8b5946761958ed2b2693ac49b04f647fdc013000870b8f"
[[package]]
name = "wyz"
@@ -7282,6 +7320,14 @@ dependencies = [
"pkg-config",
]
+[[package]]
+name = "x11-clipboard"
+version = "0.8.1"
+source = "git+https://github.com/clslaid/x11-clipboard?branch=feat/store-batch#5fc2e73bc01ada3681159b34cf3ea8f0d14cd904"
+dependencies = [
+ "x11rb 0.12.0",
+]
+
[[package]]
name = "x11-dl"
version = "2.21.0"
@@ -7299,11 +7345,24 @@ version = "0.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "592b4883219f345e712b3209c62654ebda0bb50887f330cbd018d0f654bfd507"
dependencies = [
- "gethostname",
+ "gethostname 0.2.3",
"nix 0.24.3",
"winapi 0.3.9",
"winapi-wsapoll",
- "x11rb-protocol",
+ "x11rb-protocol 0.10.0",
+]
+
+[[package]]
+name = "x11rb"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1641b26d4dec61337c35a1b1aaf9e3cba8f46f0b43636c609ab0291a648040a"
+dependencies = [
+ "gethostname 0.3.0",
+ "nix 0.26.4",
+ "winapi 0.3.9",
+ "winapi-wsapoll",
+ "x11rb-protocol 0.12.0",
]
[[package]]
@@ -7315,52 +7374,54 @@ dependencies = [
"nix 0.24.3",
]
+[[package]]
+name = "x11rb-protocol"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "82d6c3f9a0fb6701fab8f6cea9b0c0bd5d6876f1f89f7fada07e558077c344bc"
+dependencies = [
+ "nix 0.26.4",
+]
+
[[package]]
name = "xdg-home"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2769203cd13a0c6015d515be729c526d041e9cf2c0cc478d57faee85f40c6dcd"
dependencies = [
- "nix 0.26.2",
+ "nix 0.26.4",
"winapi 0.3.9",
]
-[[package]]
-name = "yaml-rust"
-version = "0.4.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85"
-dependencies = [
- "linked-hash-map",
-]
-
[[package]]
name = "zbus"
-version = "3.12.0"
+version = "3.14.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "29242fa5ec5693629ae74d6eb1f69622a9511f600986d6d9779bccf36ac316e3"
+checksum = "31de390a2d872e4cd04edd71b425e29853f786dc99317ed72d73d6fcf5ebb948"
dependencies = [
"async-broadcast",
"async-executor",
"async-fs",
"async-io",
"async-lock",
+ "async-process",
"async-recursion",
"async-task",
"async-trait",
+ "blocking",
"byteorder",
"derivative",
"enumflags2",
- "event-listener",
+ "event-listener 2.5.3",
"futures-core",
"futures-sink",
"futures-util",
"hex",
- "nix 0.26.2",
+ "nix 0.26.4",
"once_cell",
"ordered-stream",
"rand 0.8.5",
- "serde 1.0.163",
+ "serde 1.0.190",
"serde_repr",
"sha1",
"static_assertions",
@@ -7375,13 +7436,13 @@ dependencies = [
[[package]]
name = "zbus_macros"
-version = "3.12.0"
+version = "3.14.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "537793e26e9af85f774801dc52c6f6292352b2b517c5cf0449ffd3735732a53a"
+checksum = "41d1794a946878c0e807f55a397187c11fc7a038ba5d868e7db4f3bd7760bc9d"
dependencies = [
"proc-macro-crate 1.3.1",
- "proc-macro2 1.0.63",
- "quote 1.0.27",
+ "proc-macro2 1.0.69",
+ "quote 1.0.33",
"regex",
"syn 1.0.109",
"zvariant_utils",
@@ -7389,20 +7450,61 @@ dependencies = [
[[package]]
name = "zbus_names"
-version = "2.5.0"
+version = "2.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f34f314916bd89bdb9934154627fab152f4f28acdda03e7c4c68181b214fe7e3"
+checksum = "fb80bb776dbda6e23d705cf0123c3b95df99c4ebeaec6c2599d4a5419902b4a9"
dependencies = [
- "serde 1.0.163",
+ "serde 1.0.190",
"static_assertions",
"zvariant",
]
[[package]]
-name = "zip"
+name = "zerocopy"
version = "0.6.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7e92305c174683d78035cbf1b70e18db6329cc0f1b9cae0a52ca90bf5bfe7125"
+checksum = "96f8f25c15a0edc9b07eb66e7e6e97d124c0505435c382fde1ab7ceb188aa956"
+dependencies = [
+ "byteorder",
+ "zerocopy-derive 0.6.5",
+]
+
+[[package]]
+name = "zerocopy"
+version = "0.7.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ede7d7c7970ca2215b8c1ccf4d4f354c4733201dfaaba72d44ae5b37472e4901"
+dependencies = [
+ "zerocopy-derive 0.7.18",
+]
+
+[[package]]
+name = "zerocopy-derive"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "855e0f6af9cd72b87d8a6c586f3cb583f5cdcc62c2c80869d8cd7e96fdf7ee20"
+dependencies = [
+ "proc-macro2 1.0.69",
+ "quote 1.0.33",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "zerocopy-derive"
+version = "0.7.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b27b1bb92570f989aac0ab7e9cbfbacdd65973f7ee920d9f0e71ebac878fd0b"
+dependencies = [
+ "proc-macro2 1.0.69",
+ "quote 1.0.33",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "zip"
+version = "0.6.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261"
dependencies = [
"aes",
"byteorder",
@@ -7414,7 +7516,7 @@ dependencies = [
"hmac",
"pbkdf2",
"sha1",
- "time 0.3.21",
+ "time 0.3.30",
"zstd 0.11.2+zstd.1.5.2",
]
@@ -7429,11 +7531,11 @@ dependencies = [
[[package]]
name = "zstd"
-version = "0.12.3+zstd.1.5.2"
+version = "0.12.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "76eea132fb024e0e13fd9c2f5d5d595d8a967aa72382ac2f9d39fcc95afd0806"
+checksum = "1a27595e173641171fc74a1232b7b1c7a7cb6e18222c11e9dfb9888fa424c53c"
dependencies = [
- "zstd-safe 6.0.5+zstd.1.5.4",
+ "zstd-safe 6.0.6",
]
[[package]]
@@ -7448,9 +7550,9 @@ dependencies = [
[[package]]
name = "zstd-safe"
-version = "6.0.5+zstd.1.5.4"
+version = "6.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d56d9e60b4b1758206c238a10165fbcae3ca37b01744e394c463463f6529d23b"
+checksum = "ee98ffd0b48ee95e6c5168188e44a54550b1564d9d530ee21d5f0eaed1069581"
dependencies = [
"libc",
"zstd-sys",
@@ -7458,12 +7560,11 @@ dependencies = [
[[package]]
name = "zstd-sys"
-version = "2.0.8+zstd.1.5.5"
+version = "2.0.9+zstd.1.5.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5556e6ee25d32df2586c098bbfa278803692a20d0ab9565e049480d52707ec8c"
+checksum = "9e16efa8a874a0481a574084d34cc26fdb3b99627480f785888deb6386506656"
dependencies = [
"cc",
- "libc",
"pkg-config",
]
@@ -7478,38 +7579,38 @@ dependencies = [
[[package]]
name = "zvariant"
-version = "3.12.0"
+version = "3.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "46fe4914a985446d6fd287019b5fceccce38303d71407d9e6e711d44954a05d8"
+checksum = "44b291bee0d960c53170780af148dca5fa260a63cdd24f1962fa82e03e53338c"
dependencies = [
"byteorder",
"enumflags2",
"libc",
- "serde 1.0.163",
+ "serde 1.0.190",
"static_assertions",
"zvariant_derive",
]
[[package]]
name = "zvariant_derive"
-version = "3.12.0"
+version = "3.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "34c20260af4b28b3275d6676c7e2a6be0d4332e8e0aba4616d34007fd84e462a"
+checksum = "934d7a7dfc310d6ee06c87ffe88ef4eca7d3e37bb251dece2ef93da8f17d8ecd"
dependencies = [
"proc-macro-crate 1.3.1",
- "proc-macro2 1.0.63",
- "quote 1.0.27",
+ "proc-macro2 1.0.69",
+ "quote 1.0.33",
"syn 1.0.109",
"zvariant_utils",
]
[[package]]
name = "zvariant_utils"
-version = "1.0.0"
+version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "53b22993dbc4d128a17a3b6c92f1c63872dd67198537ee728d8b5d7c40640a8b"
+checksum = "7234f0d811589db492d16893e3f21e8e2fd282e6d01b0cddee310322062cc200"
dependencies = [
- "proc-macro2 1.0.63",
- "quote 1.0.27",
+ "proc-macro2 1.0.69",
+ "quote 1.0.33",
"syn 1.0.109",
]
diff --git a/Cargo.toml b/Cargo.toml
index 3f1037f5b..a18a3c984 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -32,6 +32,13 @@ linux_headless = ["pam" ]
virtual_display_driver = ["virtual_display"]
plugin_framework = []
linux-pkg-config = ["magnum-opus/linux-pkg-config", "scrap/linux-pkg-config"]
+unix-file-copy-paste = [
+ "dep:x11-clipboard",
+ "dep:x11rb",
+ "dep:percent-encoding",
+ "dep:once_cell",
+ "clipboard/unix-file-copy-paste",
+]
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
@@ -62,7 +69,7 @@ num_cpus = "1.15"
bytes = { version = "1.4", features = ["serde"] }
default-net = "0.14"
wol-rs = "1.0"
-flutter_rust_bridge = { version = "1.75", features = ["uuid"], optional = true}
+flutter_rust_bridge = { version = "=1.80", features = ["uuid"], optional = true}
errno = "0.3"
rdev = { git = "https://github.com/fufesou/rdev", branch = "master" }
url = { version = "2.3", features = ["serde"] }
@@ -132,6 +139,10 @@ dbus = "0.9"
dbus-crossroads = "0.5"
pam = { git="https://github.com/fufesou/pam", optional = true }
users = { version = "0.11" }
+x11-clipboard = {git="https://github.com/clslaid/x11-clipboard", branch = "feat/store-batch", optional = true}
+x11rb = {version = "0.12", features = ["all-extensions"], optional = true}
+percent-encoding = {version = "2.3", optional = true}
+once_cell = {version = "1.18", optional = true}
[target.'cfg(target_os = "android")'.dependencies]
android_logger = "0.13"
@@ -153,7 +164,6 @@ winapi = { version = "0.3", features = [ "winnt" ] }
[build-dependencies]
cc = "1.0"
hbb_common = { path = "libs/hbb_common" }
-flutter_rust_bridge_codegen = "1.75"
os-version = "0.2"
[dev-dependencies]
diff --git a/README.md b/README.md
index 924cd1786..a805c2ca8 100644
--- a/README.md
+++ b/README.md
@@ -11,7 +11,7 @@
Chat with us: [Discord](https://discord.gg/nDceKgxnkV) | [Twitter](https://twitter.com/rustdesk) | [Reddit](https://www.reddit.com/r/rustdesk)
-[![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/I2I04VU09)
+[![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/I2I04VU09)
[![Open Bounties](https://img.shields.io/endpoint?url=https%3A%2F%2Fconsole.algora.io%2Fapi%2Fshields%2Frustdesk%2Fbounties%3Fstatus%3Dopen)](https://console.algora.io/org/rustdesk/bounties?status=open)
@@ -80,11 +80,12 @@ sudo apt install -y zip g++ gcc git curl wget nasm yasm libgtk-3-dev clang libxc
libclang-dev ninja-build libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
```
-### openSUSE Tumbleweed
+### openSUSE Tumbleweed
```sh
sudo zypper install gcc-c++ git curl wget nasm yasm gcc gtk3-devel clang libxcb-devel libXfixes-devel cmake alsa-lib-devel gstreamer-devel gstreamer-plugins-base-devel xdotool-devel
```
+
### Fedora 28 (CentOS 8)
```sh
@@ -170,6 +171,7 @@ Please ensure that you are running these commands from the root of the RustDesk
- **[libs/hbb_common](https://github.com/rustdesk/rustdesk/tree/master/libs/hbb_common)**: video codec, config, tcp/udp wrapper, protobuf, fs functions for file transfer, and some other utility functions
- **[libs/scrap](https://github.com/rustdesk/rustdesk/tree/master/libs/scrap)**: screen capture
- **[libs/enigo](https://github.com/rustdesk/rustdesk/tree/master/libs/enigo)**: platform specific keyboard/mouse control
+- **[libs/clipboard](https://github.com/rustdesk/rustdesk/tree/master/libs/clipboard)**: file copy and paste implemention for Windows, Linux, OSX.
- **[src/ui](https://github.com/rustdesk/rustdesk/tree/master/src/ui)**: obsolete Sciter UI (deprecated)
- **[src/server](https://github.com/rustdesk/rustdesk/tree/master/src/server)**: audio/clipboard/input/video services, and network connections
- **[src/client.rs](https://github.com/rustdesk/rustdesk/tree/master/src/client.rs)**: start a peer connection
diff --git a/build.py b/build.py
index 42dc8d6de..8cff351e2 100755
--- a/build.py
+++ b/build.py
@@ -24,18 +24,21 @@ else:
flutter_build_dir_2 = f'flutter/{flutter_build_dir}'
skip_cargo = False
+
def get_arch() -> str:
custom_arch = os.environ.get("ARCH")
if custom_arch is None:
return "amd64"
return custom_arch
+
def system2(cmd):
err = os.system(cmd)
if err != 0:
print(f"Error occurred when executing: {cmd}. Exiting.")
sys.exit(-1)
+
def get_version():
with open("Cargo.toml", encoding="utf-8") as fh:
for line in fh:
@@ -123,6 +126,11 @@ def make_parser():
action='store_true',
help='Build windows portable'
)
+ parser.add_argument(
+ '--unix-file-copy-paste',
+ action='store_true',
+ help='Build with unix file copy paste feature'
+ )
parser.add_argument(
'--flatpak',
action='store_true',
@@ -185,6 +193,7 @@ def download_extract_features(features, res_dir):
import re
proxy = ''
+
def req(url):
if not proxy:
return url
@@ -196,9 +205,9 @@ def download_extract_features(features, res_dir):
for (feat, feat_info) in features.items():
includes = feat_info['include'] if 'include' in feat_info and feat_info['include'] else []
- includes = [ re.compile(p) for p in includes ]
+ includes = [re.compile(p) for p in includes]
excludes = feat_info['exclude'] if 'exclude' in feat_info and feat_info['exclude'] else []
- excludes = [ re.compile(p) for p in excludes ]
+ excludes = [re.compile(p) for p in excludes]
print(f'{feat} download begin')
download_filename = feat_info['zip_url'].split('/')[-1]
@@ -272,6 +281,8 @@ def get_features(args):
features.append('flatpak')
if args.appimage:
features.append('appimage')
+ if args.unix_file_copy_paste:
+ features.append('unix-file-copy-paste')
print("features:", features)
return features
@@ -350,6 +361,7 @@ def build_flutter_deb(version, features):
os.rename('rustdesk.deb', '../rustdesk-%s.deb' % version)
os.chdir("..")
+
def build_deb_from_folder(version, binary_folder):
os.chdir('flutter')
system2('mkdir -p tmpdeb/usr/bin/')
@@ -388,10 +400,12 @@ def build_deb_from_folder(version, binary_folder):
os.rename('rustdesk.deb', '../rustdesk-%s.deb' % version)
os.chdir("..")
+
def build_flutter_dmg(version, features):
if not skip_cargo:
# set minimum osx build target, now is 10.14, which is the same as the flutter xcode project
- system2(f'MACOSX_DEPLOYMENT_TARGET=10.14 cargo build --features {features} --lib --release')
+ system2(
+ f'MACOSX_DEPLOYMENT_TARGET=10.14 cargo build --features {features} --lib --release')
# copy dylib
system2(
"cp target/release/liblibrustdesk.dylib target/release/librustdesk.dylib")
@@ -557,7 +571,8 @@ def main():
codesign -s "Developer ID Application: {0}" --force --options runtime ./target/release/bundle/osx/RustDesk.app/Contents/MacOS/*
codesign -s "Developer ID Application: {0}" --force --options runtime ./target/release/bundle/osx/RustDesk.app
'''.format(pa))
- system2('create-dmg "RustDesk %s.dmg" "target/release/bundle/osx/RustDesk.app"' % version)
+ system2(
+ 'create-dmg "RustDesk %s.dmg" "target/release/bundle/osx/RustDesk.app"' % version)
os.rename('RustDesk %s.dmg' %
version, 'rustdesk-%s.dmg' % version)
if pa:
@@ -577,7 +592,7 @@ def main():
else:
print('Not signed')
else:
- # buid deb package
+ # build deb package
system2(
'mv target/release/bundle/deb/rustdesk*.deb ./rustdesk.deb')
system2('dpkg-deb -R rustdesk.deb tmpdeb')
diff --git a/build.rs b/build.rs
index 054eb3700..ad745667d 100644
--- a/build.rs
+++ b/build.rs
@@ -76,52 +76,12 @@ fn install_oboe() {
//cc::Build::new().file("oboe.cc").include(include).compile("oboe_wrapper");
}
-#[cfg(feature = "flutter")]
-fn gen_flutter_rust_bridge() {
- if !std::env::var("RUN_FFIGEN").is_ok() {
- return;
- }
- use lib_flutter_rust_bridge_codegen::{
- config_parse, frb_codegen, get_symbols_if_no_duplicates, RawOpts,
- };
- let llvm_path = match std::env::var("LLVM_HOME") {
- Ok(path) => Some(vec![path]),
- Err(_) => None,
- };
- // Tell Cargo that if the given file changes, to rerun this build script.
- println!("cargo:rerun-if-changed=src/flutter_ffi.rs");
- // Options for frb_codegen
- let raw_opts = RawOpts {
- // Path of input Rust code
- rust_input: vec!["src/flutter_ffi.rs".to_string()],
- // Path of output generated Dart code
- dart_output: vec!["flutter/lib/generated_bridge.dart".to_string()],
- // Path of output generated C header
- c_output: Some(vec!["flutter/macos/Runner/bridge_generated.h".to_string()]),
- /// Path to the installed LLVM
- llvm_path,
- // for other options use defaults
- ..Default::default()
- };
- // get opts from raw opts
- let configs = config_parse(raw_opts);
- // generation of rust api for ffi
- let all_symbols = get_symbols_if_no_duplicates(&configs).unwrap();
- for config in configs.iter() {
- frb_codegen(config, &all_symbols).unwrap();
- }
-}
-
fn main() {
hbb_common::gen_version();
install_oboe();
// there is problem with cfg(target_os) in build.rs, so use our workaround
// let target_os = std::env::var("CARGO_CFG_TARGET_OS").unwrap();
// if target_os == "android" || target_os == "ios" {
- #[cfg(feature = "flutter")]
- gen_flutter_rust_bridge();
- // return;
- // }
#[cfg(all(windows, feature = "inline"))]
build_manifest();
#[cfg(windows)]
diff --git a/flutter/android/app/build.gradle b/flutter/android/app/build.gradle
index 9973c8f62..9e32e163e 100644
--- a/flutter/android/app/build.gradle
+++ b/flutter/android/app/build.gradle
@@ -104,7 +104,7 @@ flutter {
dependencies {
implementation "androidx.media:media:1.6.0"
- implementation 'com.github.getActivity:XXPermissions:16.2'
+ implementation 'com.github.getActivity:XXPermissions:18.5'
implementation("org.jetbrains.kotlin:kotlin-stdlib") { version { strictly("$kotlin_version") } }
}
diff --git a/flutter/android/app/src/main/AndroidManifest.xml b/flutter/android/app/src/main/AndroidManifest.xml
index b3c655917..1b99801bf 100644
--- a/flutter/android/app/src/main/AndroidManifest.xml
+++ b/flutter/android/app/src/main/AndroidManifest.xml
@@ -61,6 +61,14 @@
+
+
+
+
+
+
+
+
-
\ No newline at end of file
+
diff --git a/flutter/android/build.gradle b/flutter/android/build.gradle
index 8dccca448..c6a77f36b 100644
--- a/flutter/android/build.gradle
+++ b/flutter/android/build.gradle
@@ -1,5 +1,5 @@
buildscript {
- ext.kotlin_version = '1.7.10'
+ ext.kotlin_version = '1.9.10'
repositories {
google()
jcenter()
diff --git a/flutter/ios/Podfile.lock b/flutter/ios/Podfile.lock
index 1ad5f6360..1336513c0 100644
--- a/flutter/ios/Podfile.lock
+++ b/flutter/ios/Podfile.lock
@@ -55,7 +55,7 @@ PODS:
- SDWebImage (5.15.5):
- SDWebImage/Core (= 5.15.5)
- SDWebImage/Core (5.15.5)
- - sqflite (0.0.2):
+ - sqflite (0.0.3):
- Flutter
- FMDB (>= 2.7.5)
- SwiftyGif (5.4.4)
@@ -65,7 +65,8 @@ PODS:
- Flutter
- video_player_avfoundation (0.0.1):
- Flutter
- - wakelock (0.0.1):
+ - FlutterMacOS
+ - wakelock_plus (0.0.1):
- Flutter
DEPENDENCIES:
@@ -80,8 +81,8 @@ DEPENDENCIES:
- sqflite (from `.symlinks/plugins/sqflite/ios`)
- uni_links (from `.symlinks/plugins/uni_links/ios`)
- url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
- - video_player_avfoundation (from `.symlinks/plugins/video_player_avfoundation/ios`)
- - wakelock (from `.symlinks/plugins/wakelock/ios`)
+ - video_player_avfoundation (from `.symlinks/plugins/video_player_avfoundation/darwin`)
+ - wakelock_plus (from `.symlinks/plugins/wakelock_plus/ios`)
SPEC REPOS:
trunk:
@@ -116,30 +117,30 @@ EXTERNAL SOURCES:
url_launcher_ios:
:path: ".symlinks/plugins/url_launcher_ios/ios"
video_player_avfoundation:
- :path: ".symlinks/plugins/video_player_avfoundation/ios"
- wakelock:
- :path: ".symlinks/plugins/wakelock/ios"
+ :path: ".symlinks/plugins/video_player_avfoundation/darwin"
+ wakelock_plus:
+ :path: ".symlinks/plugins/wakelock_plus/ios"
SPEC CHECKSUMS:
- device_info_plus: e5c5da33f982a436e103237c0c85f9031142abed
+ device_info_plus: c6fb39579d0f423935b0c9ce7ee2f44b71b9fce6
DKImagePickerController: b512c28220a2b8ac7419f21c491fc8534b7601ac
DKPhotoGallery: fdfad5125a9fdda9cc57df834d49df790dbb4179
file_picker: ce3938a0df3cc1ef404671531facef740d03f920
Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854
flutter_keyboard_visibility: 0339d06371254c3eb25eeb90ba8d17dca8f9c069
FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
- image_picker_ios: b786a5dcf033a8336a657191401bfdf12017dabb
+ image_picker_ios: 4a8aadfbb6dc30ad5141a2ce3832af9214a705b5
MTBBarcodeScanner: f453b33c4b7dfe545d8c6484ed744d55671788cb
- package_info_plus: 6c92f08e1f853dc01228d6f553146438dafcd14e
- path_provider_foundation: 37748e03f12783f9de2cb2c4eadfaa25fe6d4852
+ package_info_plus: 115f4ad11e0698c8c1c5d8a689390df880f47e85
+ path_provider_foundation: 29f094ae23ebbca9d3d0cec13889cd9060c0e943
qr_code_scanner: bb67d64904c3b9658ada8c402e8b4d406d5d796e
SDWebImage: fd7e1a22f00303e058058278639bf6196ee431fe
- sqflite: 6d358c025f5b867b29ed92fc697fd34924e11904
+ sqflite: 31f7eba61e3074736dff8807a9b41581e4f7f15a
SwiftyGif: 93a1cc87bf3a51916001cf8f3d63835fb64c819f
uni_links: d97da20c7701486ba192624d99bffaaffcfc298a
- url_launcher_ios: ae1517e5e344f5544fb090b079e11f399dfbe4d2
- video_player_avfoundation: e489aac24ef5cf7af82702979ed16f2a5ef84cff
- wakelock: d0fc7c864128eac40eba1617cb5264d9c940b46f
+ url_launcher_ios: 68d46cc9766d0c41dbdc884310529557e3cd7a86
+ video_player_avfoundation: 8563f13d8fc8b2c29dc2d09e60b660e4e8128837
+ wakelock_plus: 8b09852c8876491e4b6d179e17dfe2a0b5f60d47
PODFILE CHECKSUM: 2aff76ba0ac13439479560d1d03e9b4479f5c9e1
diff --git a/flutter/ios/Runner.xcodeproj/project.pbxproj b/flutter/ios/Runner.xcodeproj/project.pbxproj
index 0813abb11..4004fb493 100644
--- a/flutter/ios/Runner.xcodeproj/project.pbxproj
+++ b/flutter/ios/Runner.xcodeproj/project.pbxproj
@@ -159,7 +159,7 @@
97C146E61CF9000F007C117D /* Project object */ = {
isa = PBXProject;
attributes = {
- LastUpgradeCheck = 1300;
+ LastUpgradeCheck = 1430;
ORGANIZATIONNAME = "";
TargetAttributes = {
97C146ED1CF9000F007C117D = {
@@ -434,7 +434,7 @@
"-framework",
"\"video_player_avfoundation\"",
"-framework",
- "\"wakelock\"",
+ "\"wakelock_plus\"",
);
PRODUCT_BUNDLE_IDENTIFIER = com.carriez.flutterHbb;
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -632,7 +632,7 @@
"-framework",
"\"video_player_avfoundation\"",
"-framework",
- "\"wakelock\"",
+ "\"wakelock_plus\"",
);
PRODUCT_BUNDLE_IDENTIFIER = com.carriez.flutterHbb;
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -722,7 +722,7 @@
"-framework",
"\"video_player_avfoundation\"",
"-framework",
- "\"wakelock\"",
+ "\"wakelock_plus\"",
);
PRODUCT_BUNDLE_IDENTIFIER = com.carriez.flutterHbb;
PRODUCT_NAME = "$(TARGET_NAME)";
diff --git a/flutter/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/flutter/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
index c87d15a33..a6b826db2 100644
--- a/flutter/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
+++ b/flutter/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
@@ -1,6 +1,6 @@
????
CFBundleVersion
$(FLUTTER_BUILD_NUMBER)
+ CFBundleURLTypes
+
+
+ CFBundleTypeRole
+ Editor
+ CFBundleURLIconFile
+
+ CFBundleURLName
+ com.carriez.rustdesk
+ CFBundleURLSchemes
+
+ rustdesk
+
+
+
LSRequiresIPhoneOS
UIApplicationSupportsIndirectInputEvents
diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart
index 9c8404c56..4d23614ca 100644
--- a/flutter/lib/common.dart
+++ b/flutter/lib/common.dart
@@ -1955,6 +1955,7 @@ bool handleUriLink({List? cmdArgs, Uri? uri, String? uriString}) {
List? urlLinkToCmdArgs(Uri uri) {
String? command;
String? id;
+ final options = ["connect", "play", "file-transfer", "port-forward", "rdp"];
if (uri.authority.isEmpty &&
uri.path.split('').every((char) => char == '/')) {
return [];
@@ -1962,18 +1963,33 @@ List? urlLinkToCmdArgs(Uri uri) {
// For compatibility
command = '--connect';
id = uri.path.substring("/new/".length);
- } else if (['connect', "play", 'file-transfer', 'port-forward', 'rdp']
- .contains(uri.authority)) {
+ } else if (options.contains(uri.authority)) {
+ final optionIndex = options.indexOf(uri.authority);
command = '--${uri.authority}';
if (uri.path.length > 1) {
id = uri.path.substring(1);
}
+ if (isMobile && id != null) {
+ if (optionIndex == 0 || optionIndex == 1) {
+ connect(Get.context!, id);
+ } else if (optionIndex == 2) {
+ connect(Get.context!, id, isFileTransfer: true);
+ }
+ return null;
+ }
} else if (uri.authority.length > 2 && uri.path.length <= 1) {
// rustdesk://
command = '--connect';
id = uri.authority;
}
+ if (isMobile){
+ if (id != null){
+ connect(Get.context!, id);
+ return null;
+ }
+ }
+
List args = List.empty(growable: true);
if (command != null && id != null) {
args.add(command);
diff --git a/flutter/lib/common/widgets/dialog.dart b/flutter/lib/common/widgets/dialog.dart
index d1e14d2fb..2d2fbe63d 100644
--- a/flutter/lib/common/widgets/dialog.dart
+++ b/flutter/lib/common/widgets/dialog.dart
@@ -972,7 +972,7 @@ void showRestartRemoteDevice(PeerInfo pi, String id, SessionID sessionId,
title: Row(children: [
Icon(Icons.warning_rounded, color: Colors.redAccent, size: 28),
Flexible(
- child: Text(translate("Restart Remote Device"))
+ child: Text(translate("Restart remote device"))
.paddingOnly(left: 10)),
]),
content: Text(
@@ -1248,25 +1248,41 @@ customImageQualityDialog(SessionID sessionId, String id, FFI ffi) async {
double fpsInitValue = 30;
bool qualitySet = false;
bool fpsSet = false;
+
+ bool? direct;
+ try {
+ direct =
+ ConnectionTypeState.find(id).direct.value == ConnectionType.strDirect;
+ } catch (_) {}
+ bool hideFps = (await bind.mainIsUsingPublicServer() && direct != true) ||
+ versionCmp(ffi.ffiModel.pi.version, '1.2.0') < 0;
+ bool hideMoreQuality =
+ (await bind.mainIsUsingPublicServer() && direct != true) ||
+ versionCmp(ffi.ffiModel.pi.version, '1.2.2') < 0;
+
setCustomValues({double? quality, double? fps}) async {
if (quality != null) {
qualitySet = true;
await bind.sessionSetCustomImageQuality(
sessionId: sessionId, value: quality.toInt());
+ print("quality:$quality");
}
if (fps != null) {
fpsSet = true;
await bind.sessionSetCustomFps(sessionId: sessionId, fps: fps.toInt());
+ print("fps:$fps");
}
if (!qualitySet) {
qualitySet = true;
await bind.sessionSetCustomImageQuality(
sessionId: sessionId, value: qualityInitValue.toInt());
+ print("qualityInitValue:$qualityInitValue");
}
- if (!fpsSet) {
+ if (!hideFps && !fpsSet) {
fpsSet = true;
await bind.sessionSetCustomFps(
sessionId: sessionId, fps: fpsInitValue.toInt());
+ print("fpsInitValue:$fpsInitValue");
}
}
@@ -1279,7 +1295,9 @@ customImageQualityDialog(SessionID sessionId, String id, FFI ffi) async {
final quality = await bind.sessionGetCustomImageQuality(sessionId: sessionId);
qualityInitValue =
quality != null && quality.isNotEmpty ? quality[0].toDouble() : 50.0;
- if (qualityInitValue < 10 || qualityInitValue > 2000) {
+ if ((hideMoreQuality && qualityInitValue > 100) ||
+ qualityInitValue < 10 ||
+ qualityInitValue > 2000) {
qualityInitValue = 50;
}
// fps
@@ -1289,20 +1307,14 @@ customImageQualityDialog(SessionID sessionId, String id, FFI ffi) async {
if (fpsInitValue < 5 || fpsInitValue > 120) {
fpsInitValue = 30;
}
- bool? direct;
- try {
- direct =
- ConnectionTypeState.find(id).direct.value == ConnectionType.strDirect;
- } catch (_) {}
- bool notShowFps = (await bind.mainIsUsingPublicServer() && direct != true) ||
- versionCmp(ffi.ffiModel.pi.version, '1.2.0') < 0;
final content = customImageQualityWidget(
initQuality: qualityInitValue,
initFps: fpsInitValue,
setQuality: (v) => setCustomValues(quality: v),
setFps: (v) => setCustomValues(fps: v),
- showFps: !notShowFps);
+ showFps: !hideFps,
+ showMoreQuality: !hideMoreQuality);
msgBoxCommon(ffi.dialogManager, 'Custom Image Quality', content, [btnClose]);
}
diff --git a/flutter/lib/common/widgets/overlay.dart b/flutter/lib/common/widgets/overlay.dart
index b19034c68..cfe2e1927 100644
--- a/flutter/lib/common/widgets/overlay.dart
+++ b/flutter/lib/common/widgets/overlay.dart
@@ -27,45 +27,44 @@ class DraggableChatWindow extends StatelessWidget {
@override
Widget build(BuildContext context) {
return isIOS
- ? IOSDraggable (
- position: position,
- chatModel: chatModel,
- width: width,
- height: height,
- builder: (context) {
- return Column(
- children: [
- _buildMobileAppBar(context),
- Expanded(
- child: ChatPage(chatModel: chatModel),
- ),
- ],
- );
- },
- )
- : Draggable(
- checkKeyboard: true,
- position: position,
- width: width,
- height: height,
- chatModel: chatModel,
- builder: (context, onPanUpdate) {
- final child =
- Scaffold(
- resizeToAvoidBottomInset: false,
- appBar: CustomAppBar(
- onPanUpdate: onPanUpdate,
- appBar: isDesktop
- ? _buildDesktopAppBar(context)
- : _buildMobileAppBar(context),
+ ? IOSDraggable(
+ position: position,
+ chatModel: chatModel,
+ width: width,
+ height: height,
+ builder: (context) {
+ return Column(
+ children: [
+ _buildMobileAppBar(context),
+ Expanded(
+ child: ChatPage(chatModel: chatModel),
),
- body: ChatPage(chatModel: chatModel),
- );
- return Container(
- decoration:
- BoxDecoration(border: Border.all(color: MyTheme.border)),
- child: child);
- });
+ ],
+ );
+ },
+ )
+ : Draggable(
+ checkKeyboard: true,
+ position: position,
+ width: width,
+ height: height,
+ chatModel: chatModel,
+ builder: (context, onPanUpdate) {
+ final child = Scaffold(
+ resizeToAvoidBottomInset: false,
+ appBar: CustomAppBar(
+ onPanUpdate: onPanUpdate,
+ appBar: isDesktop
+ ? _buildDesktopAppBar(context)
+ : _buildMobileAppBar(context),
+ ),
+ body: ChatPage(chatModel: chatModel),
+ );
+ return Container(
+ decoration:
+ BoxDecoration(border: Border.all(color: MyTheme.border)),
+ child: child);
+ });
}
Widget _buildMobileAppBar(BuildContext context) {
@@ -354,14 +353,14 @@ class _DraggableState extends State {
}
class IOSDraggable extends StatefulWidget {
- const IOSDraggable({
- Key? key,
- this.position = Offset.zero,
- this.chatModel,
- required this.width,
- required this.height,
- required this.builder})
- : super(key: key);
+ const IOSDraggable(
+ {Key? key,
+ this.position = Offset.zero,
+ this.chatModel,
+ required this.width,
+ required this.height,
+ required this.builder})
+ : super(key: key);
final Offset position;
final ChatModel? chatModel;
@@ -423,7 +422,7 @@ class _IOSDraggableState extends State {
_lastBottomHeight = bottomHeight;
}
-@override
+ @override
Widget build(BuildContext context) {
checkKeyboard();
return Stack(
@@ -439,12 +438,12 @@ class _IOSDraggableState extends State {
_chatModel?.setChatWindowPosition(_position);
},
child: Material(
- child:
- Container(
- width: _width,
- height: _height,
- decoration: BoxDecoration(border: Border.all(color: MyTheme.border)),
- child: widget.builder(context),
+ child: Container(
+ width: _width,
+ height: _height,
+ decoration:
+ BoxDecoration(border: Border.all(color: MyTheme.border)),
+ child: widget.builder(context),
),
),
),
@@ -499,6 +498,7 @@ class QualityMonitor extends StatelessWidget {
"${qualityMonitorModel.data.targetBitrate ?? '-'}kb"),
_row(
"Codec", qualityMonitorModel.data.codecFormat ?? '-'),
+ _row("Chroma", qualityMonitorModel.data.chroma ?? '-'),
],
),
)
diff --git a/flutter/lib/common/widgets/peer_card.dart b/flutter/lib/common/widgets/peer_card.dart
index a071d8f40..406bab66c 100644
--- a/flutter/lib/common/widgets/peer_card.dart
+++ b/flutter/lib/common/widgets/peer_card.dart
@@ -495,7 +495,7 @@ abstract class BasePeerCard extends StatelessWidget {
return _connectCommonAction(
context,
id,
- translate('Transfer File'),
+ translate('Transfer file'),
isFileTransfer: true,
);
}
@@ -505,7 +505,7 @@ abstract class BasePeerCard extends StatelessWidget {
return _connectCommonAction(
context,
id,
- translate('TCP Tunneling'),
+ translate('TCP tunneling'),
isTcpTunneling: true,
);
}
@@ -568,7 +568,7 @@ abstract class BasePeerCard extends StatelessWidget {
MenuEntryBase _createShortCutAction(String id) {
return MenuEntryButton(
childBuilder: (TextStyle? style) => Text(
- translate('Create Desktop Shortcut'),
+ translate('Create desktop shortcut'),
style: style,
),
proc: () {
@@ -818,7 +818,7 @@ abstract class BasePeerCard extends StatelessWidget {
MenuEntryBase _addToAb(Peer peer) {
return MenuEntryButton(
childBuilder: (TextStyle? style) => Text(
- translate('Add to Address Book'),
+ translate('Add to address book'),
style: style,
),
proc: () {
diff --git a/flutter/lib/common/widgets/peer_tab_page.dart b/flutter/lib/common/widgets/peer_tab_page.dart
index d472d086f..f6844e837 100644
--- a/flutter/lib/common/widgets/peer_tab_page.dart
+++ b/flutter/lib/common/widgets/peer_tab_page.dart
@@ -75,9 +75,11 @@ class _PeerTabPageState extends State
void initState() {
final uiType = bind.getLocalFlutterOption(k: 'peer-card-ui-type');
if (uiType != '') {
- peerCardUiType.value = int.parse(uiType) == PeerUiType.list.index
- ? PeerUiType.list
- : PeerUiType.grid;
+ peerCardUiType.value = int.parse(uiType) == 0
+ ? PeerUiType.grid
+ : int.parse(uiType) == 1
+ ? PeerUiType.tile
+ : PeerUiType.list;
}
hideAbTagsPanel.value =
bind.mainGetLocalOption(key: "hideAbTagsPanel").isNotEmpty;
@@ -454,7 +456,7 @@ class _PeerTabPageState extends State
});
},
child: Tooltip(
- message: translate('Add to Address Book'),
+ message: translate('Add to address book'),
child: Icon(model.icons[PeerTabIndex.ab.index])),
).marginOnly(left: isMobile ? 11 : 6),
);
@@ -763,8 +765,6 @@ class PeerViewDropdown extends StatefulWidget {
}
class _PeerViewDropdownState extends State {
- RelativeRect menuPos = RelativeRect.fromLTRB(0, 0, 0, 0);
-
@override
Widget build(BuildContext context) {
final List types = [PeerUiType.grid, PeerUiType.tile, PeerUiType.list];
@@ -804,6 +804,7 @@ class _PeerViewDropdownState extends State {
))));
}
+ var menuPos = RelativeRect.fromLTRB(0, 0, 0, 0);
return _hoverAction(
context: context,
child: Tooltip(
@@ -819,16 +820,14 @@ class _PeerViewDropdownState extends State {
onTapDown: (details) {
final x = details.globalPosition.dx;
final y = details.globalPosition.dy;
- setState(() {
- menuPos = RelativeRect.fromLTRB(x, y, x, y);
- });
+ menuPos = RelativeRect.fromLTRB(x, y, x, y);
},
onTap: () => showMenu(
context: context,
position: menuPos,
items: items,
elevation: 8,
- ),
+ )
);
}
}
diff --git a/flutter/lib/common/widgets/setting_widgets.dart b/flutter/lib/common/widgets/setting_widgets.dart
index 771b65ab5..26fd219ed 100644
--- a/flutter/lib/common/widgets/setting_widgets.dart
+++ b/flutter/lib/common/widgets/setting_widgets.dart
@@ -10,7 +10,11 @@ customImageQualityWidget(
required double initFps,
required Function(double) setQuality,
required Function(double) setFps,
- required bool showFps}) {
+ required bool showFps,
+ required bool showMoreQuality}) {
+ if (!showMoreQuality && initQuality > 100) {
+ initQuality = 50;
+ }
final qualityValue = initQuality.obs;
final fpsValue = initFps.obs;
@@ -69,7 +73,7 @@ customImageQualityWidget(
style: const TextStyle(fontSize: 15),
)),
// mobile doesn't have enough space
- if (!isMobile)
+ if (showMoreQuality && !isMobile)
Expanded(
flex: 1,
child: Row(
@@ -85,7 +89,7 @@ customImageQualityWidget(
))
],
)),
- if (isMobile)
+ if (showMoreQuality && isMobile)
Obx(() => Row(
children: [
Expanded(
@@ -160,7 +164,8 @@ customImageQualitySetting() {
setFps: (v) {
bind.mainSetUserDefaultOption(key: fpsKey, value: v.toString());
},
- showFps: true);
+ showFps: true,
+ showMoreQuality: true);
}
Future setServerConfig(
@@ -265,7 +270,7 @@ List ServerConfigImportExportWidgets(
return [
Tooltip(
- message: translate('Import Server Config'),
+ message: translate('Import server config'),
child: IconButton(
icon: Icon(Icons.paste, color: Colors.grey), onPressed: import),
),
diff --git a/flutter/lib/common/widgets/toolbar.dart b/flutter/lib/common/widgets/toolbar.dart
index 28b10785b..f2f9d551c 100644
--- a/flutter/lib/common/widgets/toolbar.dart
+++ b/flutter/lib/common/widgets/toolbar.dart
@@ -133,7 +133,7 @@ List toolbarControls(BuildContext context, String id, FFI ffi) {
if (isDesktop) {
v.add(
TTextMenu(
- child: Text(translate('Transfer File')),
+ child: Text(translate('Transfer file')),
onPressed: () => connect(context, id, isFileTransfer: true)),
);
}
@@ -141,7 +141,7 @@ List toolbarControls(BuildContext context, String id, FFI ffi) {
if (isDesktop) {
v.add(
TTextMenu(
- child: Text(translate('TCP Tunneling')),
+ child: Text(translate('TCP tunneling')),
onPressed: () => connect(context, id, isTcpTunneling: true)),
);
}
@@ -176,7 +176,7 @@ List toolbarControls(BuildContext context, String id, FFI ffi) {
pi.platform == kPeerPlatformMacOS)) {
v.add(
TTextMenu(
- child: Text(translate('Restart Remote Device')),
+ child: Text(translate('Restart remote device')),
onPressed: () =>
showRestartRemoteDevice(pi, id, sessionId, ffi.dialogManager)),
);
@@ -191,6 +191,7 @@ List toolbarControls(BuildContext context, String id, FFI ffi) {
}
// blockUserInput
if (ffi.ffiModel.keyboard &&
+ ffi.ffiModel.permissions['block_input'] != false &&
pi.platform == kPeerPlatformWindows) // privacy-mode != true ??
{
v.add(TTextMenu(
@@ -436,9 +437,9 @@ Future> toolbarDisplayToggle(
child: Text(translate('Mute'))));
}
// file copy and paste
- if (Platform.isWindows &&
- pi.platform == kPeerPlatformWindows &&
- perms['file'] != false) {
+ if (perms['file'] != false &&
+ bind.mainHasFileClipboard() &&
+ pi.platformAdditions.containsKey(kPlatformAdditionsHasFileClipboard)) {
final option = 'enable-file-transfer';
final value =
bind.sessionGetToggleOptionSync(sessionId: sessionId, arg: option);
@@ -547,5 +548,22 @@ Future> toolbarDisplayToggle(
child: Text(translate('Use all my displays for the remote session'))));
}
+ // 444
+ final codec_format = ffi.qualityMonitorModel.data.codecFormat;
+ if (versionCmp(pi.version, "1.2.4") >= 0 &&
+ (codec_format == "AV1" || codec_format == "VP9")) {
+ final option = 'i444';
+ final value =
+ bind.sessionGetToggleOptionSync(sessionId: sessionId, arg: option);
+ v.add(TToggleMenu(
+ value: value,
+ onChanged: (value) async {
+ if (value == null) return;
+ await bind.sessionToggleOption(sessionId: sessionId, value: option);
+ bind.sessionChangePreferCodec(sessionId: sessionId);
+ },
+ child: Text(translate('True color (4:4:4)'))));
+ }
+
return v;
}
diff --git a/flutter/lib/consts.dart b/flutter/lib/consts.dart
index 073edbfec..460894c31 100644
--- a/flutter/lib/consts.dart
+++ b/flutter/lib/consts.dart
@@ -22,6 +22,7 @@ const String kPlatformAdditionsIsWayland = "is_wayland";
const String kPlatformAdditionsHeadless = "headless";
const String kPlatformAdditionsIsInstalled = "is_installed";
const String kPlatformAdditionsVirtualDisplays = "virtual_displays";
+const String kPlatformAdditionsHasFileClipboard = "has_file_clipboard";
const String kPeerPlatformWindows = "Windows";
const String kPeerPlatformLinux = "Linux";
diff --git a/flutter/lib/desktop/pages/connection_page.dart b/flutter/lib/desktop/pages/connection_page.dart
index bf923d388..6ad252384 100644
--- a/flutter/lib/desktop/pages/connection_page.dart
+++ b/flutter/lib/desktop/pages/connection_page.dart
@@ -50,6 +50,7 @@ class _ConnectionPageState extends State
return list.sublist(0, n);
}
}
+
bool isPeersLoading = false;
bool isPeersLoaded = false;
@@ -81,7 +82,7 @@ class _ConnectionPageState extends State
if (Get.isRegistered()) {
Get.delete();
}
- if (Get.isRegistered()){
+ if (Get.isRegistered()) {
Get.delete();
}
super.dispose();
@@ -157,9 +158,9 @@ class _ConnectionPageState extends State
await Future.delayed(Duration(milliseconds: 100));
peers = await getAllPeers();
setState(() {
- isPeersLoading = false;
- isPeersLoaded = true;
- });
+ isPeersLoading = false;
+ isPeersLoaded = true;
+ });
}
/// UI for the remote ID TextField.
@@ -177,148 +178,173 @@ class _ConnectionPageState extends State
Row(
children: [
Expanded(
- child: AutoSizeText(
- translate('Control Remote Desktop'),
- maxLines: 1,
- style: Theme.of(context)
- .textTheme
- .titleLarge
- ?.merge(TextStyle(height: 1)),
- ),
- ),
+ child: Row(
+ children: [
+ AutoSizeText(
+ translate('Control Remote Desktop'),
+ maxLines: 1,
+ style: Theme.of(context)
+ .textTheme
+ .titleLarge
+ ?.merge(TextStyle(height: 1)),
+ ).marginOnly(right: 4),
+ Tooltip(
+ waitDuration: Duration(milliseconds: 0),
+ message: translate("id_input_tip"),
+ child: Icon(
+ Icons.help_outline_outlined,
+ size: 16,
+ color: Theme.of(context)
+ .textTheme
+ .titleLarge
+ ?.color
+ ?.withOpacity(0.5),
+ ),
+ ),
+ ],
+ )),
],
).marginOnly(bottom: 15),
Row(
children: [
Expanded(
- child:
- Autocomplete(
- optionsBuilder: (TextEditingValue textEditingValue) {
- if (textEditingValue.text == '') {
- return const Iterable.empty();
- }
- else if (peers.isEmpty && !isPeersLoaded) {
- Peer emptyPeer = Peer(
- id: '',
- username: '',
- hostname: '',
- alias: '',
- platform: '',
- tags: [],
- hash: '',
- forceAlwaysRelay: false,
- rdpPort: '',
- rdpUsername: '',
- loginName: '',
+ child: Autocomplete(
+ optionsBuilder: (TextEditingValue textEditingValue) {
+ if (textEditingValue.text == '') {
+ return const Iterable.empty();
+ } else if (peers.isEmpty && !isPeersLoaded) {
+ Peer emptyPeer = Peer(
+ id: '',
+ username: '',
+ hostname: '',
+ alias: '',
+ platform: '',
+ tags: [],
+ hash: '',
+ forceAlwaysRelay: false,
+ rdpPort: '',
+ rdpUsername: '',
+ loginName: '',
+ );
+ return [emptyPeer];
+ } else {
+ String textWithoutSpaces =
+ textEditingValue.text.replaceAll(" ", "");
+ if (int.tryParse(textWithoutSpaces) != null) {
+ textEditingValue = TextEditingValue(
+ text: textWithoutSpaces,
+ selection: textEditingValue.selection,
);
- return [emptyPeer];
}
- else {
- String textWithoutSpaces = textEditingValue.text.replaceAll(" ", "");
- if (int.tryParse(textWithoutSpaces) != null) {
- textEditingValue = TextEditingValue(
- text: textWithoutSpaces,
- selection: textEditingValue.selection,
- );
- }
- String textToFind = textEditingValue.text.toLowerCase();
+ String textToFind = textEditingValue.text.toLowerCase();
- return peers.where((peer) =>
- peer.id.toLowerCase().contains(textToFind) ||
- peer.username.toLowerCase().contains(textToFind) ||
- peer.hostname.toLowerCase().contains(textToFind) ||
- peer.alias.toLowerCase().contains(textToFind))
- .toList();
+ return peers
+ .where((peer) =>
+ peer.id.toLowerCase().contains(textToFind) ||
+ peer.username
+ .toLowerCase()
+ .contains(textToFind) ||
+ peer.hostname
+ .toLowerCase()
+ .contains(textToFind) ||
+ peer.alias.toLowerCase().contains(textToFind))
+ .toList();
+ }
+ },
+ fieldViewBuilder: (
+ BuildContext context,
+ TextEditingController fieldTextEditingController,
+ FocusNode fieldFocusNode,
+ VoidCallback onFieldSubmitted,
+ ) {
+ fieldTextEditingController.text = _idController.text;
+ Get.put(fieldTextEditingController);
+ fieldFocusNode.addListener(() async {
+ _idInputFocused.value = fieldFocusNode.hasFocus;
+ if (fieldFocusNode.hasFocus && !isPeersLoading) {
+ _fetchPeers();
}
- },
+ });
+ final textLength =
+ fieldTextEditingController.value.text.length;
+ // select all to facilitate removing text, just following the behavior of address input of chrome
+ fieldTextEditingController.selection =
+ TextSelection(baseOffset: 0, extentOffset: textLength);
+ return Obx(() => TextField(
+ autocorrect: false,
+ enableSuggestions: false,
+ keyboardType: TextInputType.visiblePassword,
+ focusNode: fieldFocusNode,
+ style: const TextStyle(
+ fontFamily: 'WorkSans',
+ fontSize: 22,
+ height: 1.4,
+ ),
+ maxLines: 1,
+ cursorColor:
+ Theme.of(context).textTheme.titleLarge?.color,
+ decoration: InputDecoration(
+ filled: false,
+ counterText: '',
+ hintText: _idInputFocused.value
+ ? null
+ : translate('Enter Remote ID'),
+ contentPadding: const EdgeInsets.symmetric(
+ horizontal: 15, vertical: 13)),
+ controller: fieldTextEditingController,
+ inputFormatters: [IDTextInputFormatter()],
+ onChanged: (v) {
+ _idController.id = v;
+ },
+ ));
+ },
+ onSelected: (option) {
+ setState(() {
+ _idController.id = option.id;
+ FocusScope.of(context).unfocus();
+ });
+ },
+ optionsViewBuilder: (BuildContext context,
+ AutocompleteOnSelected onSelected,
+ Iterable options) {
+ double maxHeight = options.length * 50;
+ maxHeight = maxHeight > 200 ? 200 : maxHeight;
- fieldViewBuilder: (BuildContext context,
- TextEditingController fieldTextEditingController,
- FocusNode fieldFocusNode ,
- VoidCallback onFieldSubmitted,
- ) {
- fieldTextEditingController.text = _idController.text;
- Get.put(fieldTextEditingController);
- fieldFocusNode.addListener(() async {
- _idInputFocused.value = fieldFocusNode.hasFocus;
- if (fieldFocusNode.hasFocus && !isPeersLoading){
- _fetchPeers();
- }
- });
- final textLength = fieldTextEditingController.value.text.length;
- // select all to facilitate removing text, just following the behavior of address input of chrome
- fieldTextEditingController.selection = TextSelection(baseOffset: 0, extentOffset: textLength);
- return Obx(() =>
- TextField(
- maxLength: 90,
- autocorrect: false,
- enableSuggestions: false,
- keyboardType: TextInputType.visiblePassword,
- focusNode: fieldFocusNode,
- style: const TextStyle(
- fontFamily: 'WorkSans',
- fontSize: 22,
- height: 1.4,
- ),
- maxLines: 1,
- cursorColor: Theme.of(context).textTheme.titleLarge?.color,
- decoration: InputDecoration(
- filled: false,
- counterText: '',
- hintText: _idInputFocused.value
- ? null
- : translate('Enter Remote ID'),
- contentPadding: const EdgeInsets.symmetric(
- horizontal: 15, vertical: 13)),
- controller: fieldTextEditingController,
- inputFormatters: [IDTextInputFormatter()],
- onChanged: (v) {
- _idController.id = v;
- },
- ));
- },
- onSelected: (option) {
- setState(() {
- _idController.id = option.id;
- FocusScope.of(context).unfocus();
- });
- },
- optionsViewBuilder: (BuildContext context, AutocompleteOnSelected onSelected, Iterable options) {
- double maxHeight = options.length * 50;
- maxHeight = maxHeight > 200 ? 200 : maxHeight;
-
- return Align(
- alignment: Alignment.topLeft,
- child: ClipRRect(
+ return Align(
+ alignment: Alignment.topLeft,
+ child: ClipRRect(
borderRadius: BorderRadius.circular(5),
child: Material(
- elevation: 4,
- child: ConstrainedBox(
- constraints: BoxConstraints(
- maxHeight: maxHeight,
- maxWidth: 319,
- ),
- child: peers.isEmpty && isPeersLoading
- ? Container(
- height: 80,
- child: Center(
- child: CircularProgressIndicator(
- strokeWidth: 2,
- ),
- )
- )
- : Padding(
- padding: const EdgeInsets.only(top: 5),
- child: ListView(
- children: options.map((peer) => AutocompletePeerTile(onSelect: () => onSelected(peer), peer: peer)).toList(),
+ elevation: 4,
+ child: ConstrainedBox(
+ constraints: BoxConstraints(
+ maxHeight: maxHeight,
+ maxWidth: 319,
),
+ child: peers.isEmpty && isPeersLoading
+ ? Container(
+ height: 80,
+ child: Center(
+ child: CircularProgressIndicator(
+ strokeWidth: 2,
+ ),
+ ))
+ : Padding(
+ padding: const EdgeInsets.only(top: 5),
+ child: ListView(
+ children: options
+ .map((peer) => AutocompletePeerTile(
+ onSelect: () =>
+ onSelected(peer),
+ peer: peer))
+ .toList(),
+ ),
+ ),
),
- ),
- )),
- );
- },
- )
- ),
+ )),
+ );
+ },
+ )),
],
),
Padding(
@@ -329,7 +355,7 @@ class _ConnectionPageState extends State
Button(
isOutline: true,
onTap: () => onConnect(isFileTransfer: true),
- text: "Transfer File",
+ text: "Transfer file",
),
const SizedBox(
width: 17,
@@ -382,7 +408,7 @@ class _ConnectionPageState extends State
onTap: () async {
await start_service(true);
},
- child: Text(translate("Start Service"),
+ child: Text(translate("Start service"),
style: TextStyle(
decoration: TextDecoration.underline,
fontSize: em)))
diff --git a/flutter/lib/desktop/pages/desktop_home_page.dart b/flutter/lib/desktop/pages/desktop_home_page.dart
index 59118f7cd..25670e628 100644
--- a/flutter/lib/desktop/pages/desktop_home_page.dart
+++ b/flutter/lib/desktop/pages/desktop_home_page.dart
@@ -336,11 +336,17 @@ class _DesktopHomePageState extends State
}
if (Platform.isWindows) {
if (!bind.mainIsInstalled()) {
- return buildInstallCard(
- "", "install_tip", "Install", bind.mainGotoInstall);
+ return buildInstallCard("", "install_tip", "Install", () async {
+ await rustDeskWinManager.closeAllSubWindows();
+ bind.mainGotoInstall();
+ });
} else if (bind.mainIsInstalledLowerVersion()) {
- return buildInstallCard("Status", "Your installation is lower version.",
- "Click to upgrade", bind.mainUpdateMe);
+ return buildInstallCard(
+ "Status", "Your installation is lower version.", "Click to upgrade",
+ () async {
+ await rustDeskWinManager.closeAllSubWindows();
+ bind.mainUpdateMe();
+ });
}
} else if (Platform.isMacOS) {
if (!bind.mainIsCanScreenRecording(prompt: false)) {
@@ -384,13 +390,16 @@ class _DesktopHomePageState extends State
final keyShowSelinuxHelpTip = "show-selinux-help-tip";
if (bind.mainGetLocalOption(key: keyShowSelinuxHelpTip) != 'N') {
LinuxCards.add(buildInstallCard(
- "Warning", "selinux_tip", "", () async {},
- marginTop: LinuxCards.isEmpty ? 20.0 : 5.0,
- help: 'Help',
- link:
- 'https://rustdesk.com/docs/en/client/linux/#permissions-issue',
- closeButton: true,
- closeOption: keyShowSelinuxHelpTip,
+ "Warning",
+ "selinux_tip",
+ "",
+ () async {},
+ marginTop: LinuxCards.isEmpty ? 20.0 : 5.0,
+ help: 'Help',
+ link:
+ 'https://rustdesk.com/docs/en/client/linux/#permissions-issue',
+ closeButton: true,
+ closeOption: keyShowSelinuxHelpTip,
));
}
}
@@ -418,7 +427,11 @@ class _DesktopHomePageState extends State
Widget buildInstallCard(String title, String content, String btnText,
GestureTapCallback onPressed,
- {double marginTop = 20.0, String? help, String? link, bool? closeButton, String? closeOption}) {
+ {double marginTop = 20.0,
+ String? help,
+ String? link,
+ bool? closeButton,
+ String? closeOption}) {
void closeCard() async {
if (closeOption != null) {
await bind.mainSetLocalOption(key: closeOption, value: 'N');
@@ -439,89 +452,90 @@ class _DesktopHomePageState extends State
Container(
margin: EdgeInsets.only(top: marginTop),
child: Container(
- decoration: BoxDecoration(
- gradient: LinearGradient(
- begin: Alignment.centerLeft,
- end: Alignment.centerRight,
- colors: [
- Color.fromARGB(255, 226, 66, 188),
- Color.fromARGB(255, 244, 114, 124),
- ],
- )),
- padding: EdgeInsets.all(20),
- child: Column(
- mainAxisAlignment: MainAxisAlignment.start,
- crossAxisAlignment: CrossAxisAlignment.start,
- children: (title.isNotEmpty
- ? [
- Center(
- child: Text(
- translate(title),
- style: TextStyle(
- color: Colors.white,
- fontWeight: FontWeight.bold,
- fontSize: 15),
- ).marginOnly(bottom: 6)),
- ]
- : []) +
- [
- Text(
- translate(content),
- style: TextStyle(
- height: 1.5,
- color: Colors.white,
- fontWeight: FontWeight.normal,
- fontSize: 13),
- ).marginOnly(bottom: 20)
- ] +
- (btnText.isNotEmpty
- ? [
- Row(
- mainAxisAlignment: MainAxisAlignment.center,
- children: [
- FixedWidthButton(
- width: 150,
- padding: 8,
- isOutline: true,
- text: translate(btnText),
- textColor: Colors.white,
- borderColor: Colors.white,
- textSize: 20,
- radius: 10,
- onTap: onPressed,
- )
- ])
- ]
- : []) +
- (help != null
- ? [
- Center(
- child: InkWell(
- onTap: () async =>
- await launchUrl(Uri.parse(link!)),
+ decoration: BoxDecoration(
+ gradient: LinearGradient(
+ begin: Alignment.centerLeft,
+ end: Alignment.centerRight,
+ colors: [
+ Color.fromARGB(255, 226, 66, 188),
+ Color.fromARGB(255, 244, 114, 124),
+ ],
+ )),
+ padding: EdgeInsets.all(20),
+ child: Column(
+ mainAxisAlignment: MainAxisAlignment.start,
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: (title.isNotEmpty
+ ? [
+ Center(
child: Text(
- translate(help),
- style: TextStyle(
- decoration: TextDecoration.underline,
- color: Colors.white,
- fontSize: 12),
- )).marginOnly(top: 6)),
- ]
- : []))),
+ translate(title),
+ style: TextStyle(
+ color: Colors.white,
+ fontWeight: FontWeight.bold,
+ fontSize: 15),
+ ).marginOnly(bottom: 6)),
+ ]
+ : []) +
+ [
+ Text(
+ translate(content),
+ style: TextStyle(
+ height: 1.5,
+ color: Colors.white,
+ fontWeight: FontWeight.normal,
+ fontSize: 13),
+ ).marginOnly(bottom: 20)
+ ] +
+ (btnText.isNotEmpty
+ ? [
+ Row(
+ mainAxisAlignment: MainAxisAlignment.center,
+ children: [
+ FixedWidthButton(
+ width: 150,
+ padding: 8,
+ isOutline: true,
+ text: translate(btnText),
+ textColor: Colors.white,
+ borderColor: Colors.white,
+ textSize: 20,
+ radius: 10,
+ onTap: onPressed,
+ )
+ ])
+ ]
+ : []) +
+ (help != null
+ ? [
+ Center(
+ child: InkWell(
+ onTap: () async =>
+ await launchUrl(Uri.parse(link!)),
+ child: Text(
+ translate(help),
+ style: TextStyle(
+ decoration:
+ TextDecoration.underline,
+ color: Colors.white,
+ fontSize: 12),
+ )).marginOnly(top: 6)),
+ ]
+ : []))),
),
if (closeButton != null && closeButton == true)
- Positioned(
- top: 18,
- right: 0,
- child: IconButton(
- icon: Icon(
- Icons.close,
- color: Colors.white,
- size: 20,
+ Positioned(
+ top: 18,
+ right: 0,
+ child: IconButton(
+ icon: Icon(
+ Icons.close,
+ color: Colors.white,
+ size: 20,
+ ),
+ onPressed: closeCard,
),
- onPressed: closeCard,
),
- ),
],
);
}
diff --git a/flutter/lib/desktop/pages/desktop_setting_page.dart b/flutter/lib/desktop/pages/desktop_setting_page.dart
index 416cbaa5e..3c8b5878d 100644
--- a/flutter/lib/desktop/pages/desktop_setting_page.dart
+++ b/flutter/lib/desktop/pages/desktop_setting_page.dart
@@ -632,23 +632,27 @@ class _SafetyState extends State<_Safety> with AutomaticKeepAliveClientMixin {
}).marginOnly(left: _kContentHMargin),
Column(
children: [
- _OptionCheckBox(context, 'Enable Keyboard/Mouse', 'enable-keyboard',
+ _OptionCheckBox(context, 'Enable keyboard/mouse', 'enable-keyboard',
enabled: enabled, fakeValue: fakeValue),
- _OptionCheckBox(context, 'Enable Clipboard', 'enable-clipboard',
+ _OptionCheckBox(context, 'Enable clipboard', 'enable-clipboard',
enabled: enabled, fakeValue: fakeValue),
_OptionCheckBox(
- context, 'Enable File Transfer', 'enable-file-transfer',
+ context, 'Enable file transfer', 'enable-file-transfer',
enabled: enabled, fakeValue: fakeValue),
- _OptionCheckBox(context, 'Enable Audio', 'enable-audio',
+ _OptionCheckBox(context, 'Enable audio', 'enable-audio',
enabled: enabled, fakeValue: fakeValue),
- _OptionCheckBox(context, 'Enable TCP Tunneling', 'enable-tunnel',
+ _OptionCheckBox(context, 'Enable TCP tunneling', 'enable-tunnel',
enabled: enabled, fakeValue: fakeValue),
_OptionCheckBox(
- context, 'Enable Remote Restart', 'enable-remote-restart',
+ context, 'Enable remote restart', 'enable-remote-restart',
enabled: enabled, fakeValue: fakeValue),
_OptionCheckBox(
- context, 'Enable Recording Session', 'enable-record-session',
+ context, 'Enable recording session', 'enable-record-session',
enabled: enabled, fakeValue: fakeValue),
+ if (Platform.isWindows)
+ _OptionCheckBox(
+ context, 'Enable blocking user input', 'enable-block-input',
+ enabled: enabled, fakeValue: fakeValue),
_OptionCheckBox(context, 'Enable remote configuration modification',
'allow-remote-config-modification',
enabled: enabled, fakeValue: fakeValue),
@@ -769,7 +773,7 @@ class _SafetyState extends State<_Safety> with AutomaticKeepAliveClientMixin {
bool enabled = !locked;
return _Card(title: 'Security', children: [
shareRdp(context, enabled),
- _OptionCheckBox(context, 'Deny LAN Discovery', 'enable-lan-discovery',
+ _OptionCheckBox(context, 'Deny LAN discovery', 'enable-lan-discovery',
reverse: true, enabled: enabled),
...directIp(context),
whitelist(),
@@ -809,7 +813,7 @@ class _SafetyState extends State<_Safety> with AutomaticKeepAliveClientMixin {
update() => setState(() {});
RxBool applyEnabled = false.obs;
return [
- _OptionCheckBox(context, 'Enable Direct IP Access', 'direct-server',
+ _OptionCheckBox(context, 'Enable direct IP access', 'direct-server',
update: update, enabled: !locked),
() {
// Simple temp wrapper for PR check
@@ -1320,6 +1324,7 @@ class _DisplayState extends State<_Display> {
otherRow('Lock after session end', 'lock_after_session_end'),
otherRow('Privacy mode', 'privacy_mode'),
otherRow('Reverse mouse wheel', 'reverse_mouse_wheel'),
+ otherRow('True color (4:4:4)', 'i444'),
];
if (useTextureRender) {
children.add(otherRow('Show displays as individual windows',
diff --git a/flutter/lib/desktop/pages/file_manager_page.dart b/flutter/lib/desktop/pages/file_manager_page.dart
index 1ac7987d7..b8a897a65 100644
--- a/flutter/lib/desktop/pages/file_manager_page.dart
+++ b/flutter/lib/desktop/pages/file_manager_page.dart
@@ -15,7 +15,7 @@ import 'package:flutter_hbb/desktop/widgets/tabbar_widget.dart';
import 'package:flutter_hbb/models/file_model.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:get/get.dart';
-import 'package:wakelock/wakelock.dart';
+import 'package:wakelock_plus/wakelock_plus.dart';
import '../../consts.dart';
import '../../desktop/widgets/material_mod_popup_menu.dart' as mod_menu;
@@ -91,7 +91,7 @@ class _FileManagerPageState extends State
});
Get.put(_ffi, tag: 'ft_${widget.id}');
if (!Platform.isLinux) {
- Wakelock.enable();
+ WakelockPlus.enable();
}
debugPrint("File manager page init success with id ${widget.id}");
_ffi.dialogManager.setOverlayState(_overlayKeyState);
@@ -104,7 +104,7 @@ class _FileManagerPageState extends State
_ffi.close();
_ffi.dialogManager.dismissAll();
if (!Platform.isLinux) {
- Wakelock.disable();
+ WakelockPlus.disable();
}
Get.delete(tag: 'ft_${widget.id}');
});
@@ -1126,10 +1126,11 @@ class _FileManagerViewState extends State {
void _onSelectedChanged(SelectedItems selectedItems, List entries,
Entry entry, bool isLocal) {
- final isCtrlDown = RawKeyboard.instance.keysPressed
- .contains(LogicalKeyboardKey.controlLeft);
+ final isCtrlDown = RawKeyboard.instance.keysPressed.contains(LogicalKeyboardKey.controlLeft) ||
+ RawKeyboard.instance.keysPressed.contains(LogicalKeyboardKey.controlRight);
final isShiftDown =
- RawKeyboard.instance.keysPressed.contains(LogicalKeyboardKey.shiftLeft);
+ RawKeyboard.instance.keysPressed.contains(LogicalKeyboardKey.shiftLeft) ||
+ RawKeyboard.instance.keysPressed.contains(LogicalKeyboardKey.shiftRight);
if (isCtrlDown) {
if (selectedItems.items.contains(entry)) {
selectedItems.remove(entry);
diff --git a/flutter/lib/desktop/pages/remote_page.dart b/flutter/lib/desktop/pages/remote_page.dart
index ffc29b02f..5b67ed77b 100644
--- a/flutter/lib/desktop/pages/remote_page.dart
+++ b/flutter/lib/desktop/pages/remote_page.dart
@@ -8,7 +8,7 @@ import 'package:flutter_custom_cursor/cursor_manager.dart'
as custom_cursor_manager;
import 'package:get/get.dart';
import 'package:provider/provider.dart';
-import 'package:wakelock/wakelock.dart';
+import 'package:wakelock_plus/wakelock_plus.dart';
import 'package:flutter_custom_cursor/flutter_custom_cursor.dart';
import 'package:flutter_improved_scrolling/flutter_improved_scrolling.dart';
@@ -123,7 +123,7 @@ class _RemotePageState extends State
.showLoading(translate('Connecting...'), onCancel: closeConnection);
});
if (!Platform.isLinux) {
- Wakelock.enable();
+ WakelockPlus.enable();
}
_ffi.ffiModel.updateEventListener(sessionId, widget.id);
@@ -183,7 +183,7 @@ class _RemotePageState extends State
_isWindowBlur = false;
}
if (!Platform.isLinux) {
- Wakelock.enable();
+ WakelockPlus.enable();
}
}
@@ -192,7 +192,7 @@ class _RemotePageState extends State
void onWindowMaximize() {
super.onWindowMaximize();
if (!Platform.isLinux) {
- Wakelock.enable();
+ WakelockPlus.enable();
}
}
@@ -200,7 +200,7 @@ class _RemotePageState extends State
void onWindowMinimize() {
super.onWindowMinimize();
if (!Platform.isLinux) {
- Wakelock.disable();
+ WakelockPlus.disable();
}
}
@@ -228,7 +228,7 @@ class _RemotePageState extends State
overlays: SystemUiOverlay.values);
}
if (!Platform.isLinux) {
- await Wakelock.disable();
+ await WakelockPlus.disable();
}
await Get.delete(tag: widget.id);
removeSharedStates(widget.id);
diff --git a/flutter/lib/desktop/pages/remote_tab_page.dart b/flutter/lib/desktop/pages/remote_tab_page.dart
index 3b56ef4cc..c97a0ef3f 100644
--- a/flutter/lib/desktop/pages/remote_tab_page.dart
+++ b/flutter/lib/desktop/pages/remote_tab_page.dart
@@ -386,7 +386,7 @@ class _ConnectionTabPageState extends State {
pi.platform == kPeerPlatformMacOS)) {
menu.add(MenuEntryButton(
childBuilder: (TextStyle? style) => Text(
- translate('Restart Remote Device'),
+ translate('Restart remote device'),
style: style,
),
proc: () => showRestartRemoteDevice(
diff --git a/flutter/lib/desktop/pages/server_page.dart b/flutter/lib/desktop/pages/server_page.dart
index 89a43adf6..1fbd52c45 100644
--- a/flutter/lib/desktop/pages/server_page.dart
+++ b/flutter/lib/desktop/pages/server_page.dart
@@ -8,6 +8,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_hbb/consts.dart';
import 'package:flutter_hbb/desktop/widgets/tabbar_widget.dart';
import 'package:flutter_hbb/models/chat_model.dart';
+import 'package:flutter_hbb/models/cm_file_model.dart';
import 'package:flutter_hbb/utils/platform_channel.dart';
import 'package:get/get.dart';
import 'package:percent_indicator/linear_percent_indicator.dart';
@@ -482,8 +483,8 @@ class _CmHeaderState extends State<_CmHeader>
client.type_() != ClientType.file),
child: IconButton(
onPressed: () => checkClickTime(client.id, () {
- if (client.type_() != ClientType.file) {
- gFFI.chatModel.toggleCMSidePage();
+ if (client.type_() == ClientType.file) {
+ gFFI.chatModel.toggleCMFilePage();
} else {
gFFI.chatModel
.toggleCMChatPage(MessageKey(client.peerId, client.id));
@@ -519,6 +520,7 @@ class _PrivilegeBoardState extends State<_PrivilegeBoard> {
Function(bool)? onTap, String tooltipText) {
return Tooltip(
message: "$tooltipText: ${enabled ? "ON" : "OFF"}",
+ waitDuration: Duration.zero,
child: Container(
decoration: BoxDecoration(
color: enabled ? MyTheme.accent : Colors.grey[700],
@@ -535,7 +537,6 @@ class _PrivilegeBoardState extends State<_PrivilegeBoard> {
child: Icon(
iconData,
color: Colors.white,
- size: 32,
),
),
],
@@ -547,9 +548,11 @@ class _PrivilegeBoardState extends State<_PrivilegeBoard> {
@override
Widget build(BuildContext context) {
+ final crossAxisCount = 4;
+ final spacing = 10.0;
return Container(
width: double.infinity,
- height: 200.0,
+ height: 160.0,
margin: EdgeInsets.all(5.0),
padding: EdgeInsets.all(5.0),
decoration: BoxDecoration(
@@ -574,10 +577,10 @@ class _PrivilegeBoardState extends State<_PrivilegeBoard> {
).marginOnly(left: 4.0, bottom: 8.0),
Expanded(
child: GridView.count(
- crossAxisCount: 3,
- padding: EdgeInsets.symmetric(horizontal: 20.0),
- mainAxisSpacing: 20.0,
- crossAxisSpacing: 20.0,
+ crossAxisCount: crossAxisCount,
+ padding: EdgeInsets.symmetric(horizontal: spacing),
+ mainAxisSpacing: spacing,
+ crossAxisSpacing: spacing,
children: [
buildPermissionIcon(
client.keyboard,
@@ -589,7 +592,7 @@ class _PrivilegeBoardState extends State<_PrivilegeBoard> {
client.keyboard = enabled;
});
},
- translate('Allow using keyboard and mouse'),
+ translate('Enable keyboard/mouse'),
),
buildPermissionIcon(
client.clipboard,
@@ -601,7 +604,7 @@ class _PrivilegeBoardState extends State<_PrivilegeBoard> {
client.clipboard = enabled;
});
},
- translate('Allow using clipboard'),
+ translate('Enable clipboard'),
),
buildPermissionIcon(
client.audio,
@@ -613,7 +616,7 @@ class _PrivilegeBoardState extends State<_PrivilegeBoard> {
client.audio = enabled;
});
},
- translate('Allow hearing sound'),
+ translate('Enable audio'),
),
buildPermissionIcon(
client.file,
@@ -625,7 +628,7 @@ class _PrivilegeBoardState extends State<_PrivilegeBoard> {
client.file = enabled;
});
},
- translate('Allow file copy and paste'),
+ translate('Enable file copy and paste'),
),
buildPermissionIcon(
client.restart,
@@ -637,7 +640,7 @@ class _PrivilegeBoardState extends State<_PrivilegeBoard> {
client.restart = enabled;
});
},
- translate('Allow remote restart'),
+ translate('Enable remote restart'),
),
buildPermissionIcon(
client.recording,
@@ -649,8 +652,24 @@ class _PrivilegeBoardState extends State<_PrivilegeBoard> {
client.recording = enabled;
});
},
- translate('Allow recording session'),
- )
+ translate('Enable recording session'),
+ ),
+ // only windows support block input
+ if (Platform.isWindows)
+ buildPermissionIcon(
+ client.blockInput,
+ Icons.block,
+ (enabled) {
+ bind.cmSwitchPermission(
+ connId: client.id,
+ name: "block_input",
+ enabled: enabled);
+ setState(() {
+ client.blockInput = enabled;
+ });
+ },
+ translate('Enable blocking user input'),
+ )
],
),
),
@@ -975,6 +994,49 @@ class __FileTransferLogPageState extends State<_FileTransferLogPage> {
);
}
+ iconLabel(CmFileLog item) {
+ switch (item.action) {
+ case CmFileAction.none:
+ return Container();
+ case CmFileAction.localToRemote:
+ case CmFileAction.remoteToLocal:
+ return Column(
+ children: [
+ Transform.rotate(
+ angle: item.action == CmFileAction.remoteToLocal ? 0 : pi,
+ child: SvgPicture.asset(
+ "assets/arrow.svg",
+ color: Theme.of(context).tabBarTheme.labelColor,
+ ),
+ ),
+ Text(item.action == CmFileAction.remoteToLocal
+ ? translate('Send')
+ : translate('Receive'))
+ ],
+ );
+ case CmFileAction.remove:
+ return Column(
+ children: [
+ Icon(
+ Icons.delete,
+ color: Theme.of(context).tabBarTheme.labelColor,
+ ),
+ Text(translate('Delete'))
+ ],
+ );
+ case CmFileAction.createDir:
+ return Column(
+ children: [
+ Icon(
+ Icons.create_new_folder,
+ color: Theme.of(context).tabBarTheme.labelColor,
+ ),
+ Text(translate('Create Folder'))
+ ],
+ );
+ }
+ }
+
Widget statusList() {
return PreferredSize(
preferredSize: const Size(200, double.infinity),
@@ -983,7 +1045,7 @@ class __FileTransferLogPageState extends State<_FileTransferLogPage> {
child: Obx(
() {
final jobTable = gFFI.cmFileModel.currentJobTable;
- statusListView(List jobs) => ListView.builder(
+ statusListView(List jobs) => ListView.builder(
controller: ScrollController(),
itemBuilder: (BuildContext context, int index) {
final item = jobs[index];
@@ -998,22 +1060,7 @@ class __FileTransferLogPageState extends State<_FileTransferLogPage> {
children: [
SizedBox(
width: 50,
- child: Column(
- children: [
- Transform.rotate(
- angle: item.isRemoteToLocal ? 0 : pi,
- child: SvgPicture.asset(
- "assets/arrow.svg",
- color: Theme.of(context)
- .tabBarTheme
- .labelColor,
- ),
- ),
- Text(item.isRemoteToLocal
- ? translate('Send')
- : translate('Receive'))
- ],
- ),
+ child: iconLabel(item),
).paddingOnly(left: 15),
const SizedBox(
width: 16.0,
@@ -1048,8 +1095,9 @@ class __FileTransferLogPageState extends State<_FileTransferLogPage> {
),
),
Offstage(
- offstage:
- item.state == JobState.inProgress,
+ offstage: !(item.isTransfer() &&
+ item.state !=
+ JobState.inProgress),
child: Text(
translate(
item.display(),
diff --git a/flutter/lib/desktop/widgets/remote_toolbar.dart b/flutter/lib/desktop/widgets/remote_toolbar.dart
index d8b330407..dac8ae528 100644
--- a/flutter/lib/desktop/widgets/remote_toolbar.dart
+++ b/flutter/lib/desktop/widgets/remote_toolbar.dart
@@ -107,7 +107,7 @@ class _ToolbarTheme {
static const double dividerHeight = 12.0;
static const double buttonSize = 32;
- static const double buttonHMargin = 3;
+ static const double buttonHMargin = 2;
static const double buttonVMargin = 6;
static const double iconRadius = 8;
static const double elevation = 3;
@@ -125,12 +125,13 @@ class _ToolbarTheme {
: EdgeInsets.fromLTRB(6, 14, 6, 14);
static const double menuButtonBorderRadius = 3.0;
+ static get borderColor =>
+ MyTheme.currentThemeMode() == ThemeMode.light ? bordLight : bordDark;
+
static final defaultMenuStyle = MenuStyle(
side: MaterialStateProperty.all(BorderSide(
width: 1,
- color: MyTheme.currentThemeMode() == ThemeMode.light
- ? _ToolbarTheme.bordLight
- : _ToolbarTheme.bordDark,
+ color: borderColor,
)),
shape: MaterialStatePropertyAll(RoundedRectangleBorder(
borderRadius: BorderRadius.circular(_ToolbarTheme.menuBorderRadius))),
@@ -141,6 +142,19 @@ class _ToolbarTheme {
padding: MaterialStatePropertyAll(EdgeInsets.zero),
overlayColor: MaterialStatePropertyAll(Colors.transparent),
);
+
+ static Widget borderWrapper(Widget child, BorderRadius borderRadius) {
+ return Container(
+ decoration: BoxDecoration(
+ border: Border.all(
+ color: borderColor,
+ width: 1,
+ ),
+ borderRadius: borderRadius,
+ ),
+ child: child,
+ );
+ }
}
typedef DismissFunc = void Function();
@@ -420,6 +434,9 @@ class _RemoteToolbarState extends State {
if (show.isTrue && _dragging.isFalse) {
triggerAutoHide();
}
+ final borderRadius = BorderRadius.vertical(
+ bottom: Radius.circular(5),
+ );
return Align(
alignment: FractionalOffset(_fractionX.value, 0),
child: Offstage(
@@ -427,6 +444,7 @@ class _RemoteToolbarState extends State {
child: Material(
elevation: _ToolbarTheme.elevation,
shadowColor: MyTheme.color(context).shadow,
+ borderRadius: borderRadius,
child: _DraggableShowHide(
sessionId: widget.ffi.sessionId,
dragging: _dragging,
@@ -434,6 +452,7 @@ class _RemoteToolbarState extends State {
show: show,
setFullscreen: _setFullscreen,
setMinimize: _minimize,
+ borderRadius: borderRadius,
),
),
),
@@ -475,13 +494,14 @@ class _RemoteToolbarState extends State {
}
toolbarItems.add(_RecordMenu());
toolbarItems.add(_CloseMenu(id: widget.id, ffi: widget.ffi));
+ final toolbarBorderRadius = BorderRadius.all(Radius.circular(4.0));
return Column(
mainAxisSize: MainAxisSize.min,
children: [
Material(
elevation: _ToolbarTheme.elevation,
shadowColor: MyTheme.color(context).shadow,
- borderRadius: BorderRadius.all(Radius.circular(4.0)),
+ borderRadius: toolbarBorderRadius,
color: Theme.of(context)
.menuBarTheme
.style
@@ -491,13 +511,15 @@ class _RemoteToolbarState extends State {
scrollDirection: Axis.horizontal,
child: Theme(
data: themeData(),
- child: Row(
- children: [
- SizedBox(width: _ToolbarTheme.buttonHMargin * 2),
- ...toolbarItems,
- SizedBox(width: _ToolbarTheme.buttonHMargin * 2)
- ],
- ),
+ child: _ToolbarTheme.borderWrapper(
+ Row(
+ children: [
+ SizedBox(width: _ToolbarTheme.buttonHMargin * 2),
+ ...toolbarItems,
+ SizedBox(width: _ToolbarTheme.buttonHMargin * 2)
+ ],
+ ),
+ toolbarBorderRadius),
),
),
),
@@ -598,14 +620,19 @@ class _MonitorMenu extends StatelessWidget {
useTextureRender && ffi.ffiModel.pi.isSupportMultiDisplay;
@override
- Widget build(BuildContext context) =>
- showMonitorsToolbar ? buildMultiMonitorMenu() : buildMonitorMenu();
+ Widget build(BuildContext context) => showMonitorsToolbar
+ ? buildMultiMonitorMenu()
+ : Obx(() => buildMonitorMenu());
Widget buildMonitorMenu() {
+ final width = SimpleWrapper(0);
+ final monitorsIcon =
+ globalMonitorsWidget(width, Colors.white, Colors.black38);
return _IconSubmenuButton(
tooltip: 'Select Monitor',
- icon: icon(),
+ icon: monitorsIcon,
ffi: ffi,
+ width: width.value,
color: _ToolbarTheme.blueColor,
hoverColor: _ToolbarTheme.hoverBlueColor,
menuStyle: MenuStyle(
@@ -644,26 +671,37 @@ class _MonitorMenu extends StatelessWidget {
child: Text(translate('Show displays as individual windows')));
}
+ buildOneMonitorButton(i, curDisplay) => Text(
+ '${i + 1}',
+ style: TextStyle(
+ color: i == curDisplay
+ ? _ToolbarTheme.blueColor
+ : _ToolbarTheme.inactiveColor,
+ fontSize: 12,
+ fontWeight: FontWeight.bold,
+ ),
+ );
+
List buildMonitorList(bool isMulti) {
final List monitorList = [];
final pi = ffi.ffiModel.pi;
- getMonitorText(int i) {
- if (i == kAllDisplayValue) {
- if (pi.displays.length == 2) {
- return '1|2';
- } else {
- return 'ALL';
- }
- } else {
- return (i + 1).toString();
- }
- }
-
buildMonitorButton(int i) => Obx(() {
RxInt display = CurrentDisplayState.find(id);
+
+ final isAllMonitors = i == kAllDisplayValue;
+ final width = SimpleWrapper(0);
+ Widget? monitorsIcon;
+ if (isAllMonitors) {
+ monitorsIcon = globalMonitorsWidget(
+ width, Colors.white, _ToolbarTheme.blueColor);
+ }
return _IconMenuButton(
- tooltip: isMulti ? '' : '#${i + 1} monitor',
+ tooltip: isMulti
+ ? ''
+ : isAllMonitors
+ ? 'all monitors'
+ : '#${i + 1} monitor',
hMargin: isMulti ? null : 6,
vMargin: isMulti ? null : 12,
topLevel: false,
@@ -673,33 +711,25 @@ class _MonitorMenu extends StatelessWidget {
hoverColor: i == display.value
? _ToolbarTheme.hoverBlueColor
: _ToolbarTheme.hoverInactiveColor,
- icon: Container(
- alignment: AlignmentDirectional.center,
- constraints:
- const BoxConstraints(minHeight: _ToolbarTheme.height),
- child: Stack(
- alignment: Alignment.center,
- children: [
- SvgPicture.asset(
- "assets/screen.svg",
- colorFilter:
- ColorFilter.mode(Colors.white, BlendMode.srcIn),
- ),
- Obx(
- () => Text(
- getMonitorText(i),
- style: TextStyle(
- color: i == display.value
- ? _ToolbarTheme.blueColor
- : _ToolbarTheme.inactiveColor,
- fontSize: 12,
- fontWeight: FontWeight.bold,
- ),
+ width: isAllMonitors ? width.value : null,
+ icon: isAllMonitors
+ ? monitorsIcon
+ : Container(
+ alignment: AlignmentDirectional.center,
+ constraints:
+ const BoxConstraints(minHeight: _ToolbarTheme.height),
+ child: Stack(
+ alignment: Alignment.center,
+ children: [
+ SvgPicture.asset(
+ "assets/screen.svg",
+ colorFilter:
+ ColorFilter.mode(Colors.white, BlendMode.srcIn),
+ ),
+ Obx(() => buildOneMonitorButton(i, display.value)),
+ ],
),
),
- ],
- ),
- ),
onPressed: () => onPressed(i, pi),
);
});
@@ -713,26 +743,69 @@ class _MonitorMenu extends StatelessWidget {
return monitorList;
}
- icon() {
- final pi = ffi.ffiModel.pi;
+ globalMonitorsWidget(
+ SimpleWrapper width, Color activeTextColor, Color activeBgColor) {
+ getMonitors() {
+ final pi = ffi.ffiModel.pi;
+ RxInt display = CurrentDisplayState.find(id);
+ final rect = ffi.ffiModel.globalDisplaysRect();
+ if (rect == null) {
+ return Offstage();
+ }
+
+ final scale = _ToolbarTheme.buttonSize / rect.height * 0.75;
+ final startY = (_ToolbarTheme.buttonSize - rect.height * scale) * 0.5;
+ final startX = startY;
+
+ final children = [];
+ for (var i = 0; i < pi.displays.length; i++) {
+ final d = pi.displays[i];
+ final fontSize = (d.width * scale < d.height * scale
+ ? d.width * scale
+ : d.height * scale) *
+ 0.65;
+ children.add(Positioned(
+ left: (d.x - rect.left) * scale + startX,
+ top: (d.y - rect.top) * scale + startY,
+ width: d.width * scale,
+ height: d.height * scale,
+ child: Container(
+ decoration: BoxDecoration(
+ border: Border.all(
+ color: Colors.grey,
+ width: 1.0,
+ ),
+ color: display.value == i ? activeBgColor : Colors.white,
+ ),
+ child: Center(
+ child: Text(
+ '${i + 1}',
+ style: TextStyle(
+ color: display.value == i
+ ? activeTextColor
+ : _ToolbarTheme.inactiveColor,
+ fontSize: fontSize,
+ fontWeight: FontWeight.bold,
+ ),
+ )),
+ ),
+ ));
+ }
+ width.value = rect.width * scale + startX * 2;
+ return SizedBox(
+ width: width.value,
+ height: rect.height * scale + startY * 2,
+ child: Stack(
+ children: children,
+ ),
+ );
+ }
+
return Stack(
alignment: Alignment.center,
children: [
- SvgPicture.asset(
- "assets/screen.svg",
- colorFilter: ColorFilter.mode(Colors.white, BlendMode.srcIn),
- ),
- Obx(() {
- RxInt display = CurrentDisplayState.find(id);
- return Text(
- '${display.value == kAllDisplayValue ? 'A' : '${display.value + 1}'}/${pi.displays.length}',
- style: const TextStyle(
- color: _ToolbarTheme.blueColor,
- fontSize: 8,
- fontWeight: FontWeight.bold,
- ),
- );
- }),
+ SizedBox(height: _ToolbarTheme.buttonSize),
+ getMonitors(),
],
);
}
@@ -1150,8 +1223,9 @@ class _ResolutionsMenuState extends State<_ResolutionsMenu> {
@override
Widget build(BuildContext context) {
final isVirtualDisplay = ffiModel.isVirtualDisplayResolution;
- final visible =
- ffiModel.keyboard && (isVirtualDisplay || resolutions.length > 1);
+ final visible = ffiModel.keyboard &&
+ (isVirtualDisplay || resolutions.length > 1) &&
+ pi.currentDisplay != kAllDisplayValue;
if (!visible) return Offstage();
final showOriginalBtn =
ffiModel.isOriginalResolutionSet && !ffiModel.isOriginalResolution;
@@ -1761,6 +1835,7 @@ class _IconMenuButton extends StatefulWidget {
final double? hMargin;
final double? vMargin;
final bool topLevel;
+ final double? width;
const _IconMenuButton({
Key? key,
this.assetName,
@@ -1772,6 +1847,7 @@ class _IconMenuButton extends StatefulWidget {
this.hMargin,
this.vMargin,
this.topLevel = true,
+ this.width,
}) : super(key: key);
@override
@@ -1792,7 +1868,7 @@ class _IconMenuButtonState extends State<_IconMenuButton> {
height: _ToolbarTheme.buttonSize,
);
var button = SizedBox(
- width: _ToolbarTheme.buttonSize,
+ width: widget.width ?? _ToolbarTheme.buttonSize,
height: _ToolbarTheme.buttonSize,
child: MenuItemButton(
style: ButtonStyle(
@@ -1839,18 +1915,20 @@ class _IconSubmenuButton extends StatefulWidget {
final List menuChildren;
final MenuStyle? menuStyle;
final FFI ffi;
+ final double? width;
- _IconSubmenuButton(
- {Key? key,
- this.svg,
- this.icon,
- required this.tooltip,
- required this.color,
- required this.hoverColor,
- required this.menuChildren,
- required this.ffi,
- this.menuStyle})
- : super(key: key);
+ _IconSubmenuButton({
+ Key? key,
+ this.svg,
+ this.icon,
+ required this.tooltip,
+ required this.color,
+ required this.hoverColor,
+ required this.menuChildren,
+ required this.ffi,
+ this.menuStyle,
+ this.width,
+ }) : super(key: key);
@override
State<_IconSubmenuButton> createState() => _IconSubmenuButtonState();
@@ -1870,7 +1948,7 @@ class _IconSubmenuButtonState extends State<_IconSubmenuButton> {
height: _ToolbarTheme.buttonSize,
);
final button = SizedBox(
- width: _ToolbarTheme.buttonSize,
+ width: widget.width ?? _ToolbarTheme.buttonSize,
height: _ToolbarTheme.buttonSize,
child: SubmenuButton(
menuStyle: widget.menuStyle ?? _ToolbarTheme.defaultMenuStyle,
@@ -2016,6 +2094,7 @@ class _DraggableShowHide extends StatefulWidget {
final RxDouble fractionX;
final RxBool dragging;
final RxBool show;
+ final BorderRadius borderRadius;
final Function(bool) setFullscreen;
final Function() setMinimize;
@@ -2028,6 +2107,7 @@ class _DraggableShowHide extends StatefulWidget {
required this.show,
required this.setFullscreen,
required this.setMinimize,
+ required this.borderRadius,
}) : super(key: key);
@override
@@ -2164,9 +2244,11 @@ class _DraggableShowHideState extends State<_DraggableShowHide> {
.style
?.backgroundColor
?.resolve(MaterialState.values.toSet()),
- borderRadius: BorderRadius.vertical(
- bottom: Radius.circular(5),
+ border: Border.all(
+ color: _ToolbarTheme.borderColor,
+ width: 1,
),
+ borderRadius: widget.borderRadius,
),
child: SizedBox(
height: 20,
diff --git a/flutter/lib/desktop/widgets/tabbar_widget.dart b/flutter/lib/desktop/widgets/tabbar_widget.dart
index 7f1449ca4..67931d353 100644
--- a/flutter/lib/desktop/widgets/tabbar_widget.dart
+++ b/flutter/lib/desktop/widgets/tabbar_widget.dart
@@ -583,32 +583,19 @@ class WindowActionPanelState extends State
void onWindowClose() async {
mainWindowClose() async => await windowManager.hide();
notMainWindowClose(WindowController controller) async {
- if (widget.tabController.length == 0) {
- debugPrint("close emtpy multiwindow, hide");
- await controller.hide();
- await rustDeskWinManager
- .call(WindowType.Main, kWindowEventHide, {"id": kWindowId!});
- } else {
+ if (widget.tabController.length != 0) {
debugPrint("close not emtpy multiwindow from taskbar");
if (Platform.isWindows) {
await controller.show();
await controller.focus();
final res = await widget.onClose?.call() ?? true;
- if (res) {
- Future.delayed(Duration.zero, () async {
- // onWindowClose will be called again to hide
- await WindowController.fromWindowId(kWindowId!).close();
- });
- }
- } else {
- // ubuntu22.04 windowOnTop not work from taskbar
- widget.tabController.clear();
- Future.delayed(Duration.zero, () async {
- // onWindowClose will be called again to hide
- await WindowController.fromWindowId(kWindowId!).close();
- });
+ if (!res) return;
}
+ widget.tabController.clear();
}
+ await controller.hide();
+ await rustDeskWinManager
+ .call(WindowType.Main, kWindowEventHide, {"id": kWindowId!});
}
macOSWindowClose(
diff --git a/flutter/lib/main.dart b/flutter/lib/main.dart
index d7dd5acee..b8a7a8e45 100644
--- a/flutter/lib/main.dart
+++ b/flutter/lib/main.dart
@@ -156,6 +156,7 @@ void runMobileApp() async {
await Future.wait([gFFI.abModel.loadCache(), gFFI.groupModel.loadCache()]);
gFFI.userModel.refreshCurrentUser();
runApp(App());
+ await initUniLinks();
}
void runMultiWindow(
diff --git a/flutter/lib/mobile/pages/connection_page.dart b/flutter/lib/mobile/pages/connection_page.dart
index a4e3c7f4d..824ceafec 100644
--- a/flutter/lib/mobile/pages/connection_page.dart
+++ b/flutter/lib/mobile/pages/connection_page.dart
@@ -54,10 +54,12 @@ class _ConnectionPageState extends State {
}
bool isPeersLoading = false;
bool isPeersLoaded = false;
+ StreamSubscription? _uniLinksSubscription;
@override
void initState() {
super.initState();
+ _uniLinksSubscription = listenUniLinks();
if (_idController.text.isEmpty) {
() async {
final lastRemoteId = await bind.mainGetLastRemoteId();
@@ -312,6 +314,7 @@ class _ConnectionPageState extends State {
@override
void dispose() {
+ _uniLinksSubscription?.cancel();
_idController.dispose();
if (Get.isRegistered()) {
Get.delete();
diff --git a/flutter/lib/mobile/pages/file_manager_page.dart b/flutter/lib/mobile/pages/file_manager_page.dart
index 3fceba240..5344c5da3 100644
--- a/flutter/lib/mobile/pages/file_manager_page.dart
+++ b/flutter/lib/mobile/pages/file_manager_page.dart
@@ -5,7 +5,7 @@ import 'package:flutter_breadcrumb/flutter_breadcrumb.dart';
import 'package:flutter_hbb/models/file_model.dart';
import 'package:get/get.dart';
import 'package:toggle_switch/toggle_switch.dart';
-import 'package:wakelock/wakelock.dart';
+import 'package:wakelock_plus/wakelock_plus.dart';
import '../../common.dart';
import '../../common/widgets/dialog.dart';
@@ -73,7 +73,7 @@ class _FileManagerPageState extends State {
.showLoading(translate('Connecting...'), onCancel: closeConnection);
});
gFFI.ffiModel.updateEventListener(gFFI.sessionId, widget.id);
- Wakelock.enable();
+ WakelockPlus.enable();
}
@override
@@ -81,7 +81,7 @@ class _FileManagerPageState extends State {
model.close().whenComplete(() {
gFFI.close();
gFFI.dialogManager.dismissAll();
- Wakelock.disable();
+ WakelockPlus.disable();
});
super.dispose();
}
diff --git a/flutter/lib/mobile/pages/remote_page.dart b/flutter/lib/mobile/pages/remote_page.dart
index 99d91c4c4..6afb58eac 100644
--- a/flutter/lib/mobile/pages/remote_page.dart
+++ b/flutter/lib/mobile/pages/remote_page.dart
@@ -11,7 +11,7 @@ import 'package:flutter_hbb/models/chat_model.dart';
import 'package:flutter_keyboard_visibility/flutter_keyboard_visibility.dart';
import 'package:get/get.dart';
import 'package:provider/provider.dart';
-import 'package:wakelock/wakelock.dart';
+import 'package:wakelock_plus/wakelock_plus.dart';
import '../../common.dart';
import '../../common/widgets/overlay.dart';
@@ -60,7 +60,7 @@ class _RemotePageState extends State {
gFFI.dialogManager
.showLoading(translate('Connecting...'), onCancel: closeConnection);
});
- Wakelock.enable();
+ WakelockPlus.enable();
_physicalFocusNode.requestFocus();
gFFI.ffiModel.updateEventListener(sessionId, widget.id);
gFFI.inputModel.listenToMouse(true);
@@ -88,7 +88,7 @@ class _RemotePageState extends State {
gFFI.dialogManager.dismissAll();
await SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual,
overlays: SystemUiOverlay.values);
- await Wakelock.disable();
+ await WakelockPlus.disable();
await keyboardSubscription.cancel();
removeSharedStates(widget.id);
}
diff --git a/flutter/lib/mobile/pages/server_page.dart b/flutter/lib/mobile/pages/server_page.dart
index 5dc6f3526..b7a48e5bc 100644
--- a/flutter/lib/mobile/pages/server_page.dart
+++ b/flutter/lib/mobile/pages/server_page.dart
@@ -217,7 +217,7 @@ class ServiceNotRunningNotification extends StatelessWidget {
serverModel.toggleService();
}
},
- label: Text(translate("Start Service")))
+ label: Text(translate("Start service")))
],
));
}
@@ -561,7 +561,7 @@ class _PermissionCheckerState extends State {
serverModel.toggleService),
PermissionRow(translate("Input Control"), serverModel.inputOk,
serverModel.toggleInput),
- PermissionRow(translate("Transfer File"), serverModel.fileOk,
+ PermissionRow(translate("Transfer file"), serverModel.fileOk,
serverModel.toggleFile),
hasAudioPermission
? PermissionRow(translate("Audio Capture"), serverModel.audioOk,
diff --git a/flutter/lib/mobile/pages/settings_page.dart b/flutter/lib/mobile/pages/settings_page.dart
index 87d2eb8a1..f1f9bb39f 100644
--- a/flutter/lib/mobile/pages/settings_page.dart
+++ b/flutter/lib/mobile/pages/settings_page.dart
@@ -221,7 +221,7 @@ class _SettingsState extends State with WidgetsBindingObserver {
final List enhancementsTiles = [];
final List shareScreenTiles = [
SettingsTile.switchTile(
- title: Text(translate('Deny LAN Discovery')),
+ title: Text(translate('Deny LAN discovery')),
initialValue: _denyLANDiscovery,
onToggle: (v) async {
await bind.mainSetOption(
@@ -270,7 +270,7 @@ class _SettingsState extends State with WidgetsBindingObserver {
},
),
SettingsTile.switchTile(
- title: Text(translate('Enable Recording Session')),
+ title: Text(translate('Enable recording session')),
initialValue: _enableRecordSession,
onToggle: (v) async {
await bind.mainSetOption(
@@ -407,7 +407,7 @@ class _SettingsState extends State with WidgetsBindingObserver {
enhancementsTiles.add(SettingsTile.switchTile(
initialValue: _enableStartOnBoot,
title: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
- Text("${translate('Start on Boot')} (beta)"),
+ Text("${translate('Start on boot')} (beta)"),
Text(
'* ${translate('Start the screen sharing service on boot, requires special permissions')}',
style: Theme.of(context).textTheme.bodySmall),
@@ -797,6 +797,7 @@ class __DisplayPageState extends State<_DisplayPage> {
otherRow('Lock after session end', 'lock_after_session_end'),
otherRow('Privacy mode', 'privacy_mode'),
otherRow('Touch mode', 'touch-mode'),
+ otherRow('True color (4:4:4)', 'i444'),
],
),
]),
diff --git a/flutter/lib/models/chat_model.dart b/flutter/lib/models/chat_model.dart
index 93cdbbed5..5f5a1d707 100644
--- a/flutter/lib/models/chat_model.dart
+++ b/flutter/lib/models/chat_model.dart
@@ -285,6 +285,10 @@ class ChatModel with ChangeNotifier {
await toggleCMSidePage();
}
+ toggleCMFilePage() async {
+ await toggleCMSidePage();
+ }
+
var _togglingCMSidePage = false; // protect order for await
toggleCMSidePage() async {
if (_togglingCMSidePage) return false;
@@ -296,6 +300,13 @@ class ChatModel with ChangeNotifier {
await windowManager.setSizeAlignment(
kConnectionManagerWindowSizeClosedChat, Alignment.topRight);
} else {
+ final currentSelectedTab =
+ gFFI.serverModel.tabController.state.value.selectedTabInfo;
+ final client = parent.target?.serverModel.clients.firstWhereOrNull(
+ (client) => client.id.toString() == currentSelectedTab.key);
+ if (client != null) {
+ client.unreadChatMessageCount.value = 0;
+ }
requestChatInputFocus();
await windowManager.show();
await windowManager.setSizeAlignment(
diff --git a/flutter/lib/models/cm_file_model.dart b/flutter/lib/models/cm_file_model.dart
index d372db6c3..ce9b711a2 100644
--- a/flutter/lib/models/cm_file_model.dart
+++ b/flutter/lib/models/cm_file_model.dart
@@ -10,8 +10,8 @@ import 'file_model.dart';
class CmFileModel {
final WeakReference parent;
- final currentJobTable = RxList();
- final _jobTables = HashMap>.fromEntries([]);
+ final currentJobTable = RxList();
+ final _jobTables = HashMap>.fromEntries([]);
Stopwatch stopwatch = Stopwatch();
int _lastElapsed = 0;
@@ -19,14 +19,24 @@ class CmFileModel {
void updateCurrentClientId(int id) {
if (_jobTables[id] == null) {
- _jobTables[id] = RxList();
+ _jobTables[id] = RxList();
}
Future.delayed(Duration.zero, () {
currentJobTable.value = _jobTables[id]!;
});
}
- onFileTransferLog(dynamic log) {
+ onFileTransferLog(Map evt) {
+ if (evt['transfer'] != null) {
+ _onFileTransfer(evt['transfer']);
+ } else if (evt['remove'] != null) {
+ _onFileRemove(evt['remove']);
+ } else if (evt['create_dir'] != null) {
+ _onDirCreate(evt['create_dir']);
+ }
+ }
+
+ _onFileTransfer(dynamic log) {
try {
dynamic d = jsonDecode(log);
if (!stopwatch.isRunning) stopwatch.start();
@@ -56,9 +66,9 @@ class CmFileModel {
debugPrint("jobTable should not be null");
return;
}
- JobProgress? job = jobTable.firstWhereOrNull((e) => e.id == data.id);
+ CmFileLog? job = jobTable.firstWhereOrNull((e) => e.id == data.id);
if (job == null) {
- job = JobProgress();
+ job = CmFileLog();
jobTable.add(job);
final currentSelectedTab =
gFFI.serverModel.tabController.state.value.selectedTabInfo;
@@ -68,14 +78,14 @@ class CmFileModel {
}
}
job.id = data.id;
- job.isRemoteToLocal = data.isRemote;
+ job.action =
+ data.isRemote ? CmFileAction.remoteToLocal : CmFileAction.localToRemote;
job.fileName = data.path;
job.totalSize = data.totalSize;
job.finishedSize = data.finishedSize;
if (job.finishedSize > data.totalSize) {
job.finishedSize = data.totalSize;
}
- job.isRemoteToLocal = data.isRemote;
if (job.finishedSize > 0) {
if (job.finishedSize < job.totalSize) {
@@ -99,6 +109,119 @@ class CmFileModel {
}
jobTable.refresh();
}
+
+ _onFileRemove(dynamic log) {
+ try {
+ dynamic d = jsonDecode(log);
+ FileActionLog data = FileActionLog.fromJson(d);
+ Client? client =
+ gFFI.serverModel.clients.firstWhereOrNull((e) => e.id == data.connId);
+ var jobTable = _jobTables[data.connId];
+ if (jobTable == null) {
+ debugPrint("jobTable should not be null");
+ return;
+ }
+ int removeUnreadCount = 0;
+ if (data.dir) {
+ bool isChild(String parent, String child) {
+ if (child.startsWith(parent) && child.length > parent.length) {
+ final suffix = child.substring(parent.length);
+ return suffix.startsWith('/') || suffix.startsWith('\\');
+ }
+ return false;
+ }
+
+ removeUnreadCount = jobTable
+ .where((e) =>
+ e.action == CmFileAction.remove &&
+ isChild(data.path, e.fileName))
+ .length;
+ jobTable.removeWhere((e) =>
+ e.action == CmFileAction.remove && isChild(data.path, e.fileName));
+ }
+ jobTable.add(CmFileLog()
+ ..id = data.id
+ ..fileName = data.path
+ ..action = CmFileAction.remove
+ ..state = JobState.done);
+ final currentSelectedTab =
+ gFFI.serverModel.tabController.state.value.selectedTabInfo;
+ if (!(gFFI.chatModel.isShowCMSidePage &&
+ currentSelectedTab.key == data.connId.toString())) {
+ // Wrong number if unreadCount changes during deletion, which rarely happens
+ RxInt? rx = client?.unreadChatMessageCount;
+ if (rx != null) {
+ if (rx.value >= removeUnreadCount) {
+ rx.value -= removeUnreadCount;
+ }
+ rx.value += 1;
+ }
+ }
+ jobTable.refresh();
+ } catch (e) {
+ debugPrint('$e');
+ }
+ }
+
+ _onDirCreate(dynamic log) {
+ try {
+ dynamic d = jsonDecode(log);
+ FileActionLog data = FileActionLog.fromJson(d);
+ Client? client =
+ gFFI.serverModel.clients.firstWhereOrNull((e) => e.id == data.connId);
+ var jobTable = _jobTables[data.connId];
+ if (jobTable == null) {
+ debugPrint("jobTable should not be null");
+ return;
+ }
+ jobTable.add(CmFileLog()
+ ..id = data.id
+ ..fileName = data.path
+ ..action = CmFileAction.createDir
+ ..state = JobState.done);
+ final currentSelectedTab =
+ gFFI.serverModel.tabController.state.value.selectedTabInfo;
+ if (!(gFFI.chatModel.isShowCMSidePage &&
+ currentSelectedTab.key == data.connId.toString())) {
+ client?.unreadChatMessageCount.value += 1;
+ }
+ jobTable.refresh();
+ } catch (e) {
+ debugPrint('$e');
+ }
+ }
+}
+
+enum CmFileAction {
+ none,
+ remoteToLocal,
+ localToRemote,
+ remove,
+ createDir,
+}
+
+class CmFileLog {
+ JobState state = JobState.none;
+ var id = 0;
+ var speed = 0.0;
+ var finishedSize = 0;
+ var totalSize = 0;
+ CmFileAction action = CmFileAction.none;
+ var fileName = "";
+ var err = "";
+ int lastTransferredSize = 0;
+
+ String display() {
+ if (state == JobState.done && err == "skipped") {
+ return translate("Skipped");
+ }
+ return state.display();
+ }
+
+ bool isTransfer() {
+ return action == CmFileAction.remoteToLocal ||
+ action == CmFileAction.localToRemote;
+ }
}
class TransferJobSerdeData {
@@ -140,3 +263,25 @@ class TransferJobSerdeData {
error: d['error'] ?? '',
);
}
+
+class FileActionLog {
+ int id = 0;
+ int connId = 0;
+ String path = '';
+ bool dir = false;
+
+ FileActionLog({
+ required this.connId,
+ required this.id,
+ required this.path,
+ required this.dir,
+ });
+
+ FileActionLog.fromJson(dynamic d)
+ : this(
+ connId: d['connId'] ?? 0,
+ id: d['id'] ?? 0,
+ path: d['path'] ?? '',
+ dir: d['dir'] ?? false,
+ );
+}
diff --git a/flutter/lib/models/file_model.dart b/flutter/lib/models/file_model.dart
index ae1d9b701..5adae878c 100644
--- a/flutter/lib/models/file_model.dart
+++ b/flutter/lib/models/file_model.dart
@@ -1006,7 +1006,7 @@ extension JobStateDisplay on JobState {
case JobState.none:
return translate("Waiting");
case JobState.inProgress:
- return translate("Transfer File");
+ return translate("Transfer file");
case JobState.done:
return translate("Finished");
case JobState.error:
diff --git a/flutter/lib/models/model.dart b/flutter/lib/models/model.dart
index 0aad54b37..12f2d5e4c 100644
--- a/flutter/lib/models/model.dart
+++ b/flutter/lib/models/model.dart
@@ -138,8 +138,9 @@ class FfiModel with ChangeNotifier {
sessionId = parent.target!.sessionId;
}
- Rect? displaysRect() {
- final displays = _pi.getCurDisplays();
+ Rect? globalDisplaysRect() => _getDisplaysRect(_pi.displays);
+ Rect? displaysRect() => _getDisplaysRect(_pi.getCurDisplays());
+ Rect? _getDisplaysRect(List displays) {
if (displays.isEmpty) {
return null;
}
@@ -352,7 +353,7 @@ class FfiModel with ChangeNotifier {
}
} else if (name == "cm_file_transfer_log") {
if (isDesktop) {
- gFFI.cmFileModel.onFileTransferLog(evt['log']);
+ gFFI.cmFileModel.onFileTransferLog(evt);
}
} else {
debugPrint('Unknown event name: $name');
@@ -430,15 +431,19 @@ class FfiModel with ChangeNotifier {
handleSwitchDisplay(
Map evt, SessionID sessionId, String peerId) {
- final curDisplay = int.parse(evt['display']);
+ final display = int.parse(evt['display']);
if (_pi.currentDisplay != kAllDisplayValue) {
if (bind.peerGetDefaultSessionsCount(id: peerId) > 1) {
- if (curDisplay != _pi.currentDisplay) {
+ if (display != _pi.currentDisplay) {
return;
}
}
- _pi.currentDisplay = curDisplay;
+ if (!_pi.isSupportMultiUiSession) {
+ _pi.currentDisplay = display;
+ }
+ // If `isSupportMultiUiSession` is true, the switch display message should not be used to update current display.
+ // It is only used to update the display info.
}
var newDisplay = Display();
@@ -451,16 +456,24 @@ class FfiModel with ChangeNotifier {
int.tryParse(evt['original_width']) ?? kInvalidResolutionValue;
newDisplay.originalHeight =
int.tryParse(evt['original_height']) ?? kInvalidResolutionValue;
- _pi.displays[curDisplay] = newDisplay;
+ _pi.displays[display] = newDisplay;
- updateCurDisplay(sessionId);
- try {
- CurrentDisplayState.find(peerId).value = curDisplay;
- } catch (e) {
- //
+ if (!_pi.isSupportMultiUiSession || _pi.currentDisplay == display) {
+ updateCurDisplay(sessionId);
}
+
+ if (!_pi.isSupportMultiUiSession) {
+ try {
+ CurrentDisplayState.find(peerId).value = display;
+ } catch (e) {
+ //
+ }
+ }
+
parent.target?.recordingModel.onSwitchDisplay();
- handleResolutions(peerId, evt['resolutions']);
+ if (!_pi.isSupportMultiUiSession || _pi.currentDisplay == display) {
+ handleResolutions(peerId, evt['resolutions']);
+ }
notifyListeners();
}
@@ -627,7 +640,9 @@ class FfiModel with ChangeNotifier {
/// Handle the peer info event based on [evt].
handlePeerInfo(Map evt, String peerId, bool isCache) async {
- cachedPeerData.peerInfo = evt;
+ // Map clone is required here, otherwise "evt" may be changed by other threads through the reference.
+ // Because this function is asynchronous, there's an "await" in this function.
+ cachedPeerData.peerInfo = {...evt};
// recent peer updated by handle_peer_info(ui_session_interface.rs) --> handle_peer_info(client.rs) --> save_config(client.rs)
bind.mainLoadRecentPeers();
@@ -666,11 +681,12 @@ class FfiModel with ChangeNotifier {
if (connType == ConnType.fileTransfer) {
parent.target?.fileModel.onReady();
} else if (connType == ConnType.defaultConn) {
- _pi.displays = [];
+ List newDisplays = [];
List displays = json.decode(evt['displays']);
for (int i = 0; i < displays.length; ++i) {
- _pi.displays.add(evtToDisplay(displays[i]));
+ newDisplays.add(evtToDisplay(displays[i]));
}
+ _pi.displays.value = newDisplays;
_pi.displaysCount.value = _pi.displays.length;
if (_pi.currentDisplay < _pi.displays.length) {
// now replaced to _updateCurDisplay
@@ -860,7 +876,7 @@ class FfiModel with ChangeNotifier {
for (int i = 0; i < displays.length; ++i) {
newDisplays.add(evtToDisplay(displays[i]));
}
- _pi.displays = newDisplays;
+ _pi.displays.value = newDisplays;
_pi.displaysCount.value = _pi.displays.length;
if (_pi.currentDisplay == kAllDisplayValue) {
@@ -908,11 +924,11 @@ class FfiModel with ChangeNotifier {
_pi.platformAdditions.remove(kPlatformAdditionsVirtualDisplays);
} else {
try {
- final updateJson = json.decode(updateData);
+ final updateJson = json.decode(updateData) as Map;
for (final key in updateJson.keys) {
_pi.platformAdditions[key] = updateJson[key];
}
- if (!updateJson.contains(kPlatformAdditionsVirtualDisplays)) {
+ if (!updateJson.containsKey(kPlatformAdditionsVirtualDisplays)) {
_pi.platformAdditions.remove(kPlatformAdditionsVirtualDisplays);
}
} catch (e) {
@@ -1845,6 +1861,7 @@ class QualityMonitorData {
String? delay;
String? targetBitrate;
String? codecFormat;
+ String? chroma;
}
class QualityMonitorModel with ChangeNotifier {
@@ -1898,6 +1915,9 @@ class QualityMonitorModel with ChangeNotifier {
if ((evt['codec_format'] as String).isNotEmpty) {
_data.codecFormat = evt['codec_format'];
}
+ if ((evt['chroma'] as String).isNotEmpty) {
+ _data.chroma = evt['chroma'];
+ }
notifyListeners();
} catch (e) {
//
@@ -2321,7 +2341,7 @@ class PeerInfo with ChangeNotifier {
bool isSupportMultiUiSession = false;
int currentDisplay = 0;
int primaryDisplay = kInvalidDisplayIndex;
- List displays = [];
+ RxList displays = [].obs;
Features features = Features();
List resolutions = [];
Map platformAdditions = {};
diff --git a/flutter/lib/models/native_model.dart b/flutter/lib/models/native_model.dart
index cdf7f54b2..ef74a17a2 100644
--- a/flutter/lib/models/native_model.dart
+++ b/flutter/lib/models/native_model.dart
@@ -15,7 +15,7 @@ import 'package:path_provider/path_provider.dart';
import '../common.dart';
import '../generated_bridge.dart';
-class RgbaFrame extends Struct {
+final class RgbaFrame extends Struct {
@Uint32()
external int len;
external Pointer data;
diff --git a/flutter/lib/models/peer_tab_model.dart b/flutter/lib/models/peer_tab_model.dart
index e4971d9ac..09d308c18 100644
--- a/flutter/lib/models/peer_tab_model.dart
+++ b/flutter/lib/models/peer_tab_model.dart
@@ -22,10 +22,10 @@ class PeerTabModel with ChangeNotifier {
int get currentTab => _currentTab;
int _currentTab = 0; // index in tabNames
List tabNames = [
- 'Recent Sessions',
+ 'Recent sessions',
'Favorites',
'Discovered',
- 'Address Book',
+ 'Address book',
'Group',
];
final List icons = [
diff --git a/flutter/lib/models/server_model.dart b/flutter/lib/models/server_model.dart
index 9fb91f463..1422596c2 100644
--- a/flutter/lib/models/server_model.dart
+++ b/flutter/lib/models/server_model.dart
@@ -8,7 +8,7 @@ import 'package:flutter_hbb/main.dart';
import 'package:flutter_hbb/models/chat_model.dart';
import 'package:flutter_hbb/models/platform_model.dart';
import 'package:get/get.dart';
-import 'package:wakelock/wakelock.dart';
+import 'package:wakelock_plus/wakelock_plus.dart';
import 'package:window_manager/window_manager.dart';
import '../common.dart';
@@ -380,7 +380,7 @@ class ServerModel with ChangeNotifier {
await bind.mainStartService();
updateClientState();
if (Platform.isAndroid) {
- Wakelock.enable();
+ WakelockPlus.enable();
}
}
@@ -393,7 +393,7 @@ class ServerModel with ChangeNotifier {
notifyListeners();
if (!Platform.isLinux) {
// current linux is not supported
- Wakelock.disable();
+ WakelockPlus.disable();
}
}
@@ -690,6 +690,7 @@ class Client {
bool file = false;
bool restart = false;
bool recording = false;
+ bool blockInput = false;
bool disconnected = false;
bool fromSwitch = false;
bool inVoiceCall = false;
@@ -713,6 +714,7 @@ class Client {
file = json['file'];
restart = json['restart'];
recording = json['recording'];
+ blockInput = json['block_input'];
disconnected = json['disconnected'];
fromSwitch = json['from_switch'];
inVoiceCall = json['in_voice_call'];
@@ -733,6 +735,7 @@ class Client {
data['file'] = file;
data['restart'] = restart;
data['recording'] = recording;
+ data['block_input'] = blockInput;
data['disconnected'] = disconnected;
data['from_switch'] = fromSwitch;
return data;
diff --git a/flutter/macos/Podfile b/flutter/macos/Podfile
index 22d9caad2..049abe295 100644
--- a/flutter/macos/Podfile
+++ b/flutter/macos/Podfile
@@ -1,4 +1,4 @@
-platform :osx, '10.12'
+platform :osx, '10.14'
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
diff --git a/flutter/macos/Podfile.lock b/flutter/macos/Podfile.lock
index 3f6ebb9b6..40105d0fe 100644
--- a/flutter/macos/Podfile.lock
+++ b/flutter/macos/Podfile.lock
@@ -3,7 +3,9 @@ PODS:
- FlutterMacOS
- desktop_multi_window (0.0.1):
- FlutterMacOS
- - device_info_plus_macos (0.0.1):
+ - device_info_plus (0.0.1):
+ - FlutterMacOS
+ - file_selector_macos (0.0.1):
- FlutterMacOS
- flutter_custom_cursor (0.0.1):
- FlutterMacOS
@@ -27,7 +29,10 @@ PODS:
- FlutterMacOS
- url_launcher_macos (0.0.1):
- FlutterMacOS
- - wakelock_macos (0.0.1):
+ - video_player_avfoundation (0.0.1):
+ - Flutter
+ - FlutterMacOS
+ - wakelock_plus (0.0.1):
- FlutterMacOS
- window_manager (0.2.0):
- FlutterMacOS
@@ -37,7 +42,8 @@ PODS:
DEPENDENCIES:
- desktop_drop (from `Flutter/ephemeral/.symlinks/plugins/desktop_drop/macos`)
- desktop_multi_window (from `Flutter/ephemeral/.symlinks/plugins/desktop_multi_window/macos`)
- - device_info_plus_macos (from `Flutter/ephemeral/.symlinks/plugins/device_info_plus_macos/macos`)
+ - device_info_plus (from `Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos`)
+ - file_selector_macos (from `Flutter/ephemeral/.symlinks/plugins/file_selector_macos/macos`)
- flutter_custom_cursor (from `Flutter/ephemeral/.symlinks/plugins/flutter_custom_cursor/macos`)
- FlutterMacOS (from `Flutter/ephemeral`)
- package_info_plus (from `Flutter/ephemeral/.symlinks/plugins/package_info_plus/macos`)
@@ -47,7 +53,8 @@ DEPENDENCIES:
- texture_rgba_renderer (from `Flutter/ephemeral/.symlinks/plugins/texture_rgba_renderer/macos`)
- uni_links_desktop (from `Flutter/ephemeral/.symlinks/plugins/uni_links_desktop/macos`)
- url_launcher_macos (from `Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos`)
- - wakelock_macos (from `Flutter/ephemeral/.symlinks/plugins/wakelock_macos/macos`)
+ - video_player_avfoundation (from `Flutter/ephemeral/.symlinks/plugins/video_player_avfoundation/darwin`)
+ - wakelock_plus (from `Flutter/ephemeral/.symlinks/plugins/wakelock_plus/macos`)
- window_manager (from `Flutter/ephemeral/.symlinks/plugins/window_manager/macos`)
- window_size (from `Flutter/ephemeral/.symlinks/plugins/window_size/macos`)
@@ -60,8 +67,10 @@ EXTERNAL SOURCES:
:path: Flutter/ephemeral/.symlinks/plugins/desktop_drop/macos
desktop_multi_window:
:path: Flutter/ephemeral/.symlinks/plugins/desktop_multi_window/macos
- device_info_plus_macos:
- :path: Flutter/ephemeral/.symlinks/plugins/device_info_plus_macos/macos
+ device_info_plus:
+ :path: Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos
+ file_selector_macos:
+ :path: Flutter/ephemeral/.symlinks/plugins/file_selector_macos/macos
flutter_custom_cursor:
:path: Flutter/ephemeral/.symlinks/plugins/flutter_custom_cursor/macos
FlutterMacOS:
@@ -80,8 +89,10 @@ EXTERNAL SOURCES:
:path: Flutter/ephemeral/.symlinks/plugins/uni_links_desktop/macos
url_launcher_macos:
:path: Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos
- wakelock_macos:
- :path: Flutter/ephemeral/.symlinks/plugins/wakelock_macos/macos
+ video_player_avfoundation:
+ :path: Flutter/ephemeral/.symlinks/plugins/video_player_avfoundation/darwin
+ wakelock_plus:
+ :path: Flutter/ephemeral/.symlinks/plugins/wakelock_plus/macos
window_manager:
:path: Flutter/ephemeral/.symlinks/plugins/window_manager/macos
window_size:
@@ -90,21 +101,23 @@ EXTERNAL SOURCES:
SPEC CHECKSUMS:
desktop_drop: 69eeff437544aa619c8db7f4481b3a65f7696898
desktop_multi_window: 566489c048b501134f9d7fb6a2354c60a9126486
- device_info_plus_macos: 1ad388a1ef433505c4038e7dd9605aadd1e2e9c7
+ device_info_plus: 5401765fde0b8d062a2f8eb65510fb17e77cf07f
+ file_selector_macos: 468fb6b81fac7c0e88d71317f3eec34c3b008ff9
flutter_custom_cursor: 629957115075c672287bd0fa979d863ccf6024f7
FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24
FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
package_info_plus: 02d7a575e80f194102bef286361c6c326e4c29ce
- path_provider_foundation: 37748e03f12783f9de2cb2c4eadfaa25fe6d4852
+ path_provider_foundation: 29f094ae23ebbca9d3d0cec13889cd9060c0e943
screen_retriever: 59634572a57080243dd1bf715e55b6c54f241a38
sqflite: a5789cceda41d54d23f31d6de539d65bb14100ea
texture_rgba_renderer: cbed959a3c127122194a364e14b8577bd62dc8f2
uni_links_desktop: 45900fb319df48fcdea2df0756e9c2626696b026
- url_launcher_macos: c04e4fa86382d4f94f6b38f14625708be3ae52e2
- wakelock_macos: bc3f2a9bd8d2e6c89fee1e1822e7ddac3bd004a9
+ url_launcher_macos: d2691c7dd33ed713bf3544850a623080ec693d95
+ video_player_avfoundation: 8563f13d8fc8b2c29dc2d09e60b660e4e8128837
+ wakelock_plus: 4783562c9a43d209c458cb9b30692134af456269
window_manager: 3a1844359a6295ab1e47659b1a777e36773cd6e8
window_size: 339dafa0b27a95a62a843042038fa6c3c48de195
-PODFILE CHECKSUM: c7161fcf45d4fd9025dc0f48a76d6e64e52f8176
+PODFILE CHECKSUM: 353c8bcc5d5b0994e508d035b5431cfe18c1dea7
COCOAPODS: 1.12.1
diff --git a/flutter/macos/Runner.xcodeproj/project.pbxproj b/flutter/macos/Runner.xcodeproj/project.pbxproj
index c73e666c7..8aac49dd1 100644
--- a/flutter/macos/Runner.xcodeproj/project.pbxproj
+++ b/flutter/macos/Runner.xcodeproj/project.pbxproj
@@ -210,7 +210,7 @@
isa = PBXProject;
attributes = {
LastSwiftUpdateCheck = 0920;
- LastUpgradeCheck = 1300;
+ LastUpgradeCheck = 1430;
ORGANIZATIONNAME = "";
TargetAttributes = {
33CC10EC2044A3C60003C045 = {
diff --git a/flutter/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/flutter/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
index 9c428a004..12c2b8aa8 100644
--- a/flutter/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
+++ b/flutter/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
@@ -1,6 +1,6 @@
=3.0.0 <4.0.0"
- flutter: ">=3.10.0"
+ dart: ">=3.1.0 <4.0.0"
+ flutter: ">=3.13.0"
diff --git a/flutter/pubspec.yaml b/flutter/pubspec.yaml
index 1ae62f341..d0498eb68 100644
--- a/flutter/pubspec.yaml
+++ b/flutter/pubspec.yaml
@@ -19,7 +19,7 @@ publish_to: "none" # Remove this line if you wish to publish to pub.dev
version: 1.2.4+39
environment:
- sdk: ">=2.17.0"
+ sdk: '^3.1.0'
dependencies:
flutter:
@@ -27,31 +27,29 @@ dependencies:
flutter_localizations:
sdk: flutter
- ffi: ^2.0.1
- path_provider: ^2.0.12
- external_path: ^1.0.1
- provider: ^6.0.3
+ ffi: ^2.1.0
+ path_provider: ^2.1.1
+ external_path: ^1.0.3
+ provider: ^6.0.5
tuple: ^2.0.0
- wakelock: ^0.6.2
- # Keep this version for the compatibility of some old systems like win7.
- device_info_plus: ^4.1.2
+ wakelock_plus: ^1.1.3
#firebase_analytics: ^9.1.5
- package_info_plus: ^3.1.2
- url_launcher: ^6.0.9
+ package_info_plus: ^4.2.0
+ url_launcher: ^6.2.1
toggle_switch: ^2.1.0
- dash_chat_2:
+ dash_chat_2:
git:
url: https://github.com/rustdesk-org/Dash-Chat-2
- draggable_float_widget: ^0.0.2
+ draggable_float_widget: ^0.1.0
settings_ui: ^2.0.2
flutter_breadcrumb: ^1.0.1
- http: ^0.13.4
+ http: ^1.1.0
qr_code_scanner: ^1.0.0
zxing2: ^0.2.0
image_picker: ^0.8.5
image: ^4.0.17
back_button_interceptor: ^6.0.1
- flutter_rust_bridge: "<1.76.0"
+ flutter_rust_bridge: "1.80.1"
window_manager:
git:
url: https://github.com/rustdesk-org/window_manager
@@ -68,10 +66,7 @@ dependencies:
get: ^4.6.5
visibility_detector: ^0.4.0+2
contextmenu: ^3.0.0
- desktop_drop:
- git:
- url: https://github.com/rustdesk-org/flutter-plugins
- path: ./packages/desktop_drop
+ desktop_drop: ^0.4.4
scroll_pos: ^0.4.0
debounce_throttle: ^2.0.0
file_picker: ^5.1.0
@@ -84,7 +79,7 @@ dependencies:
git:
url: https://github.com/rustdesk-org/flutter_improved_scrolling
uni_links: ^0.5.1
- uni_links_desktop:
+ uni_links_desktop:
git:
url: https://github.com/rustdesk-org/uni_links_desktop
path: ^1.8.1
@@ -105,6 +100,7 @@ dependencies:
url: https://github.com/21pages/dynamic_layouts.git
ref: 24cb88413fa5181d949ddacbb30a65d5c459e7d9
pull_down_button: ^0.9.3
+ device_info_plus: ^9.1.0
dev_dependencies:
icons_launcher: ^2.0.4
@@ -113,7 +109,7 @@ dev_dependencies:
build_runner: ^2.4.6
freezed: ^2.4.2
flutter_lints: ^2.0.2
- ffigen: ^7.2.4
+ ffigen: ^8.0.2
# rerun: flutter pub run flutter_launcher_icons
flutter_icons:
diff --git a/flutter/run.sh b/flutter/run.sh
index 1ce44a99e..cc6436b38 100755
--- a/flutter/run.sh
+++ b/flutter/run.sh
@@ -1,6 +1,6 @@
#!/usr/bin/env bash
-cargo install flutter_rust_bridge_codegen --version 1.75.3 --features uuid
+cargo install flutter_rust_bridge_codegen --version 1.80.1 --features uuid
flutter pub get
~/.cargo/bin/flutter_rust_bridge_codegen --rust-input ../src/flutter_ffi.rs --dart-output ./lib/generated_bridge.dart --c-output ./macos/Runner/bridge_generated.h
# call `flutter clean` if cargo build fails
diff --git a/libs/clipboard/Cargo.toml b/libs/clipboard/Cargo.toml
index bc20ecfc5..c3673a9bd 100644
--- a/libs/clipboard/Cargo.toml
+++ b/libs/clipboard/Cargo.toml
@@ -2,16 +2,48 @@
name = "clipboard"
version = "0.1.0"
edition = "2021"
-build= "build.rs"
+build = "build.rs"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[build-dependencies]
cc = "1.0"
+[features]
+default = []
+unix-file-copy-paste = [
+"dep:x11rb",
+"dep:x11-clipboard",
+"dep:rand",
+"dep:fuser",
+"dep:libc",
+"dep:dashmap",
+"dep:percent-encoding",
+"dep:utf16string",
+"dep:once_cell",
+"dep:cacao"
+]
+
[dependencies]
thiserror = "1.0"
lazy_static = "1.4"
serde = "1.0"
serde_derive = "1.0"
hbb_common = { path = "../hbb_common" }
+parking_lot = {version = "0.12"}
+
+[target.'cfg(any(target_os = "linux", target_os = "macos"))'.dependencies]
+rand = {version = "0.8", optional = true}
+fuser = {version = "0.13", optional = true}
+libc = {version = "0.2", optional = true}
+dashmap = {version ="5.5", optional = true}
+utf16string = {version = "0.2", optional = true}
+once_cell = {version = "1.18", optional = true}
+
+[target.'cfg(target_os = "linux")'.dependencies]
+percent-encoding = {version ="2.3", optional = true}
+x11-clipboard = {git="https://github.com/clslaid/x11-clipboard", branch = "feat/store-batch", optional = true}
+x11rb = {version = "0.12", features = ["all-extensions"], optional = true}
+
+[target.'cfg(target_os = "macos")'.dependencies]
+cacao = {git="https://github.com/clslaid/cacao", branch = "feat/set-file-urls", optional = true}
diff --git a/libs/clipboard/README.md b/libs/clipboard/README.md
index ea2b85785..6333a0644 100644
--- a/libs/clipboard/README.md
+++ b/libs/clipboard/README.md
@@ -3,8 +3,74 @@
Copy files and text through network.
Main lowlevel logic from [FreeRDP](https://github.com/FreeRDP/FreeRDP).
+To enjoy file copy and paste feature on Linux/OSX,
+please build with `unix-file-copy-paste` feature.
+
TODO: Move this lib to a separate project.
+## How it works
+
+Terminalogies:
+
+- cliprdr: this module
+- local: the endpoint which initiates a file copy events
+- remote: the endpoint which paste the file copied from `local`
+
+The main algorithm of copying and pasting files is from
+[Remote Desktop Protocol: Clipboard Virtual Channel Extension](https://winprotocoldoc.blob.core.windows.net/productionwindowsarchives/MS-RDPECLIP/%5bMS-RDPECLIP%5d.pdf),
+and could be concluded as:
+
+0. local and remote notify each other that it's ready.
+1. local subscribes/listening to the system's clipboard for file copy
+2. local once got file copy event, notice the remote
+3. remote confirms receive and try pulls the file list
+4. local updates its file-list, the remote flushes pulled file list to the clipboard
+5. remote OS or desktop manager initiates a paste, making other programs reading
+ clipboard files. Convert those reading requests to RPCs
+
+ - on Windows, all file reading will go through the stream file API
+ - on Linux/OSX, FUSE is used for converting reading requests to RPCs
+ - in case of local clipboard been transferred back
+ and leading to a dead loop,
+ all file copy event pointing at the FUSE directory will be ignored
+
+6. finishing pasting all files one by one.
+
+In a perspective of network data transferring:
+
+```mermaid
+sequenceDiagram
+ participant l as Local
+ participant r as Remote
+ note over l, r: Initialize
+ l ->> r: Monitor Ready
+ r ->> l: Monitor Ready
+ loop Get clipboard update
+ l ->> r: Format List (I got update)
+ r ->> l: Format List Response (notified)
+ r ->> l: Format Data Request (requests file list)
+ activate l
+ note left of l: Retrive file list from system clipboard
+ l ->> r: Format Data Response (containing file list)
+ deactivate l
+ note over r: Update system clipboard with received file list
+ end
+ loop Some application requests copied files
+ note right of r: application reads file from x to x+y
+ note over r: the file is the a-th file on list
+ r ->> l: File Contents Request (read file a offset x size y)
+ activate l
+ note left of l: Find a-th file on list, read from x to x+y
+ l ->> r: File Contents Response (contents of file a offset x size y)
+ deactivate l
+ end
+```
+
+Note: In actual implementation, both sides could play send clipboard update
+and request file contents.
+There is no such limitation that only local can update clipboard
+and copy files to remote.
+
## impl
### windows
@@ -14,3 +80,82 @@ TODO: Move this lib to a separate project.
![A1->B1](./docs/assets/win_A_B.png)
![B1->A1](./docs/assets/win_B_A.png)
+
+The protocol was originally designed as an extension of the Windows RDP,
+so the specific message packages fits windows well.
+
+When starting cliprdr, a thread is spawn to create a invisible window
+and to subscribe to OLE clipboard events.
+The window's callback (see `cliprdr_proc` in `src/windows/wf_cliprdr.c`) was
+set to handle a variaty of events.
+
+Detailed implementation is shown in pictures above.
+
+### Linux/OSX
+
+The Cliprdr Server implementation has mainly 3 parts:
+
+- Clipboard Client
+- Local File list
+- FUSE server
+
+#### Clipboard Client
+
+The clipboard client has a thread polling for file urls on clipboard.
+
+If the client found any updates of file urls,
+after filtering out those pointing to our FUSE directory or duplicated,
+send format list directly to remote.
+
+The cliprdr server also uses clipboard client for setting clipboard,
+or retrive paths from system.
+
+#### Local File List
+
+The local file list is a temperary list of file metadata.
+When receiving file contents PDU from peer, the server picks
+out the file requested and open it for reading if necessary.
+
+Also when receiving Format Data Request PDU from remote asking for file list,
+the local file list should be rebuilt from file list retrieved from Clipboard Client.
+
+Some caching and preloading could done on it since applications are likely to read
+on the list sequentially.
+
+#### FUSE server
+
+The FUSE server could convert POSIX file reading request to File Contents
+Request/Response RPCs.
+
+When received file list from remote,
+the FUSE server will figure out the file system tree and rearrange its content.
+
+#### Groceries
+
+- The protocol was originally implemented for windows,
+ so paths in PDU will all be converted to DOS formats in UTF-16 LE encoding,
+ and datetimes will be converted to LDAP timestamp instead of
+ unix timestamp
+
+ ```text
+ UNIX
+ /usr/bin/rustdesk
+ ->
+ DOS
+ \usr\bin\rustdesk
+ ```
+
+- To better fit for preserving permissions on unix-like platforms,
+ a reserved area of FileDescriptor PDU
+
+- you may notice
+ the mountpoint is still occupied after the application quits.
+ That's because the FUSE server was not mounted with `AUTO_UNMOUNT`.
+ - It's hard to implement gressful shutdown for a multi-processed program
+ - `AUTO_UNMOUNT` was not enabled by default and requires enable
+ `user_allow_other` in configure. Letting users edit such global
+ configuration to use this feature might not be a good idea.
+ - use [`umount()`](https://man7.org/linux/man-pages/man2/umount.2.html)
+ syscall to unmount will also require that option.
+ - we currently directly call [`umount`](https://man7.org/linux/man-pages/man8/umount.8.html)
+ program to unmount dangling FUSE server. It worked perfectly for now.
diff --git a/libs/clipboard/build.rs b/libs/clipboard/build.rs
index 7eb52c75b..3902eaa40 100644
--- a/libs/clipboard/build.rs
+++ b/libs/clipboard/build.rs
@@ -1,43 +1,35 @@
-use cc;
-
+#[cfg(target_os = "windows")]
fn build_c_impl() {
let mut build = cc::Build::new();
- #[cfg(target_os = "windows")]
build.file("src/windows/wf_cliprdr.c");
- #[cfg(target_os = "linux")]
- build.file("src/X11/xf_cliprdr.c");
- #[cfg(target_os = "macos")]
- build.file("src/OSX/Clipboard.m");
- build.flag_if_supported("-Wno-c++0x-extensions");
- build.flag_if_supported("-Wno-return-type-c-linkage");
- build.flag_if_supported("-Wno-invalid-offsetof");
- build.flag_if_supported("-Wno-unused-parameter");
+ {
+ build.flag_if_supported("-Wno-c++0x-extensions");
+ build.flag_if_supported("-Wno-return-type-c-linkage");
+ build.flag_if_supported("-Wno-invalid-offsetof");
+ build.flag_if_supported("-Wno-unused-parameter");
- if build.get_compiler().is_like_msvc() {
- build.define("WIN32", "");
- // build.define("_AMD64_", "");
- build.flag("-Z7");
- build.flag("-GR-");
- // build.flag("-std:c++11");
- } else {
- build.flag("-fPIC");
- // build.flag("-std=c++11");
- // build.flag("-include");
- // build.flag(&confdefs_path.to_string_lossy());
+ if build.get_compiler().is_like_msvc() {
+ build.define("WIN32", "");
+ // build.define("_AMD64_", "");
+ build.flag("-Z7");
+ build.flag("-GR-");
+ // build.flag("-std:c++11");
+ } else {
+ build.flag("-fPIC");
+ // build.flag("-std=c++11");
+ // build.flag("-include");
+ // build.flag(&confdefs_path.to_string_lossy());
+ }
+
+ build.compile("mycliprdr");
}
- build.compile("mycliprdr");
-
- #[cfg(target_os = "windows")]
println!("cargo:rerun-if-changed=src/windows/wf_cliprdr.c");
- #[cfg(target_os = "linux")]
- println!("cargo:rerun-if-changed=src/X11/xf_cliprdr.c");
- #[cfg(target_os = "macos")]
- println!("cargo:rerun-if-changed=src/OSX/Clipboard.m");
}
fn main() {
+ #[cfg(target_os = "windows")]
build_c_impl();
}
diff --git a/libs/clipboard/src/OSX/Clipboard.m b/libs/clipboard/src/OSX/Clipboard.m
deleted file mode 100644
index 658579ce0..000000000
--- a/libs/clipboard/src/OSX/Clipboard.m
+++ /dev/null
@@ -1,11 +0,0 @@
-#include "../cliprdr.h"
-
-void mac_cliprdr_init(CliprdrClientContext *cliprdr)
-{
- (void)cliprdr;
-}
-
-void mac_cliprdr_uninit(CliprdrClientContext *cliprdr)
-{
- (void)cliprdr;
-}
diff --git a/libs/clipboard/src/X11/xf_cliprdr.c b/libs/clipboard/src/X11/xf_cliprdr.c
deleted file mode 100644
index 55d34a088..000000000
--- a/libs/clipboard/src/X11/xf_cliprdr.c
+++ /dev/null
@@ -1,11 +0,0 @@
-#include "../cliprdr.h"
-
-void xf_cliprdr_init(CliprdrClientContext* cliprdr)
-{
- (void)cliprdr;
-}
-
-void xf_cliprdr_uninit( CliprdrClientContext* cliprdr)
-{
- (void)cliprdr;
-}
diff --git a/libs/clipboard/src/cliprdr.rs b/libs/clipboard/src/cliprdr.rs
deleted file mode 100644
index c787d8ef6..000000000
--- a/libs/clipboard/src/cliprdr.rs
+++ /dev/null
@@ -1,573 +0,0 @@
-#![allow(dead_code)]
-#![allow(non_camel_case_types)]
-#![allow(unused_variables)]
-#![allow(non_snake_case)]
-#![allow(deref_nullptr)]
-
-use std::{boxed::Box, result::Result};
-use thiserror::Error;
-
-pub type size_t = ::std::os::raw::c_ulonglong;
-pub type __vcrt_bool = bool;
-pub type wchar_t = ::std::os::raw::c_ushort;
-
-pub type POINTER_64_INT = ::std::os::raw::c_ulonglong;
-pub type INT8 = ::std::os::raw::c_schar;
-pub type PINT8 = *mut ::std::os::raw::c_schar;
-pub type INT16 = ::std::os::raw::c_short;
-pub type PINT16 = *mut ::std::os::raw::c_short;
-pub type INT32 = ::std::os::raw::c_int;
-pub type PINT32 = *mut ::std::os::raw::c_int;
-pub type INT64 = ::std::os::raw::c_longlong;
-pub type PINT64 = *mut ::std::os::raw::c_longlong;
-pub type UINT8 = ::std::os::raw::c_uchar;
-pub type PUINT8 = *mut ::std::os::raw::c_uchar;
-pub type UINT16 = ::std::os::raw::c_ushort;
-pub type PUINT16 = *mut ::std::os::raw::c_ushort;
-pub type UINT32 = ::std::os::raw::c_uint;
-pub type PUINT32 = *mut ::std::os::raw::c_uint;
-pub type UINT64 = ::std::os::raw::c_ulonglong;
-pub type PUINT64 = *mut ::std::os::raw::c_ulonglong;
-pub type LONG32 = ::std::os::raw::c_int;
-pub type PLONG32 = *mut ::std::os::raw::c_int;
-pub type ULONG32 = ::std::os::raw::c_uint;
-pub type PULONG32 = *mut ::std::os::raw::c_uint;
-pub type DWORD32 = ::std::os::raw::c_uint;
-pub type PDWORD32 = *mut ::std::os::raw::c_uint;
-pub type INT_PTR = ::std::os::raw::c_longlong;
-pub type PINT_PTR = *mut ::std::os::raw::c_longlong;
-pub type UINT_PTR = ::std::os::raw::c_ulonglong;
-pub type PUINT_PTR = *mut ::std::os::raw::c_ulonglong;
-pub type LONG_PTR = ::std::os::raw::c_longlong;
-pub type PLONG_PTR = *mut ::std::os::raw::c_longlong;
-pub type ULONG_PTR = ::std::os::raw::c_ulonglong;
-pub type PULONG_PTR = *mut ::std::os::raw::c_ulonglong;
-pub type SHANDLE_PTR = ::std::os::raw::c_longlong;
-pub type HANDLE_PTR = ::std::os::raw::c_ulonglong;
-pub type UHALF_PTR = ::std::os::raw::c_uint;
-pub type PUHALF_PTR = *mut ::std::os::raw::c_uint;
-pub type HALF_PTR = ::std::os::raw::c_int;
-pub type PHALF_PTR = *mut ::std::os::raw::c_int;
-pub type SIZE_T = ULONG_PTR;
-pub type PSIZE_T = *mut ULONG_PTR;
-pub type SSIZE_T = LONG_PTR;
-pub type PSSIZE_T = *mut LONG_PTR;
-pub type DWORD_PTR = ULONG_PTR;
-pub type PDWORD_PTR = *mut ULONG_PTR;
-pub type LONG64 = ::std::os::raw::c_longlong;
-pub type PLONG64 = *mut ::std::os::raw::c_longlong;
-pub type ULONG64 = ::std::os::raw::c_ulonglong;
-pub type PULONG64 = *mut ::std::os::raw::c_ulonglong;
-pub type DWORD64 = ::std::os::raw::c_ulonglong;
-pub type PDWORD64 = *mut ::std::os::raw::c_ulonglong;
-pub type KAFFINITY = ULONG_PTR;
-pub type PKAFFINITY = *mut KAFFINITY;
-pub type PVOID = *mut ::std::os::raw::c_void;
-pub type CHAR = ::std::os::raw::c_char;
-pub type SHORT = ::std::os::raw::c_short;
-pub type LONG = ::std::os::raw::c_long;
-pub type WCHAR = wchar_t;
-pub type PWCHAR = *mut WCHAR;
-pub type LPWCH = *mut WCHAR;
-pub type PWCH = *mut WCHAR;
-pub type LPCWCH = *const WCHAR;
-pub type PCWCH = *const WCHAR;
-pub type NWPSTR = *mut WCHAR;
-pub type LPWSTR = *mut WCHAR;
-pub type PWSTR = *mut WCHAR;
-pub type PZPWSTR = *mut PWSTR;
-pub type PCZPWSTR = *const PWSTR;
-pub type LPUWSTR = *mut WCHAR;
-pub type PUWSTR = *mut WCHAR;
-pub type LPCWSTR = *const WCHAR;
-pub type PCWSTR = *const WCHAR;
-pub type PZPCWSTR = *mut PCWSTR;
-pub type PCZPCWSTR = *const PCWSTR;
-pub type LPCUWSTR = *const WCHAR;
-pub type PCUWSTR = *const WCHAR;
-pub type PZZWSTR = *mut WCHAR;
-pub type PCZZWSTR = *const WCHAR;
-pub type PUZZWSTR = *mut WCHAR;
-pub type PCUZZWSTR = *const WCHAR;
-pub type PNZWCH = *mut WCHAR;
-pub type PCNZWCH = *const WCHAR;
-pub type PUNZWCH = *mut WCHAR;
-pub type PCUNZWCH = *const WCHAR;
-pub type PCHAR = *mut CHAR;
-pub type LPCH = *mut CHAR;
-pub type PCH = *mut CHAR;
-pub type LPCCH = *const CHAR;
-pub type PCCH = *const CHAR;
-pub type NPSTR = *mut CHAR;
-pub type LPSTR = *mut CHAR;
-pub type PSTR = *mut CHAR;
-pub type PZPSTR = *mut PSTR;
-pub type PCZPSTR = *const PSTR;
-pub type LPCSTR = *const CHAR;
-pub type PCSTR = *const CHAR;
-pub type PZPCSTR = *mut PCSTR;
-pub type PCZPCSTR = *const PCSTR;
-pub type PZZSTR = *mut CHAR;
-pub type PCZZSTR = *const CHAR;
-pub type PNZCH = *mut CHAR;
-pub type PCNZCH = *const CHAR;
-pub type TCHAR = ::std::os::raw::c_char;
-pub type PTCHAR = *mut ::std::os::raw::c_char;
-pub type TBYTE = ::std::os::raw::c_uchar;
-pub type PTBYTE = *mut ::std::os::raw::c_uchar;
-pub type LPTCH = LPCH;
-pub type PTCH = LPCH;
-pub type LPCTCH = LPCCH;
-pub type PCTCH = LPCCH;
-pub type PTSTR = LPSTR;
-pub type LPTSTR = LPSTR;
-pub type PUTSTR = LPSTR;
-pub type LPUTSTR = LPSTR;
-pub type PCTSTR = LPCSTR;
-pub type LPCTSTR = LPCSTR;
-pub type PCUTSTR = LPCSTR;
-pub type LPCUTSTR = LPCSTR;
-pub type PZZTSTR = PZZSTR;
-pub type PUZZTSTR = PZZSTR;
-pub type PCZZTSTR = PCZZSTR;
-pub type PCUZZTSTR = PCZZSTR;
-pub type PZPTSTR = PZPSTR;
-pub type PNZTCH = PNZCH;
-pub type PUNZTCH = PNZCH;
-pub type PCNZTCH = PCNZCH;
-pub type PCUNZTCH = PCNZCH;
-pub type PSHORT = *mut SHORT;
-pub type PLONG = *mut LONG;
-pub type ULONG = ::std::os::raw::c_ulong;
-pub type PULONG = *mut ULONG;
-pub type USHORT = ::std::os::raw::c_ushort;
-pub type PUSHORT = *mut USHORT;
-pub type UCHAR = ::std::os::raw::c_uchar;
-pub type PUCHAR = *mut UCHAR;
-pub type PSZ = *mut ::std::os::raw::c_char;
-pub type DWORD = ::std::os::raw::c_ulong;
-pub type BOOL = ::std::os::raw::c_int;
-pub type BYTE = ::std::os::raw::c_uchar;
-pub type WORD = ::std::os::raw::c_ushort;
-pub type FLOAT = f32;
-pub type PFLOAT = *mut FLOAT;
-pub type PBOOL = *mut BOOL;
-pub type LPBOOL = *mut BOOL;
-pub type PBYTE = *mut BYTE;
-pub type LPBYTE = *mut BYTE;
-pub type PINT = *mut ::std::os::raw::c_int;
-pub type LPINT = *mut ::std::os::raw::c_int;
-pub type PWORD = *mut WORD;
-pub type LPWORD = *mut WORD;
-pub type LPLONG = *mut ::std::os::raw::c_long;
-pub type PDWORD = *mut DWORD;
-pub type LPDWORD = *mut DWORD;
-pub type LPVOID = *mut ::std::os::raw::c_void;
-pub type LPCVOID = *const ::std::os::raw::c_void;
-pub type INT = ::std::os::raw::c_int;
-pub type UINT = ::std::os::raw::c_uint;
-pub type PUINT = *mut ::std::os::raw::c_uint;
-pub type va_list = *mut ::std::os::raw::c_char;
-
-pub const TRUE: ::std::os::raw::c_int = 1;
-pub const FALSE: ::std::os::raw::c_int = 0;
-
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct _CLIPRDR_HEADER {
- pub connID: UINT32,
- pub msgType: UINT16,
- pub msgFlags: UINT16,
- pub dataLen: UINT32,
-}
-pub type CLIPRDR_HEADER = _CLIPRDR_HEADER;
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct _CLIPRDR_CAPABILITY_SET {
- pub capabilitySetType: UINT16,
- pub capabilitySetLength: UINT16,
-}
-pub type CLIPRDR_CAPABILITY_SET = _CLIPRDR_CAPABILITY_SET;
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct _CLIPRDR_GENERAL_CAPABILITY_SET {
- pub capabilitySetType: UINT16,
- pub capabilitySetLength: UINT16,
- pub version: UINT32,
- pub generalFlags: UINT32,
-}
-pub type CLIPRDR_GENERAL_CAPABILITY_SET = _CLIPRDR_GENERAL_CAPABILITY_SET;
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct _CLIPRDR_CAPABILITIES {
- pub connID: UINT32,
- pub msgType: UINT16,
- pub msgFlags: UINT16,
- pub dataLen: UINT32,
- pub cCapabilitiesSets: UINT32,
- pub capabilitySets: *mut CLIPRDR_CAPABILITY_SET,
-}
-pub type CLIPRDR_CAPABILITIES = _CLIPRDR_CAPABILITIES;
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct _CLIPRDR_MONITOR_READY {
- pub connID: UINT32,
- pub msgType: UINT16,
- pub msgFlags: UINT16,
- pub dataLen: UINT32,
-}
-pub type CLIPRDR_MONITOR_READY = _CLIPRDR_MONITOR_READY;
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct _CLIPRDR_TEMP_DIRECTORY {
- pub connID: UINT32,
- pub msgType: UINT16,
- pub msgFlags: UINT16,
- pub dataLen: UINT32,
- pub szTempDir: [::std::os::raw::c_char; 520usize],
-}
-pub type CLIPRDR_TEMP_DIRECTORY = _CLIPRDR_TEMP_DIRECTORY;
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct _CLIPRDR_FORMAT {
- pub formatId: UINT32,
- pub formatName: *mut ::std::os::raw::c_char,
-}
-pub type CLIPRDR_FORMAT = _CLIPRDR_FORMAT;
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct _CLIPRDR_FORMAT_LIST {
- pub connID: UINT32,
- pub msgType: UINT16,
- pub msgFlags: UINT16,
- pub dataLen: UINT32,
- pub numFormats: UINT32,
- pub formats: *mut CLIPRDR_FORMAT,
-}
-pub type CLIPRDR_FORMAT_LIST = _CLIPRDR_FORMAT_LIST;
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct _CLIPRDR_FORMAT_LIST_RESPONSE {
- pub connID: UINT32,
- pub msgType: UINT16,
- pub msgFlags: UINT16,
- pub dataLen: UINT32,
-}
-pub type CLIPRDR_FORMAT_LIST_RESPONSE = _CLIPRDR_FORMAT_LIST_RESPONSE;
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct _CLIPRDR_LOCK_CLIPBOARD_DATA {
- pub connID: UINT32,
- pub msgType: UINT16,
- pub msgFlags: UINT16,
- pub dataLen: UINT32,
- pub clipDataId: UINT32,
-}
-pub type CLIPRDR_LOCK_CLIPBOARD_DATA = _CLIPRDR_LOCK_CLIPBOARD_DATA;
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct _CLIPRDR_UNLOCK_CLIPBOARD_DATA {
- pub connID: UINT32,
- pub msgType: UINT16,
- pub msgFlags: UINT16,
- pub dataLen: UINT32,
- pub clipDataId: UINT32,
-}
-pub type CLIPRDR_UNLOCK_CLIPBOARD_DATA = _CLIPRDR_UNLOCK_CLIPBOARD_DATA;
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct _CLIPRDR_FORMAT_DATA_REQUEST {
- pub connID: UINT32,
- pub msgType: UINT16,
- pub msgFlags: UINT16,
- pub dataLen: UINT32,
- pub requestedFormatId: UINT32,
-}
-pub type CLIPRDR_FORMAT_DATA_REQUEST = _CLIPRDR_FORMAT_DATA_REQUEST;
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct _CLIPRDR_FORMAT_DATA_RESPONSE {
- pub connID: UINT32,
- pub msgType: UINT16,
- pub msgFlags: UINT16,
- pub dataLen: UINT32,
- pub requestedFormatData: *const BYTE,
-}
-pub type CLIPRDR_FORMAT_DATA_RESPONSE = _CLIPRDR_FORMAT_DATA_RESPONSE;
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct _CLIPRDR_FILE_CONTENTS_REQUEST {
- pub connID: UINT32,
- pub msgType: UINT16,
- pub msgFlags: UINT16,
- pub dataLen: UINT32,
- pub streamId: UINT32,
- pub listIndex: UINT32,
- pub dwFlags: UINT32,
- pub nPositionLow: UINT32,
- pub nPositionHigh: UINT32,
- pub cbRequested: UINT32,
- pub haveClipDataId: BOOL,
- pub clipDataId: UINT32,
-}
-pub type CLIPRDR_FILE_CONTENTS_REQUEST = _CLIPRDR_FILE_CONTENTS_REQUEST;
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct _CLIPRDR_FILE_CONTENTS_RESPONSE {
- pub connID: UINT32,
- pub msgType: UINT16,
- pub msgFlags: UINT16,
- pub dataLen: UINT32,
- pub streamId: UINT32,
- pub cbRequested: UINT32,
- pub requestedData: *const BYTE,
-}
-pub type CLIPRDR_FILE_CONTENTS_RESPONSE = _CLIPRDR_FILE_CONTENTS_RESPONSE;
-pub type CliprdrClientContext = _cliprdr_client_context;
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct _NOTIFICATION_MESSAGE {
- pub r#type: UINT32, // 0 - info, 1 - warning, 2 - error
- pub msg: *const BYTE,
- pub details: *const BYTE,
-}
-pub type NOTIFICATION_MESSAGE = _NOTIFICATION_MESSAGE;
-pub type pcCliprdrServerCapabilities = ::std::option::Option<
- unsafe extern "C" fn(
- context: *mut CliprdrClientContext,
- capabilities: *const CLIPRDR_CAPABILITIES,
- ) -> UINT,
->;
-pub type pcCliprdrClientCapabilities = ::std::option::Option<
- unsafe extern "C" fn(
- context: *mut CliprdrClientContext,
- capabilities: *const CLIPRDR_CAPABILITIES,
- ) -> UINT,
->;
-pub type pcCliprdrMonitorReady = ::std::option::Option<
- unsafe extern "C" fn(
- context: *mut CliprdrClientContext,
- monitorReady: *const CLIPRDR_MONITOR_READY,
- ) -> UINT,
->;
-pub type pcCliprdrTempDirectory = ::std::option::Option<
- unsafe extern "C" fn(
- context: *mut CliprdrClientContext,
- tempDirectory: *const CLIPRDR_TEMP_DIRECTORY,
- ) -> UINT,
->;
-pub type pcNotifyClipboardMsg =
- ::std::option::Option UINT>;
-pub type pcCliprdrClientFormatList = ::std::option::Option<
- unsafe extern "C" fn(
- context: *mut CliprdrClientContext,
- formatList: *const CLIPRDR_FORMAT_LIST,
- ) -> UINT,
->;
-pub type pcCliprdrServerFormatList = ::std::option::Option<
- unsafe extern "C" fn(
- context: *mut CliprdrClientContext,
- formatList: *const CLIPRDR_FORMAT_LIST,
- ) -> UINT,
->;
-pub type pcCliprdrClientFormatListResponse = ::std::option::Option<
- unsafe extern "C" fn(
- context: *mut CliprdrClientContext,
- formatListResponse: *const CLIPRDR_FORMAT_LIST_RESPONSE,
- ) -> UINT,
->;
-pub type pcCliprdrServerFormatListResponse = ::std::option::Option<
- unsafe extern "C" fn(
- context: *mut CliprdrClientContext,
- formatListResponse: *const CLIPRDR_FORMAT_LIST_RESPONSE,
- ) -> UINT,
->;
-pub type pcCliprdrClientLockClipboardData = ::std::option::Option<
- unsafe extern "C" fn(
- context: *mut CliprdrClientContext,
- lockClipboardData: *const CLIPRDR_LOCK_CLIPBOARD_DATA,
- ) -> UINT,
->;
-pub type pcCliprdrServerLockClipboardData = ::std::option::Option<
- unsafe extern "C" fn(
- context: *mut CliprdrClientContext,
- lockClipboardData: *const CLIPRDR_LOCK_CLIPBOARD_DATA,
- ) -> UINT,
->;
-pub type pcCliprdrClientUnlockClipboardData = ::std::option::Option<
- unsafe extern "C" fn(
- context: *mut CliprdrClientContext,
- unlockClipboardData: *const CLIPRDR_UNLOCK_CLIPBOARD_DATA,
- ) -> UINT,
->;
-pub type pcCliprdrServerUnlockClipboardData = ::std::option::Option<
- unsafe extern "C" fn(
- context: *mut CliprdrClientContext,
- unlockClipboardData: *const CLIPRDR_UNLOCK_CLIPBOARD_DATA,
- ) -> UINT,
->;
-pub type pcCliprdrClientFormatDataRequest = ::std::option::Option<
- unsafe extern "C" fn(
- context: *mut CliprdrClientContext,
- formatDataRequest: *const CLIPRDR_FORMAT_DATA_REQUEST,
- ) -> UINT,
->;
-pub type pcCliprdrServerFormatDataRequest = ::std::option::Option<
- unsafe extern "C" fn(
- context: *mut CliprdrClientContext,
- formatDataRequest: *const CLIPRDR_FORMAT_DATA_REQUEST,
- ) -> UINT,
->;
-pub type pcCliprdrClientFormatDataResponse = ::std::option::Option<
- unsafe extern "C" fn(
- context: *mut CliprdrClientContext,
- formatDataResponse: *const CLIPRDR_FORMAT_DATA_RESPONSE,
- ) -> UINT,
->;
-pub type pcCliprdrServerFormatDataResponse = ::std::option::Option<
- unsafe extern "C" fn(
- context: *mut CliprdrClientContext,
- formatDataResponse: *const CLIPRDR_FORMAT_DATA_RESPONSE,
- ) -> UINT,
->;
-pub type pcCliprdrClientFileContentsRequest = ::std::option::Option<
- unsafe extern "C" fn(
- context: *mut CliprdrClientContext,
- fileContentsRequest: *const CLIPRDR_FILE_CONTENTS_REQUEST,
- ) -> UINT,
->;
-pub type pcCliprdrServerFileContentsRequest = ::std::option::Option<
- unsafe extern "C" fn(
- context: *mut CliprdrClientContext,
- fileContentsRequest: *const CLIPRDR_FILE_CONTENTS_REQUEST,
- ) -> UINT,
->;
-pub type pcCliprdrClientFileContentsResponse = ::std::option::Option<
- unsafe extern "C" fn(
- context: *mut CliprdrClientContext,
- fileContentsResponse: *const CLIPRDR_FILE_CONTENTS_RESPONSE,
- ) -> UINT,
->;
-pub type pcCliprdrServerFileContentsResponse = ::std::option::Option<
- unsafe extern "C" fn(
- context: *mut CliprdrClientContext,
- fileContentsResponse: *const CLIPRDR_FILE_CONTENTS_RESPONSE,
- ) -> UINT,
->;
-
-// TODO: hide more members of clipboard context
-#[repr(C)]
-#[derive(Debug, Clone)]
-pub struct _cliprdr_client_context {
- pub Custom: *mut ::std::os::raw::c_void,
- pub EnableFiles: BOOL,
- pub EnableOthers: BOOL,
- pub IsStopped: BOOL,
- pub ResponseWaitTimeoutSecs: UINT32,
- pub ServerCapabilities: pcCliprdrServerCapabilities,
- pub ClientCapabilities: pcCliprdrClientCapabilities,
- pub MonitorReady: pcCliprdrMonitorReady,
- pub TempDirectory: pcCliprdrTempDirectory,
- pub NotifyClipboardMsg: pcNotifyClipboardMsg,
- pub ClientFormatList: pcCliprdrClientFormatList,
- pub ServerFormatList: pcCliprdrServerFormatList,
- pub ClientFormatListResponse: pcCliprdrClientFormatListResponse,
- pub ServerFormatListResponse: pcCliprdrServerFormatListResponse,
- pub ClientLockClipboardData: pcCliprdrClientLockClipboardData,
- pub ServerLockClipboardData: pcCliprdrServerLockClipboardData,
- pub ClientUnlockClipboardData: pcCliprdrClientUnlockClipboardData,
- pub ServerUnlockClipboardData: pcCliprdrServerUnlockClipboardData,
- pub ClientFormatDataRequest: pcCliprdrClientFormatDataRequest,
- pub ServerFormatDataRequest: pcCliprdrServerFormatDataRequest,
- pub ClientFormatDataResponse: pcCliprdrClientFormatDataResponse,
- pub ServerFormatDataResponse: pcCliprdrServerFormatDataResponse,
- pub ClientFileContentsRequest: pcCliprdrClientFileContentsRequest,
- pub ServerFileContentsRequest: pcCliprdrServerFileContentsRequest,
- pub ClientFileContentsResponse: pcCliprdrClientFileContentsResponse,
- pub ServerFileContentsResponse: pcCliprdrServerFileContentsResponse,
- pub LastRequestedFormatId: UINT32,
-}
-
-// #[link(name = "user32")]
-// #[link(name = "ole32")]
-extern "C" {
- pub(crate) fn init_cliprdr(context: *mut CliprdrClientContext) -> BOOL;
- pub(crate) fn uninit_cliprdr(context: *mut CliprdrClientContext) -> BOOL;
- pub(crate) fn empty_cliprdr(context: *mut CliprdrClientContext, connID: UINT32) -> BOOL;
-}
-
-#[derive(Error, Debug)]
-pub enum CliprdrError {
- #[error("invalid cliprdr name")]
- CliprdrName,
- #[error("failed to init cliprdr")]
- CliprdrInit,
- #[error("unknown cliprdr error")]
- Unknown,
-}
-
-impl CliprdrClientContext {
- pub fn create(
- enable_files: bool,
- enable_others: bool,
- response_wait_timeout_secs: u32,
- notify_callback: pcNotifyClipboardMsg,
- client_format_list: pcCliprdrClientFormatList,
- client_format_list_response: pcCliprdrClientFormatListResponse,
- client_format_data_request: pcCliprdrClientFormatDataRequest,
- client_format_data_response: pcCliprdrClientFormatDataResponse,
- client_file_contents_request: pcCliprdrClientFileContentsRequest,
- client_file_contents_response: pcCliprdrClientFileContentsResponse,
- ) -> Result, CliprdrError> {
- let context = CliprdrClientContext {
- Custom: 0 as *mut _,
- EnableFiles: if enable_files { TRUE } else { FALSE },
- EnableOthers: if enable_others { TRUE } else { FALSE },
- IsStopped: FALSE,
- ResponseWaitTimeoutSecs: response_wait_timeout_secs,
- ServerCapabilities: None,
- ClientCapabilities: None,
- MonitorReady: None,
- TempDirectory: None,
- NotifyClipboardMsg: notify_callback,
- ClientFormatList: client_format_list,
- ServerFormatList: None,
- ClientFormatListResponse: client_format_list_response,
- ServerFormatListResponse: None,
- ClientLockClipboardData: None,
- ServerLockClipboardData: None,
- ClientUnlockClipboardData: None,
- ServerUnlockClipboardData: None,
- ClientFormatDataRequest: client_format_data_request,
- ServerFormatDataRequest: None,
- ClientFormatDataResponse: client_format_data_response,
- ServerFormatDataResponse: None,
- ClientFileContentsRequest: client_file_contents_request,
- ServerFileContentsRequest: None,
- ClientFileContentsResponse: client_file_contents_response,
- ServerFileContentsResponse: None,
- LastRequestedFormatId: 0,
- };
- let mut context = Box::new(context);
- unsafe {
- if FALSE == init_cliprdr(&mut (*context)) {
- println!("Failed to init cliprdr");
- Err(CliprdrError::CliprdrInit)
- } else {
- Ok(context)
- }
- }
- }
-}
-
-impl Drop for CliprdrClientContext {
- fn drop(&mut self) {
- unsafe {
- if FALSE == uninit_cliprdr(&mut *self) {
- println!("Failed to uninit cliprdr");
- } else {
- println!("Succeeded to uninit cliprdr");
- }
- }
- }
-}
diff --git a/libs/clipboard/src/context_send.rs b/libs/clipboard/src/context_send.rs
index a2053d852..f3606509f 100644
--- a/libs/clipboard/src/context_send.rs
+++ b/libs/clipboard/src/context_send.rs
@@ -1,68 +1,72 @@
-use crate::cliprdr::*;
-use hbb_common::log;
+use hbb_common::{log, ResultType};
use std::sync::Mutex;
+use crate::CliprdrServiceContext;
+
const CLIPBOARD_RESPONSE_WAIT_TIMEOUT_SECS: u32 = 30;
lazy_static::lazy_static! {
- static ref CONTEXT_SEND: ContextSend = ContextSend{addr: Mutex::new(0)};
+ static ref CONTEXT_SEND: ContextSend = ContextSend{addr: Mutex::new(None)};
}
pub struct ContextSend {
- addr: Mutex,
+ addr: Mutex