diff --git a/.github/workflows/flutter-nightly.yml b/.github/workflows/flutter-nightly.yml index 4ccd42081..5474183db 100644 --- a/.github/workflows/flutter-nightly.yml +++ b/.github/workflows/flutter-nightly.yml @@ -47,8 +47,8 @@ jobs: run: | flutter doctor -v flutter precache --windows - Invoke-WebRequest -Uri https://github.com/Kingtous/engine/releases/download/v3.0.5-rustdesk/windows-x64-release-flutter.zip -OutFile windows-x64-release-flutter.zip - Expand-Archive windows-x64-release-flutter.zip -DestinationPath engine + Invoke-WebRequest -Uri https://github.com/Kingtous/engine/releases/download/v3.0.5-rustdesk.2/windows-x64-flutter-release.zip -OutFile windows-x64-flutter-release.zip + Expand-Archive windows-x64-flutter-release.zip -DestinationPath engine mv -Force engine/* C:/hostedtoolcache/windows/flutter/stable-3.0.5-x64/bin/cache/artifacts/engine/windows-x64-release/ - name: Install Rust toolchain diff --git a/Cargo.lock b/Cargo.lock index 07d95ac50..f40582eb7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -76,7 +76,7 @@ dependencies = [ "alsa-sys", "bitflags", "libc", - "nix 0.23.1", + "nix 0.23.2", ] [[package]] @@ -175,11 +175,11 @@ dependencies = [ [[package]] name = "async-channel" -version = "1.7.1" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14485364214912d3b19cc3435dde4df66065127f05fa0d75c712f36f12c2f28" +checksum = "cf46fee83e5ccffc220104713af3292ff9bc7c64c7de289f66dae8e38d826833" dependencies = [ - "concurrent-queue 1.2.4", + "concurrent-queue", "event-listener", "futures-core", ] @@ -192,7 +192,7 @@ checksum = "17adb73da160dfb475c183343c8cccd80721ea5a605d3eb57125f0a7b7a92d0b" dependencies = [ "async-lock", "async-task", - "concurrent-queue 2.0.0", + "concurrent-queue", "fastrand", "futures-lite", "slab", @@ -200,13 +200,13 @@ dependencies = [ [[package]] name = "async-io" -version = "1.10.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8121296a9f05be7f34aa4196b1747243b3b62e048bb7906f644f3fbfc490cf7" +checksum = "8c374dda1ed3e7d8f0d9ba58715f924862c63eae6849c92d3a18e7fbde9e2794" dependencies = [ "async-lock", "autocfg 1.1.0", - "concurrent-queue 1.2.4", + "concurrent-queue", "futures-lite", "libc", "log", @@ -215,7 +215,7 @@ dependencies = [ "slab", "socket2 0.4.7", "waker-fn", - "winapi 0.3.9", + "windows-sys 0.42.0", ] [[package]] @@ -230,20 +230,20 @@ dependencies = [ [[package]] name = "async-process" -version = "1.5.0" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02111fd8655a613c25069ea89fc8d9bb89331fa77486eb3bc059ee757cfa481c" +checksum = "6381ead98388605d0d9ff86371043b5aa922a3905824244de40dc263a14fcba4" dependencies = [ "async-io", + "async-lock", "autocfg 1.1.0", "blocking", "cfg-if 1.0.0", "event-listener", "futures-lite", "libc", - "once_cell", "signal-hook", - "winapi 0.3.9", + "windows-sys 0.42.0", ] [[package]] @@ -265,9 +265,9 @@ checksum = "7a40729d2133846d9ed0ea60a8b9541bccddab49cd30f0715a1da672fe9a2524" [[package]] name = "async-trait" -version = "0.1.58" +version = "0.1.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e805d94e6b5001b651426cf4cd446b1ab5f319d27bab5c644f61de0a804360c" +checksum = "31e6e93155431f3931513b243d371981bb2770112b370c82745a1d19d2f99364" dependencies = [ "proc-macro2", "quote", @@ -438,16 +438,16 @@ dependencies = [ [[package]] name = "blocking" -version = "1.2.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6ccb65d468978a086b69884437ded69a90faab3bbe6e67f242173ea728acccc" +checksum = "3c67b173a56acffd6d2326fb7ab938ba0b00a71480e14902b2591c87bc5741e8" dependencies = [ "async-channel", + "async-lock", "async-task", "atomic-waker", "fastrand", "futures-lite", - "once_cell", ] [[package]] @@ -495,15 +495,9 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dfb24e866b15a1af2a1b663f10c6b6b8f397a84aadb828f12e5b289ec23a3a3c" dependencies = [ - "serde 1.0.147", + "serde 1.0.149", ] -[[package]] -name = "cache-padded" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1db59621ec70f09c5e9b597b220c7a2b43611f4710dc03ceb8748637775692c" - [[package]] name = "cairo-rs" version = "0.15.12" @@ -544,7 +538,7 @@ version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "88ad0e1e3e88dd237a156ab9f571021b8a158caa0ae44b1968a241efb5144c1e" dependencies = [ - "serde 1.0.147", + "serde 1.0.149", ] [[package]] @@ -553,7 +547,7 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cbdb825da8a5df079a43676dbe042702f1707b1109f713a01420fbb4cc71fa27" dependencies = [ - "serde 1.0.147", + "serde 1.0.149", ] [[package]] @@ -565,7 +559,7 @@ dependencies = [ "camino", "cargo-platform", "semver 1.0.14", - "serde 1.0.147", + "serde 1.0.149", "serde_json 1.0.89", ] @@ -581,7 +575,7 @@ dependencies = [ "log", "proc-macro2", "quote", - "serde 1.0.147", + "serde 1.0.149", "serde_json 1.0.89", "syn", "tempfile", @@ -643,7 +637,7 @@ dependencies = [ "js-sys", "num-integer", "num-traits 0.2.15", - "time 0.1.44", + "time 0.1.45", "wasm-bindgen", "winapi 0.3.9", ] @@ -733,7 +727,7 @@ dependencies = [ "cc", "hbb_common", "lazy_static", - "serde 1.0.147", + "serde 1.0.149", "serde_derive", "thiserror", ] @@ -824,15 +818,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "concurrent-queue" -version = "1.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af4780a44ab5696ea9e28294517f1fffb421a83a25af521333c838635509db9c" -dependencies = [ - "cache-padded", -] - [[package]] name = "concurrent-queue" version = "2.0.0" @@ -848,7 +833,7 @@ version = "0.4.0" source = "git+https://github.com/open-trade/confy#630cc28a396cb7d01eefdd9f3824486fe4d8554b" dependencies = [ "directories-next", - "serde 1.0.147", + "serde 1.0.149", "thiserror", "toml", ] @@ -976,7 +961,7 @@ dependencies = [ "mach", "ndk 0.6.0", "ndk-glue 0.6.2", - "nix 0.23.1", + "nix 0.23.2", "oboe", "parking_lot 0.11.2", "stdweb", @@ -1068,12 +1053,12 @@ dependencies = [ [[package]] name = "ctrlc" -version = "3.2.3" +version = "3.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d91974fbbe88ec1df0c24a4f00f99583667a7e2e6272b2b92d294d81e462173" +checksum = "1631ca6e3c59112501a9d87fd86f21591ff77acd31331e8a73f8d80a65bbdd71" dependencies = [ - "nix 0.25.0", - "winapi 0.3.9", + "nix 0.26.1", + "windows-sys 0.42.0", ] [[package]] @@ -1084,9 +1069,9 @@ checksum = "b365fabc795046672053e29c954733ec3b05e4be654ab130fe8f1f94d7051f35" [[package]] name = "cxx" -version = "1.0.82" +version = "1.0.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4a41a86530d0fe7f5d9ea779916b7cadd2d4f9add748b99c2c029cbbdfaf453" +checksum = "bdf07d07d6531bfcdbe9b8b739b104610c6508dcc4d63b410585faf338241daf" dependencies = [ "cc", "cxxbridge-flags", @@ -1096,9 +1081,9 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.82" +version = "1.0.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06416d667ff3e3ad2df1cd8cd8afae5da26cf9cec4d0825040f88b5ca659a2f0" +checksum = "d2eb5b96ecdc99f72657332953d4d9c50135af1bac34277801cc3937906ebd39" dependencies = [ "cc", "codespan-reporting", @@ -1111,15 +1096,15 @@ dependencies = [ [[package]] name = "cxxbridge-flags" -version = "1.0.82" +version = "1.0.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "820a9a2af1669deeef27cb271f476ffd196a2c4b6731336011e0ba63e2c7cf71" +checksum = "ac040a39517fd1674e0f32177648334b0f4074625b5588a64519804ba0553b12" [[package]] name = "cxxbridge-macro" -version = "1.0.82" +version = "1.0.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a08a6e2fcc370a089ad3b4aaf54db3b1b4cee38ddabce5896b33eb693275f470" +checksum = "1362b0ddcfc4eb0a1f57b68bd77dd99f0e826958a96abd0ae9bd092e114ffed6" dependencies = [ "proc-macro2", "quote", @@ -1458,7 +1443,7 @@ checksum = "7f3f119846c823f9eafcf953a8f6ffb6ed69bf6240883261a7f13b634579a51f" dependencies = [ "lazy_static", "regex", - "serde 1.0.147", + "serde 1.0.149", "strsim 0.10.0", ] @@ -1481,7 +1466,7 @@ dependencies = [ "cc", "hbb_common", "lazy_static", - "serde 1.0.147", + "serde 1.0.149", "serde_derive", "thiserror", ] @@ -1503,9 +1488,9 @@ checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" [[package]] name = "embed-resource" -version = "1.7.2" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc24ff8d764818e9ab17963b0593c535f077a513f565e75e4352d758bc4d8c0" +checksum = "e62abb876c07e4754fae5c14cafa77937841f01740637e17d78dc04352f32a5e" dependencies = [ "cc", "rustc_version 0.4.0", @@ -1534,7 +1519,7 @@ dependencies = [ "objc", "pkg-config", "rdev", - "serde 1.0.147", + "serde 1.0.149", "serde_derive", "tfc", "unicode-segmentation", @@ -1580,7 +1565,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e75d4cd21b95383444831539909fbb14b9dc3fdceb2a6f5d36577329a1f55ccb" dependencies = [ "enumflags2_derive", - "serde 1.0.147", + "serde 1.0.149", ] [[package]] @@ -1679,7 +1664,7 @@ source = "git+https://github.com/fufesou/evdev#cec616e37790293d2cd2aa54a96601ed6 dependencies = [ "bitvec", "libc", - "nix 0.23.1", + "nix 0.23.2", ] [[package]] @@ -1718,9 +1703,9 @@ dependencies = [ [[package]] name = "filetime" -version = "0.2.18" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b9663d381d07ae25dc88dbdf27df458faa83a9b25336bcac83d5e452b5fc9d3" +checksum = "4e884668cd0c7480504233e951174ddc3b382f7c2666e3b7310b5c4e7b0c37f9" dependencies = [ "cfg-if 1.0.0", "libc", @@ -1730,12 +1715,12 @@ dependencies = [ [[package]] name = "flate2" -version = "1.0.24" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f82b0f4c27ad9f8bfd1f3208d882da2b09c301bc1c828fd3a00d0216d2fbbff6" +checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841" dependencies = [ "crc32fast", - "miniz_oxide 0.5.4", + "miniz_oxide 0.6.2", ] [[package]] @@ -1787,7 +1772,7 @@ dependencies = [ "pathdiff", "quote", "regex", - "serde 1.0.147", + "serde 1.0.149", "serde_yaml", "structopt", "syn", @@ -2007,7 +1992,7 @@ version = "0.15.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "140b2f5378256527150350a8346dbdb08fadc13453a7a2d73aecd5fab3c402a7" dependencies = [ - "gio-sys", + "gio-sys 0.15.10", "glib-sys 0.15.10", "gobject-sys 0.15.10", "libc", @@ -2022,7 +2007,7 @@ checksum = "32e7a08c1e8f06f4177fb7e51a777b8c1689f743a7bc11ea91d44d2226073a88" dependencies = [ "cairo-sys-rs", "gdk-pixbuf-sys", - "gio-sys", + "gio-sys 0.15.10", "glib-sys 0.15.10", "gobject-sys 0.15.10", "libc", @@ -2078,7 +2063,7 @@ dependencies = [ "futures-channel", "futures-core", "futures-io", - "gio-sys", + "gio-sys 0.15.10", "glib 0.15.12", "libc", "once_cell", @@ -2098,6 +2083,19 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "gio-sys" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9b693b8e39d042a95547fc258a7b07349b1f0b48f4b2fa3108ba3c51c0b5229" +dependencies = [ + "glib-sys 0.16.3", + "gobject-sys 0.16.3", + "libc", + "system-deps 6.0.3", + "winapi 0.3.9", +] + [[package]] name = "glib" version = "0.10.3" @@ -2137,6 +2135,28 @@ dependencies = [ "thiserror", ] +[[package]] +name = "glib" +version = "0.16.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cd04d150a2c63e6779f43aec7e04f5374252479b7bed5f45146d9c0e821f161" +dependencies = [ + "bitflags", + "futures-channel", + "futures-core", + "futures-executor", + "futures-task", + "futures-util", + "gio-sys 0.16.3", + "glib-macros 0.16.3", + "glib-sys 0.16.3", + "gobject-sys 0.16.3", + "libc", + "once_cell", + "smallvec", + "thiserror", +] + [[package]] name = "glib-macros" version = "0.10.1" @@ -2168,6 +2188,21 @@ dependencies = [ "syn", ] +[[package]] +name = "glib-macros" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e084807350b01348b6d9dbabb724d1a0bb987f47a2c85de200e98e12e30733bf" +dependencies = [ + "anyhow", + "heck 0.4.0", + "proc-macro-crate 1.2.1", + "proc-macro-error", + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "glib-sys" version = "0.10.1" @@ -2188,6 +2223,16 @@ dependencies = [ "system-deps 6.0.3", ] +[[package]] +name = "glib-sys" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61a4f46316d06bfa33a7ac22df6f0524c8be58e3db2d9ca99ccb1f357b62a65" +dependencies = [ + "libc", + "system-deps 6.0.3", +] + [[package]] name = "glob" version = "0.3.0" @@ -2216,6 +2261,17 @@ dependencies = [ "system-deps 6.0.3", ] +[[package]] +name = "gobject-sys" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3520bb9c07ae2a12c7f2fbb24d4efc11231c8146a86956413fb1a79bb760a0f1" +dependencies = [ + "glib-sys 0.16.3", + "libc", + "system-deps 6.0.3", +] + [[package]] name = "gstreamer" version = "0.16.7" @@ -2382,7 +2438,7 @@ dependencies = [ "cairo-sys-rs", "gdk-pixbuf-sys", "gdk-sys", - "gio-sys", + "gio-sys 0.15.10", "glib-sys 0.15.10", "gobject-sys 0.15.10", "libc", @@ -2455,7 +2511,7 @@ dependencies = [ "quinn", "rand 0.8.5", "regex", - "serde 1.0.147", + "serde 1.0.149", "serde_derive", "serde_json 1.0.89", "socket2 0.3.19", @@ -2547,12 +2603,12 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hwcodec" version = "0.1.0" -source = "git+https://github.com/21pages/hwcodec#f54d69b35251ade110373403ddefcb8b49c87305" +source = "git+https://github.com/21pages/hwcodec#e819484c4c010199f2a0977bdf306b4edbeafbae" dependencies = [ "bindgen 0.59.2", "cc", "log", - "serde 1.0.147", + "serde 1.0.149", "serde_derive", "serde_json 1.0.89", ] @@ -2583,9 +2639,9 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.23.1" +version = "0.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59df7c4e19c950e6e0e868dcc0a300b09a9b88e9ec55bd879ca819087a77355d" +checksum = "1788965e61b367cd03a62950836d5cd41560c3577d90e40e0819373194d1661c" dependencies = [ "http", "hyper", @@ -2730,9 +2786,9 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.5.1" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f88c5561171189e69df9d98bcf18fd5f9558300f7ea7b801eb8a0fd748bd8745" +checksum = "ec947b7a4ce12e3b87e353abae7ce124d025b6c7d6c5aea5cc0bcf92e9510ded" [[package]] name = "itertools" @@ -2847,9 +2903,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.137" +version = "0.2.138" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc7fcc620a3bff7cdd7a365be3376c97191aeaccc2a603e600951e452615bf89" +checksum = "db6d7e329c562c5dfab7a46a2afabc8b987ab9a4834c9d1ca04dc54c1546cef8" [[package]] name = "libdbus-sys" @@ -2979,7 +3035,7 @@ version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b238e3235c8382b7653c6408ed1b08dd379bdb9fdf990fb0bbae3db2cc0ae963" dependencies = [ - "nix 0.23.1", + "nix 0.23.2", "winapi 0.3.9", ] @@ -3004,7 +3060,7 @@ dependencies = [ [[package]] name = "magnum-opus" version = "0.4.0" -source = "git+https://github.com/SoLongAndThanksForAllThePizza/magnum-opus#6247071a64af7b18e2d553e235729e6865f63ece" +source = "git+https://github.com/rustdesk/magnum-opus#79be072c939168e907fe851690759dcfd6a326af" dependencies = [ "bindgen 0.59.2", "target_build_utils", @@ -3104,6 +3160,15 @@ dependencies = [ "adler", ] +[[package]] +name = "miniz_oxide" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa" +dependencies = [ + "adler", +] + [[package]] name = "mio" version = "0.6.23" @@ -3180,7 +3245,7 @@ dependencies = [ [[package]] name = "mouce" version = "0.2.1" -source = "git+https://github.com/fufesou/mouce.git#aa18ba25bb47484282e972a4b95a8e1d753230b5" +source = "git+https://github.com/fufesou/mouce.git#ed83800d532b95d70e39915314f6052aa433e9b9" dependencies = [ "glob", ] @@ -3330,9 +3395,9 @@ dependencies = [ [[package]] name = "nix" -version = "0.23.1" +version = "0.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f866317acbd3a240710c63f065ffb1e4fd466259045ccb504130b7f668f35c6" +checksum = "8f3790c00a0150112de0f4cd161e3d7fc4b2d8a5542ffc35f099a2562aecb35c" dependencies = [ "bitflags", "cc", @@ -3343,9 +3408,9 @@ dependencies = [ [[package]] name = "nix" -version = "0.24.2" +version = "0.24.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "195cdbc1741b8134346d515b3a56a1c94b0912758009cfd53f99ea0f57b065fc" +checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069" dependencies = [ "bitflags", "cfg-if 1.0.0", @@ -3355,9 +3420,9 @@ dependencies = [ [[package]] name = "nix" -version = "0.25.0" +version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e322c04a9e3440c327fca7b6c8a63e6890a32fa2ad689db972425f07e0d22abb" +checksum = "f346ff70e7dbfd675fe90590b92d59ef2de15a8779ae305ebcbfd3f0caf59be4" dependencies = [ "autocfg 1.1.0", "bitflags", @@ -3367,6 +3432,18 @@ dependencies = [ "pin-utils", ] +[[package]] +name = "nix" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46a58d1d356c6597d08cde02c2f09d785b09e28711837b1ed667dc652c08a694" +dependencies = [ + "bitflags", + "cfg-if 1.0.0", + "libc", + "static_assertions", +] + [[package]] name = "nom" version = "7.1.1" @@ -3592,9 +3669,9 @@ dependencies = [ [[package]] name = "ordered-stream" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "034ce384018b245e8d8424bbe90577fbd91a533be74107e465e3474eb2285eef" +checksum = "01ca8c99d73c6e92ac1358f9f692c22c0bfd9c4701fa086f5d365c0d4ea818ea" dependencies = [ "futures-core", "pin-project-lite", @@ -3676,7 +3753,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" dependencies = [ "lock_api", - "parking_lot_core 0.9.4", + "parking_lot_core 0.9.5", ] [[package]] @@ -3695,9 +3772,9 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dc9e0dc2adc1c69d09143aff38d3d30c5c3f0df0dad82e6d25547af174ebec0" +checksum = "7ff9f3fef3968a3ec5945535ed654cb38ff72d7495a25619e2247fb15a2ed9ba" dependencies = [ "cfg-if 1.0.0", "libc", @@ -3732,9 +3809,9 @@ checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" [[package]] name = "pest" -version = "2.4.1" +version = "2.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a528564cc62c19a7acac4d81e01f39e53e25e17b934878f4c6d25cc2836e62f8" +checksum = "cc8bed3549e0f9b0a2a78bf7c0018237a2cdf085eecbbc048e52612438e4e9d0" dependencies = [ "thiserror", "ucd-trie", @@ -3830,16 +3907,16 @@ dependencies = [ [[package]] name = "polling" -version = "2.4.0" +version = "2.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab4609a838d88b73d8238967b60dd115cc08d38e2bbaf51ee1e4b695f89122e2" +checksum = "166ca89eb77fd403230b9c156612965a81e094ec6ec3aa13663d4c8b113fa748" dependencies = [ "autocfg 1.1.0", "cfg-if 1.0.0", "libc", "log", "wepoll-ffi", - "winapi 0.3.9", + "windows-sys 0.42.0", ] [[package]] @@ -4205,11 +4282,10 @@ dependencies = [ [[package]] name = "rayon" -version = "1.6.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e060280438193c554f654141c9ea9417886713b7acd75974c85b18a69a88e0b" +checksum = "6db3a213adf02b3bcfd2d3846bb41cb22857d131789e01df434fb7e7bc0759b7" dependencies = [ - "crossbeam-deque", "either", "rayon-core", ] @@ -4245,7 +4321,7 @@ dependencies = [ "strum_macros 0.24.3", "widestring 1.0.2", "winapi 0.3.9", - "x11 2.20.0", + "x11 2.20.1", ] [[package]] @@ -4259,9 +4335,9 @@ dependencies = [ [[package]] name = "realfft" -version = "3.1.0" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3052e66d6ebeff8049607775c41d39a58d1dfa91a2733e89f2b7816bce2ea4cc" +checksum = "93d6b8e8f0c6d2234aa58048d7290c60bf92cd36fd2888cd8331c66ad4f2e1d2" dependencies = [ "rustfft", ] @@ -4347,7 +4423,7 @@ dependencies = [ "pin-project-lite", "rustls", "rustls-pemfile 1.0.1", - "serde 1.0.147", + "serde 1.0.149", "serde_json 1.0.89", "serde_urlencoded", "tokio", @@ -4389,9 +4465,20 @@ dependencies = [ [[package]] name = "rpassword" -version = "7.1.0" +version = "7.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20c9f5d2a0c3e2ea729ab3706d22217177770654c3ef5056b68b69d07332d3f5" +checksum = "6678cf63ab3491898c0d021b493c94c9b221d91295294a2a5746eacbe5928322" +dependencies = [ + "libc", + "rtoolbox", + "winapi 0.3.9", +] + +[[package]] +name = "rtoolbox" +version = "0.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "034e22c514f5c0cb8a10ff341b9b048b5ceb21591f31c8f44c43b960f9b3524a" dependencies = [ "libc", "winapi 0.3.9", @@ -4500,6 +4587,7 @@ dependencies = [ "flexi_logger", "flutter_rust_bridge", "flutter_rust_bridge_codegen", + "glib 0.16.5", "gtk", "hbb_common", "hound", @@ -4521,14 +4609,14 @@ dependencies = [ "rdev", "repng", "reqwest", - "rpassword 7.1.0", + "rpassword 7.2.0", "rubato", "runas", "rust-pulsectl", "samplerate", "sciter-rs", "scrap", - "serde 1.0.147", + "serde 1.0.149", "serde_derive", "serde_json 1.0.89", "sha2", @@ -4705,7 +4793,7 @@ dependencies = [ "num_cpus", "quest", "repng", - "serde 1.0.147", + "serde 1.0.149", "serde_json 1.0.89", "target_build_utils", "tracing", @@ -4767,7 +4855,7 @@ version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e25dfac463d778e353db5be2449d1cce89bd6fd23c9f1ea21310ce6e5a1b29c4" dependencies = [ - "serde 1.0.147", + "serde 1.0.149", ] [[package]] @@ -4787,18 +4875,18 @@ checksum = "34b623917345a631dc9608d5194cc206b3fe6c3554cd1c75b937e55e285254af" [[package]] name = "serde" -version = "1.0.147" +version = "1.0.149" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d193d69bae983fc11a79df82342761dfbf28a99fc8d203dca4c3c1b590948965" +checksum = "256b9932320c590e707b94576e3cc1f7c9024d0ee6612dfbcf1cb106cbe8e055" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.147" +version = "1.0.149" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f1d362ca8fc9c3e3a7484440752472d68a6caa98f1ab81d99b5dfe517cec852" +checksum = "b4eae9b04cbffdfd550eb462ed33bc6a1b68c935127d008b27444d08380f94e4" dependencies = [ "proc-macro2", "quote", @@ -4825,7 +4913,7 @@ checksum = "020ff22c755c2ed3f8cf162dbb41a7268d934702f3ed3631656ea597e08fc3db" dependencies = [ "itoa 1.0.4", "ryu", - "serde 1.0.147", + "serde 1.0.149", ] [[package]] @@ -4848,7 +4936,7 @@ dependencies = [ "form_urlencoded", "itoa 1.0.4", "ryu", - "serde 1.0.147", + "serde 1.0.149", ] [[package]] @@ -4859,7 +4947,7 @@ checksum = "578a7433b776b56a35785ed5ce9a7e777ac0598aac5a6dd1b4b18a307c7fc71b" dependencies = [ "indexmap", "ryu", - "serde 1.0.147", + "serde 1.0.149", "yaml-rust", ] @@ -4893,7 +4981,7 @@ checksum = "ba8593196da75d9dc4f69349682bd4c2099f8cde114257d1ef7ef1b33d1aba54" dependencies = [ "cfg-if 1.0.0", "libc", - "nix 0.23.1", + "nix 0.23.2", "rand 0.8.5", "win-sys", ] @@ -4941,7 +5029,7 @@ version = "0.1.0" dependencies = [ "confy", "hbb_common", - "serde 1.0.147", + "serde 1.0.149", "serde_derive", "walkdir", ] @@ -5016,7 +5104,7 @@ dependencies = [ "ed25519", "libc", "libsodium-sys", - "serde 1.0.147", + "serde 1.0.149", ] [[package]] @@ -5124,9 +5212,9 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.103" +version = "1.0.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a864042229133ada95abf3b54fdc62ef5ccabe9515b64717bcb9a1919e59445d" +checksum = "60b9b43d45702de4c839cb9b51d9f529c5dd26a4aff255b42b1ebc03e88ee908" dependencies = [ "proc-macro2", "quote", @@ -5348,9 +5436,9 @@ dependencies = [ [[package]] name = "time" -version = "0.1.44" +version = "0.1.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" +checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a" dependencies = [ "libc", "wasi 0.10.0+wasi-snapshot-preview1", @@ -5392,9 +5480,9 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" [[package]] name = "tokio" -version = "1.22.0" +version = "1.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d76ce4a75fb488c605c54bf610f221cea8b0dafb53333c1a67e8ee199dcd2ae3" +checksum = "eab6d665857cc6ca78d6e80303a02cea7a7851e85dfbd77cbdc09bd129f1ef46" dependencies = [ "autocfg 1.1.0", "bytes", @@ -5407,14 +5495,14 @@ dependencies = [ "signal-hook-registry", "socket2 0.4.7", "tokio-macros", - "winapi 0.3.9", + "windows-sys 0.42.0", ] [[package]] name = "tokio-macros" -version = "1.8.0" +version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9724f9a975fb987ef7a3cd9be0350edcbe130698af5b8f7a631e23d42d052484" +checksum = "d266c00fde287f55d3f1c3e96c500c362a2b8c695076ec180f27918820bc6df8" dependencies = [ "proc-macro2", "quote", @@ -5472,7 +5560,7 @@ version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7" dependencies = [ - "serde 1.0.147", + "serde 1.0.149", ] [[package]] @@ -5558,9 +5646,9 @@ checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" [[package]] name = "typenum" -version = "1.15.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" +checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" [[package]] name = "ucd-trie" @@ -5632,7 +5720,7 @@ dependencies = [ "form_urlencoded", "idna", "percent-encoding", - "serde 1.0.147", + "serde 1.0.149", ] [[package]] @@ -5689,9 +5777,9 @@ dependencies = [ [[package]] name = "vswhom-sys" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22025f6d8eb903ebf920ea6933b70b1e495be37e2cb4099e62c80454aaf57c39" +checksum = "d3b17ae1f6c8a2b28506cd96d412eebf83b4a0ff2cbefeeb952f2f9dfa44ba18" dependencies = [ "cc", "libc", @@ -5811,7 +5899,7 @@ dependencies = [ "bitflags", "downcast-rs", "libc", - "nix 0.24.2", + "nix 0.24.3", "scoped-tls", "wayland-commons", "wayland-scanner", @@ -5824,7 +5912,7 @@ version = "0.29.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8691f134d584a33a6606d9d717b95c4fa20065605f798a3f350d78dced02a902" dependencies = [ - "nix 0.24.2", + "nix 0.24.3", "once_cell", "smallvec", "wayland-sys", @@ -5836,7 +5924,7 @@ version = "0.29.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6865c6b66f13d6257bef1cd40cbfe8ef2f150fb8ebbdb1e8e873455931377661" dependencies = [ - "nix 0.24.2", + "nix 0.24.3", "wayland-client", "xcursor", ] @@ -5915,9 +6003,9 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.22.5" +version = "0.22.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "368bfe657969fb01238bb756d351dcade285e0f6fcbd36dcb23359a5169975be" +checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87" dependencies = [ "webpki", ] @@ -6382,9 +6470,9 @@ dependencies = [ [[package]] name = "x11" -version = "2.20.0" +version = "2.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7ae97874a928d821b061fce3d1fc52f08071dd53c89a6102bc06efcac3b2908" +checksum = "c2638d5b9c17ac40575fb54bb461a4b1d2a8d1b4ffcc4ff237d254ec59ddeb82" dependencies = [ "libc", "pkg-config", @@ -6392,9 +6480,9 @@ dependencies = [ [[package]] name = "x11-dl" -version = "2.20.0" +version = "2.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c83627bc137605acc00bb399c7b908ef460b621fc37c953db2b09f88c449ea6" +checksum = "b1536d6965a5d4e573c7ef73a2c15ebcd0b2de3347bdf526c34c297c00ac40f0" dependencies = [ "lazy_static", "libc", @@ -6439,9 +6527,9 @@ dependencies = [ [[package]] name = "zbus" -version = "3.5.0" +version = "3.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a25ae891bd547674b368906552115143031c16c23a0f2f4b2f5f5436ab2e6a9f" +checksum = "938ea6da98c75c2c37a86007bd17fd8e208cbec24e086108c87ece98e9edec0d" dependencies = [ "async-broadcast", "async-channel", @@ -6460,11 +6548,11 @@ dependencies = [ "futures-sink", "futures-util", "hex", - "nix 0.25.0", + "nix 0.25.1", "once_cell", "ordered-stream", "rand 0.8.5", - "serde 1.0.147", + "serde 1.0.149", "serde_repr", "sha1", "static_assertions", @@ -6478,9 +6566,9 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "3.5.0" +version = "3.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8aa37701ce7b3a43632d2b0ad9d4aef602b46be6bdd7fba3b7c5007f9f6eb2c2" +checksum = "45066039ebf3330820e495e854f8b312abb68f0a39e97972d092bd72e8bb3e8e" dependencies = [ "proc-macro-crate 1.2.1", "proc-macro2", @@ -6491,11 +6579,11 @@ dependencies = [ [[package]] name = "zbus_names" -version = "2.3.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d69bb79b44e1901ed8b217e485d0f01991aec574479b68cb03415f142bc7ae67" +checksum = "6c737644108627748a660d038974160e0cbb62605536091bdfa28fd7f64d43c8" dependencies = [ - "serde 1.0.147", + "serde 1.0.149", "static_assertions", "zvariant", ] @@ -6531,23 +6619,23 @@ dependencies = [ [[package]] name = "zvariant" -version = "3.8.0" +version = "3.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c817f416f05fcbc833902f1e6064b72b1778573978cfeac54731451ccc9e207" +checksum = "56f8c89c183461e11867ded456db252eae90874bc6769b7adbea464caa777e51" dependencies = [ "byteorder", "enumflags2", "libc", - "serde 1.0.147", + "serde 1.0.149", "static_assertions", "zvariant_derive", ] [[package]] name = "zvariant_derive" -version = "3.8.0" +version = "3.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdd24fffd02794a76eb10109de463444064c88f5adb9e9d1a78488adc332bfef" +checksum = "155247a5d1ab55e335421c104ccd95d64f17cebbd02f50cdbc1c33385f9c4d81" dependencies = [ "proc-macro-crate 1.2.1", "proc-macro2", diff --git a/Cargo.toml b/Cargo.toml index cbf384a38..feca1593e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -47,7 +47,7 @@ libc = "0.2" parity-tokio-ipc = { git = "https://github.com/open-trade/parity-tokio-ipc" } flexi_logger = { version = "0.22", features = ["async", "use_chrono_for_offset"] } runas = "0.2" -magnum-opus = { git = "https://github.com/SoLongAndThanksForAllThePizza/magnum-opus" } +magnum-opus = { git = "https://github.com/rustdesk/magnum-opus" } dasp = { version = "0.11", features = ["signal", "interpolate-linear", "interpolate"], optional = true } rubato = { version = "0.12", optional = true } samplerate = { version = "0.2", optional = true } @@ -118,6 +118,7 @@ dbus = "0.9" dbus-crossroads = "0.5" gtk = "0.15" libappindicator = "0.7" +glib = "0.16.5" [target.'cfg(target_os = "android")'.dependencies] android_logger = "0.11" diff --git a/flutter/lib/desktop/pages/remote_page.dart b/flutter/lib/desktop/pages/remote_page.dart index 7b3e0fe82..130a5e6ad 100644 --- a/flutter/lib/desktop/pages/remote_page.dart +++ b/flutter/lib/desktop/pages/remote_page.dart @@ -5,6 +5,8 @@ import 'dart:ui' as ui; import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; +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'; @@ -109,17 +111,17 @@ class _RemotePageState extends State id: widget.id, arg: 'show-remote-cursor'); _zoomCursor.value = bind.sessionGetToggleOptionSync(id: widget.id, arg: 'zoom-cursor'); - if (!_isCustomCursorInited) { - customCursorController.registerNeedUpdateCursorCallback( - (String? lastKey, String? currentKey) async { - if (_firstEnterImage.value) { - _firstEnterImage.value = false; - return true; - } - return lastKey == null || lastKey != currentKey; - }); - _isCustomCursorInited = true; - } + // if (!_isCustomCursorInited) { + // customCursorController.registerNeedUpdateCursorCallback( + // (String? lastKey, String? currentKey) async { + // if (_firstEnterImage.value) { + // _firstEnterImage.value = false; + // return true; + // } + // return lastKey == null || lastKey != currentKey; + // }); + // _isCustomCursorInited = true; + // } } @override @@ -366,15 +368,23 @@ class _ImagePaintState extends State { return MouseCursor.defer; } else { final key = cache.updateGetKey(scale, zoomCursor.value); - cursor.addKey(key); - return FlutterCustomMemoryImageCursor( - pixbuf: cache.data, - key: key, - hotx: cache.hotx, - hoty: cache.hoty, - imageWidth: (cache.width * cache.scale).toInt(), - imageHeight: (cache.height * cache.scale).toInt(), - ); + if (!cursor.cachedKeys.contains(key)) { + debugPrint("Register custom cursor with key $key"); + // [Safety] + // It's ok to call async registerCursor in current synchronous context, + // because activating the cursor is also an async call and will always + // be executed after this. + custom_cursor_manager.CursorManager.instance + .registerCursor(custom_cursor_manager.CursorData() + ..buffer = cache.data! + ..height = (cache.height * cache.scale).toInt() + ..width = (cache.width * cache.scale).toInt() + ..hotX = cache.hotx + ..hotY = cache.hoty + ..name = key); + cursor.addKey(key); + } + return FlutterCustomMemoryImageCursor(key: key); } } diff --git a/flutter/lib/models/model.dart b/flutter/lib/models/model.dart index 805bcde33..37c246fe1 100644 --- a/flutter/lib/models/model.dart +++ b/flutter/lib/models/model.dart @@ -19,7 +19,7 @@ import 'package:flutter_hbb/common/shared_state.dart'; import 'package:flutter_hbb/utils/multi_window_manager.dart'; import 'package:tuple/tuple.dart'; import 'package:image/image.dart' as img2; -import 'package:flutter_custom_cursor/flutter_custom_cursor.dart'; +import 'package:flutter_custom_cursor/cursor_manager.dart'; import 'package:flutter_svg/flutter_svg.dart'; import '../common.dart'; @@ -1113,7 +1113,8 @@ class CursorModel with ChangeNotifier { _clearCache() { final keys = {...cachedKeys}; for (var k in keys) { - customCursorController.freeCache(k); + debugPrint("deleting cursor with key $k"); + CursorManager.instance.deleteCursor(k); } } } diff --git a/flutter/pubspec.lock b/flutter/pubspec.lock index d79ff0595..681334f33 100644 --- a/flutter/pubspec.lock +++ b/flutter/pubspec.lock @@ -7,7 +7,7 @@ packages: name: _fe_analyzer_shared url: "https://pub.dartlang.org" source: hosted - version: "49.0.0" + version: "50.0.0" after_layout: dependency: transitive description: @@ -21,7 +21,7 @@ packages: name: analyzer url: "https://pub.dartlang.org" source: hosted - version: "5.1.0" + version: "5.2.0" animations: dependency: transitive description: @@ -352,7 +352,7 @@ packages: name: file_picker url: "https://pub.dartlang.org" source: hosted - version: "5.2.1" + version: "5.2.3" fixnum: dependency: transitive description: @@ -389,12 +389,10 @@ packages: flutter_custom_cursor: dependency: "direct main" description: - path: "." - ref: "74b1b314142b6775c1243067a3503ac568ebc74b" - resolved-ref: "74b1b314142b6775c1243067a3503ac568ebc74b" - url: "https://github.com/Kingtous/rustdesk_flutter_custom_cursor" - source: git - version: "0.0.1" + name: flutter_custom_cursor + url: "https://pub.dartlang.org" + source: hosted + version: "0.0.2" flutter_improved_scrolling: dependency: "direct main" description: @@ -455,14 +453,14 @@ packages: name: freezed url: "https://pub.dartlang.org" source: hosted - version: "2.1.1" + version: "2.3.2" freezed_annotation: dependency: "direct main" description: name: freezed_annotation url: "https://pub.dartlang.org" source: hosted - version: "2.1.0" + version: "2.2.0" frontend_server_client: dependency: transitive description: @@ -637,7 +635,7 @@ packages: name: mime url: "https://pub.dartlang.org" source: hosted - version: "1.0.2" + version: "1.0.3" nested: dependency: transitive description: @@ -1106,7 +1104,7 @@ packages: name: video_player url: "https://pub.dartlang.org" source: hosted - version: "2.4.7" + version: "2.4.9" video_player_android: dependency: transitive description: diff --git a/flutter/pubspec.yaml b/flutter/pubspec.yaml index a8a3d7050..a87727f7b 100644 --- a/flutter/pubspec.yaml +++ b/flutter/pubspec.yaml @@ -65,10 +65,7 @@ dependencies: url: https://github.com/Kingtous/rustdesk_desktop_multi_window ref: 82f9eab81cb2c7bfb938def7a1b399a6279bbc75 freezed_annotation: ^2.0.3 - flutter_custom_cursor: - git: - url: https://github.com/Kingtous/rustdesk_flutter_custom_cursor - ref: 74b1b314142b6775c1243067a3503ac568ebc74b + flutter_custom_cursor: ^0.0.2 window_size: git: url: https://github.com/google/flutter-desktop-embedding.git diff --git a/libs/hbb_common/src/lib.rs b/libs/hbb_common/src/lib.rs index ae564685f..0f9f7824c 100644 --- a/libs/hbb_common/src/lib.rs +++ b/libs/hbb_common/src/lib.rs @@ -66,6 +66,21 @@ macro_rules! allow_err { } else { } }; + + ($e:expr, $($arg:tt)*) => { + if let Err(err) = $e { + log::debug!( + "{:?}, {}, {}:{}:{}:{}", + err, + format_args!($($arg)*), + module_path!(), + file!(), + line!(), + column!() + ); + } else { + } + }; } #[inline] @@ -250,4 +265,10 @@ mod tests { let addr = SocketAddr::V4(SocketAddrV4::new(Ipv4Addr::new(192, 168, 16, 32), 21116)); assert_eq!(addr, AddrMangle::decode(&AddrMangle::encode(addr))); } + + #[test] + fn test_allow_err() { + allow_err!(Err("test err") as Result<(), &str>); + allow_err!(Err("test err with msg") as Result<(), &str>, "prompt {}", "failed"); + } } diff --git a/libs/scrap/src/common/codec.rs b/libs/scrap/src/common/codec.rs index d729342d6..9535e9f3a 100644 --- a/libs/scrap/src/common/codec.rs +++ b/libs/scrap/src/common/codec.rs @@ -218,7 +218,7 @@ impl Encoder { #[inline] pub fn current_hw_encoder_name() -> Option { #[cfg(feature = "hwcodec")] - if check_hwcodec_config() { + if enable_hwcodec_option() { return HwEncoder::current_name().lock().unwrap().clone(); } else { return None; @@ -229,7 +229,7 @@ impl Encoder { pub fn supported_encoding() -> (bool, bool) { #[cfg(feature = "hwcodec")] - if check_hwcodec_config() { + if enable_hwcodec_option() { let best = HwEncoder::best(); ( best.h264.as_ref().map_or(false, |c| c.score > 0), @@ -246,7 +246,7 @@ impl Encoder { impl Decoder { pub fn video_codec_state(_id: &str) -> VideoCodecState { #[cfg(feature = "hwcodec")] - if check_hwcodec_config() { + if enable_hwcodec_option() { let best = HwDecoder::best(); return VideoCodecState { score_vpx: SCORE_VPX, @@ -257,7 +257,7 @@ impl Decoder { }; } #[cfg(feature = "mediacodec")] - if check_hwcodec_config() { + if enable_hwcodec_option() { let score_h264 = if H264_DECODER_SUPPORT.load(std::sync::atomic::Ordering::SeqCst) { 92 } else { @@ -287,11 +287,19 @@ impl Decoder { Decoder { vpx, #[cfg(feature = "hwcodec")] - hw: HwDecoder::new_decoders(), + hw: if enable_hwcodec_option() { + HwDecoder::new_decoders() + } else { + HwDecoders::default() + }, #[cfg(feature = "hwcodec")] i420: vec![], #[cfg(feature = "mediacodec")] - media_codec: MediaCodecDecoder::new_decoders(), + media_codec: if enable_hwcodec_option() { + MediaCodecDecoder::new_decoders() + } else { + MediaCodecDecoders::default() + }, } } @@ -415,7 +423,7 @@ impl Decoder { } #[cfg(any(feature = "hwcodec", feature = "mediacodec"))] -fn check_hwcodec_config() -> bool { +fn enable_hwcodec_option() -> bool { if let Some(v) = Config2::get().options.get("enable-hwcodec") { return v != "N"; } diff --git a/libs/scrap/src/common/hwcodec.rs b/libs/scrap/src/common/hwcodec.rs index 166f7516c..c77da3f8f 100644 --- a/libs/scrap/src/common/hwcodec.rs +++ b/libs/scrap/src/common/hwcodec.rs @@ -94,7 +94,7 @@ impl EncoderApi for HwEncoder { frames.push(EncodedVideoFrame { data: Bytes::from(frame.data), pts: frame.pts as _, - key:frame.key == 1, + key: frame.key == 1, ..Default::default() }); } @@ -175,6 +175,7 @@ pub struct HwDecoder { pub info: CodecInfo, } +#[derive(Default)] pub struct HwDecoders { pub h264: Option, pub h265: Option, diff --git a/libs/scrap/src/common/mediacodec.rs b/libs/scrap/src/common/mediacodec.rs index fa821246c..406baecb5 100644 --- a/libs/scrap/src/common/mediacodec.rs +++ b/libs/scrap/src/common/mediacodec.rs @@ -37,6 +37,7 @@ impl Deref for MediaCodecDecoder { } } +#[derive(Default)] pub struct MediaCodecDecoders { pub h264: Option, pub h265: Option, diff --git a/src/core_main.rs b/src/core_main.rs index 342f438ee..eb8721563 100644 --- a/src/core_main.rs +++ b/src/core_main.rs @@ -173,7 +173,7 @@ pub fn core_main() -> Option> { crate::start_os_service(); return None; } else if args[0] == "--server" { - log::info!("start --server"); + log::info!("start --server with user {}", crate::username()); #[cfg(target_os = "windows")] { crate::start_server(true); diff --git a/src/lang/de.rs b/src/lang/de.rs index 223237def..6bd2a9bbe 100644 --- a/src/lang/de.rs +++ b/src/lang/de.rs @@ -56,7 +56,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Too frequent", "Zu häufig"), ("Cancel", "Abbrechen"), ("Skip", "Überspringen"), - ("Close", "Sitzung beenden"), + ("Close", "Schließen"), ("Retry", "Erneut versuchen"), ("OK", "OK"), ("Password Required", "Passwort erforderlich"), @@ -358,7 +358,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Unpin menubar", "Menüleiste lösen"), ("Recording", "Aufnahme"), ("Directory", "Verzeichnis"), - ("Automatically record incoming sessions", "Automatische Aufzeichnung eingehender Sitzungen"), + ("Automatically record incoming sessions", "Eingehende Sitzungen automatisch aufzeichnen"), ("Change", "Ändern"), ("Start session recording", "Sitzungsaufzeichnung starten"), ("Stop session recording", "Sitzungsaufzeichnung beenden"), @@ -398,7 +398,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Hide connection management window", "Fenster zur Verwaltung der Verbindung verstecken"), ("hide_cm_tip", "Dies ist nur möglich, wenn der Zugriff nur über ein permanentes Passwort erfolgt."), // Sehr unklar. Muss noch angepasst werden. Original: Allow hiding only if accepting sessions via password and using pernament passw"), ("wayland_experiment_tip", ""), - ("Right click to select tabs", ""), - ("Add to Address Book", ""), + ("Right click to select tabs", "Register mit rechtem Mausklick auswählen"), + ("Add to Address Book", "Zum Adressbuch hinzufügen"), ].iter().cloned().collect(); } diff --git a/src/lang/es.rs b/src/lang/es.rs index 17c3ddf07..8690f8b3f 100644 --- a/src/lang/es.rs +++ b/src/lang/es.rs @@ -17,7 +17,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Transfer File", "Transferir archivo"), ("Connect", "Conectar"), ("Recent Sessions", "Sesiones recientes"), - ("Address Book", "Directorio"), + ("Address Book", "Libreta de direcciones"), ("Confirmation", "Confirmación"), ("TCP Tunneling", "Túnel TCP"), ("Remove", "Quitar"), diff --git a/src/platform/linux.rs b/src/platform/linux.rs index 664fb9c7e..ab436ed30 100644 --- a/src/platform/linux.rs +++ b/src/platform/linux.rs @@ -179,7 +179,8 @@ fn set_x11_env(uid: &str) { log::info!("uid of seat0: {}", uid); let gdm = format!("/run/user/{}/gdm/Xauthority", uid); let mut auth = get_env_tries("XAUTHORITY", uid, 10); - if auth.is_empty() { + // auth is another user's when uid = 0, https://github.com/rustdesk/rustdesk/issues/2468 + if auth.is_empty() || uid == "0" { auth = if std::path::Path::new(&gdm).exists() { gdm } else { diff --git a/src/platform/windows.rs b/src/platform/windows.rs index 075f7ed08..a2a99800f 100644 --- a/src/platform/windows.rs +++ b/src/platform/windows.rs @@ -439,6 +439,7 @@ extern "C" { fn win32_disable_lowlevel_keyboard(hwnd: HWND); fn win_stop_system_key_propagate(v: BOOL); fn is_win_down() -> BOOL; + fn is_local_system() -> BOOL; } extern "system" { @@ -718,10 +719,10 @@ pub fn set_share_rdp(enable: bool) { } pub fn get_active_username() -> String { - let name = crate::username(); - if name != "SYSTEM" { - return name; + if !is_root() { + return crate::username(); } + extern "C" { fn get_active_user(path: *mut u16, n: u32, rdp: BOOL) -> u32; } @@ -757,7 +758,8 @@ pub fn is_prelogin() -> bool { } pub fn is_root() -> bool { - crate::username() == "SYSTEM" + // https://stackoverflow.com/questions/4023586/correct-way-to-find-out-if-a-service-is-running-as-the-system-user + unsafe { is_local_system() == TRUE } } pub fn lock_screen() { diff --git a/src/rendezvous_mediator.rs b/src/rendezvous_mediator.rs index 9350085c4..2b2dd05bc 100644 --- a/src/rendezvous_mediator.rs +++ b/src/rendezvous_mediator.rs @@ -379,7 +379,9 @@ impl RendezvousMediator { ) .await?; let local_addr = socket.local_addr(); - allow_err!(socket_client::connect_tcp(peer_addr, local_addr, 300).await); + // key important here for punch hole to tell my gateway incoming peer is safe. + // it can not be async here, because local_addr can not be reused, we must close the connection before use it again. + allow_err!(socket_client::connect_tcp(peer_addr, local_addr, 30).await); socket }; let mut msg_out = Message::new(); diff --git a/src/tray.rs b/src/tray.rs index 3658739a4..b73e46301 100644 --- a/src/tray.rs +++ b/src/tray.rs @@ -88,6 +88,9 @@ pub fn start_tray() { /// This function will block current execution, show the tray icon and handle events. #[cfg(target_os = "linux")] pub fn start_tray() { + use std::time::Duration; + + use glib::{clone, Continue}; use gtk::traits::{GtkMenuItemExt, MenuShellExt, WidgetExt}; info!("configuring tray"); @@ -106,9 +109,9 @@ pub fn start_tray() { crate::client::translate("Stop service".to_owned()) }; let menu_item_service = gtk::MenuItem::with_label(label.as_str()); - menu_item_service.connect_activate(move |item| { + menu_item_service.connect_activate(move |_| { let _lock = crate::ui_interface::SENDER.lock().unwrap(); - update_tray_service_item(item); + change_service_state(); }); menu.append(&menu_item_service); // show tray item @@ -116,6 +119,16 @@ pub fn start_tray() { appindicator.set_menu(&mut menu); // start event loop info!("Setting tray event loop"); + // check the connection status for every second + glib::timeout_add_local( + Duration::from_secs(1), + clone!(@strong menu_item_service as item => move || { + let _lock = crate::ui_interface::SENDER.lock().unwrap(); + update_tray_service_item(&item); + // continue to trigger the next status check + Continue(true) + }), + ); gtk::main(); } else { error!("Tray process exit now"); @@ -123,17 +136,25 @@ pub fn start_tray() { } #[cfg(target_os = "linux")] +fn change_service_state() { + if is_service_stoped() { + debug!("Now try to start service"); + crate::ipc::set_option("stop-service", ""); + } else { + debug!("Now try to stop service"); + crate::ipc::set_option("stop-service", "Y"); + } +} + +#[cfg(target_os = "linux")] +#[inline] fn update_tray_service_item(item: >k::MenuItem) { use gtk::traits::GtkMenuItemExt; if is_service_stoped() { - debug!("Now try to start service"); - item.set_label(&crate::client::translate("Stop service".to_owned())); - crate::ipc::set_option("stop-service", ""); - } else { - debug!("Now try to stop service"); item.set_label(&crate::client::translate("Start Service".to_owned())); - crate::ipc::set_option("stop-service", "Y"); + } else { + item.set_label(&crate::client::translate("Stop service".to_owned())); } } @@ -189,10 +210,10 @@ pub fn make_tray() { match mode { dark_light::Mode::Dark => { icon_path = "mac-tray-light.png"; - }, + } dark_light::Mode::Light => { icon_path = "mac-tray-dark.png"; - }, + } } if let Ok(mut tray) = TrayItem::new(&crate::get_app_name(), icon_path) { tray.add_label(&format!( @@ -211,4 +232,3 @@ pub fn make_tray() { } } } - diff --git a/src/windows.cc b/src/windows.cc index dd3fa2e9e..137ae399e 100644 --- a/src/windows.cc +++ b/src/windows.cc @@ -588,4 +588,44 @@ extern "C" stop_system_key_propagate = v; } + // https://stackoverflow.com/questions/4023586/correct-way-to-find-out-if-a-service-is-running-as-the-system-user + BOOL is_local_system() + { + HANDLE hToken; + UCHAR bTokenUser[sizeof(TOKEN_USER) + 8 + 4 * SID_MAX_SUB_AUTHORITIES]; + PTOKEN_USER pTokenUser = (PTOKEN_USER)bTokenUser; + ULONG cbTokenUser; + SID_IDENTIFIER_AUTHORITY siaNT = SECURITY_NT_AUTHORITY; + PSID pSystemSid; + BOOL bSystem; + + // open process token + if (!OpenProcessToken(GetCurrentProcess(), + TOKEN_QUERY, + &hToken)) + return FALSE; + + // retrieve user SID + if (!GetTokenInformation(hToken, TokenUser, pTokenUser, + sizeof(bTokenUser), &cbTokenUser)) + { + CloseHandle(hToken); + return FALSE; + } + + CloseHandle(hToken); + + // allocate LocalSystem well-known SID + if (!AllocateAndInitializeSid(&siaNT, 1, SECURITY_LOCAL_SYSTEM_RID, + 0, 0, 0, 0, 0, 0, 0, &pSystemSid)) + return FALSE; + + // compare the user SID from the token with the LocalSystem SID + bSystem = EqualSid(pTokenUser->User.Sid, pSystemSid); + + FreeSid(pSystemSid); + + return bSystem; + } + } // end of extern "C" \ No newline at end of file