diff --git a/Cargo.lock b/Cargo.lock
index 884df3c56..62d1c9d84 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -2,12 +2,6 @@
# It is not intended for manual editing.
version = 3
-[[package]]
-name = "ab_glyph_rasterizer"
-version = "0.1.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a13739d7177fbd22bb0ed28badfff9f372f8bef46c863db4e1c6248f6b223b6e"
-
[[package]]
name = "addr2line"
version = "0.17.0"
@@ -29,6 +23,17 @@ version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234"
+[[package]]
+name = "ahash"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47"
+dependencies = [
+ "getrandom",
+ "once_cell",
+ "version_check",
+]
+
[[package]]
name = "aho-corasick"
version = "0.7.18"
@@ -69,19 +74,6 @@ dependencies = [
"pkg-config",
]
-[[package]]
-name = "andrew"
-version = "0.3.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8c4afb09dd642feec8408e33f92f3ffc4052946f6b20f32fb99c1f58cd4fa7cf"
-dependencies = [
- "bitflags",
- "rusttype",
- "walkdir",
- "xdg",
- "xml-rs",
-]
-
[[package]]
name = "android_log-sys"
version = "0.2.0"
@@ -195,9 +187,9 @@ dependencies = [
[[package]]
name = "async-task"
-version = "4.2.0"
+version = "4.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "30696a84d817107fc028e049980e09d5e140e8da8f1caeb17e8e950658a3cea9"
+checksum = "7a40729d2133846d9ed0ea60a8b9541bccddab49cd30f0715a1da672fe9a2524"
[[package]]
name = "async-trait"
@@ -218,7 +210,7 @@ checksum = "2c3d816ce6f0e2909a96830d6911c2aff044370b1ef92d7f267b43bae5addedd"
dependencies = [
"atk-sys",
"bitflags",
- "glib 0.15.11",
+ "glib 0.15.12",
"libc",
]
@@ -277,9 +269,9 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
[[package]]
name = "backtrace"
-version = "0.3.65"
+version = "0.3.66"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "11a17d453482a265fd5f8479f2a3f405566e6ca627837aaddb85af8b1ab8ef61"
+checksum = "cab84319d616cfb654d03394f38ab7e6f0919e181b1b57e1fd15e7fb4077d9a7"
dependencies = [
"addr2line",
"cc",
@@ -362,9 +354,9 @@ checksum = "37ccbd214614c6783386c1af30caf03192f17891059cecc394b4fb119e363de3"
[[package]]
name = "bytemuck"
-version = "1.9.1"
+version = "1.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cdead85bdec19c194affaeeb670c0e41fe23de31459efd1c174d049269cf02cc"
+checksum = "c53dfa917ec274df8ed3c572698f381a24eef2efba9492d797301b72b6db408a"
[[package]]
name = "byteorder"
@@ -386,13 +378,13 @@ checksum = "c1db59621ec70f09c5e9b597b220c7a2b43611f4710dc03ceb8748637775692c"
[[package]]
name = "cairo-rs"
-version = "0.15.11"
+version = "0.15.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "62be3562254e90c1c6050a72aa638f6315593e98c5cdaba9017cedbabf0a5dee"
+checksum = "c76ee391b03d35510d9fa917357c7f1855bd9a6659c95a1b392e33f49b3369bc"
dependencies = [
"bitflags",
"cairo-sys-rs",
- "glib 0.15.11",
+ "glib 0.15.12",
"libc",
"thiserror",
]
@@ -410,12 +402,12 @@ dependencies = [
[[package]]
name = "calloop"
-version = "0.6.5"
+version = "0.9.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0b036167e76041694579972c28cf4877b4f92da222560ddb49008937b6a6727c"
+checksum = "bf2eec61efe56aa1e813f5126959296933cf0700030e4314786c48779a66ab82"
dependencies = [
"log",
- "nix 0.18.0",
+ "nix 0.22.3",
]
[[package]]
@@ -424,7 +416,7 @@ version = "1.0.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "869119e97797867fd90f5e22af7d0bd274bd4635ebb9eb68c04f3f513ae6c412"
dependencies = [
- "serde 1.0.137",
+ "serde 1.0.139",
]
[[package]]
@@ -433,7 +425,7 @@ version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cbdb825da8a5df079a43676dbe042702f1707b1109f713a01420fbb4cc71fa27"
dependencies = [
- "serde 1.0.137",
+ "serde 1.0.139",
]
[[package]]
@@ -444,25 +436,25 @@ checksum = "4acbb09d9ee8e23699b9634375c72795d095bf268439da88562cf9b501f181fa"
dependencies = [
"camino",
"cargo-platform",
- "semver 1.0.10",
- "serde 1.0.137",
- "serde_json 1.0.81",
+ "semver 1.0.12",
+ "serde 1.0.139",
+ "serde_json 1.0.82",
]
[[package]]
name = "cbindgen"
-version = "0.24.3"
+version = "0.23.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a6358dedf60f4d9b8db43ad187391afe959746101346fe51bb978126bec61dfb"
+checksum = "5b6d248e3ca02f3fbfabcb9284464c596baec223a26d91bbf44a5a62ddb0d900"
dependencies = [
- "clap 3.2.6",
+ "clap 3.2.12",
"heck 0.4.0",
"indexmap",
"log",
"proc-macro2",
"quote",
- "serde 1.0.137",
- "serde_json 1.0.81",
+ "serde 1.0.139",
+ "serde_json 1.0.82",
"syn",
"tempfile",
"toml",
@@ -533,7 +525,7 @@ checksum = "5a050e2153c5be08febd6734e29298e844fdb0fa21aeddd63b4eb7baa106c69b"
dependencies = [
"glob",
"libc",
- "libloading 0.7.3",
+ "libloading",
]
[[package]]
@@ -553,24 +545,39 @@ dependencies = [
[[package]]
name = "clap"
-version = "3.2.6"
+version = "3.2.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9f1fe12880bae935d142c8702d500c63a4e8634b6c3c57ad72bf978fc7b6249a"
+checksum = "ab8b79fe3946ceb4a0b1c080b4018992b8d27e9ff363644c1c9b6387c854614d"
dependencies = [
"atty",
"bitflags",
+ "clap_derive",
"clap_lex",
"indexmap",
+ "once_cell",
"strsim 0.10.0",
"termcolor",
"textwrap 0.15.0",
]
[[package]]
-name = "clap_lex"
-version = "0.2.3"
+name = "clap_derive"
+version = "3.2.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "87eba3c8c7f42ef17f6c659fc7416d0f4758cd3e58861ee63c5fa4a4dde649e4"
+checksum = "759bf187376e1afa7b85b959e6a664a3e7a95203415dba952ad19139e798f902"
+dependencies = [
+ "heck 0.4.0",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5"
dependencies = [
"os_str_bytes",
]
@@ -582,16 +589,16 @@ dependencies = [
"cc",
"hbb_common",
"lazy_static",
- "serde 1.0.137",
+ "serde 1.0.139",
"serde_derive",
"thiserror",
]
[[package]]
name = "clipboard-win"
-version = "4.4.1"
+version = "4.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2f3e1238132dc01f081e1cbb9dace14e5ef4c3a51ee244bd982275fb514605db"
+checksum = "c4ab1b92798304eedc095b53942963240037c0516452cb11aeba709d420b2219"
dependencies = [
"error-code",
"str-buf",
@@ -680,9 +687,9 @@ dependencies = [
[[package]]
name = "concurrent-queue"
-version = "1.2.2"
+version = "1.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "30ed07550be01594c6026cff2a1d7fe9c8f683caa798e12b68694ac9e88286a3"
+checksum = "83827793632c72fa4f73c2edb31e7a997527dd8ffe7077344621fc62c5478157"
dependencies = [
"cache-padded",
]
@@ -693,7 +700,7 @@ version = "0.4.0"
source = "git+https://github.com/open-trade/confy#630cc28a396cb7d01eefdd9f3824486fe4d8554b"
dependencies = [
"directories-next",
- "serde 1.0.137",
+ "serde 1.0.139",
"thiserror",
"toml",
]
@@ -860,20 +867,6 @@ dependencies = [
"cfg-if 1.0.0",
]
-[[package]]
-name = "crossbeam"
-version = "0.8.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4ae5588f6b3c3cb05239e90bd110f257254aecd01e4635400391aeae07497845"
-dependencies = [
- "cfg-if 1.0.0",
- "crossbeam-channel",
- "crossbeam-deque",
- "crossbeam-epoch",
- "crossbeam-queue",
- "crossbeam-utils",
-]
-
[[package]]
name = "crossbeam-channel"
version = "0.5.5"
@@ -931,9 +924,9 @@ dependencies = [
[[package]]
name = "crypto-common"
-version = "0.1.3"
+version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "57952ca27b5e3606ff4dd79b0020231aaf9d6aa76dc05fd30137538c50bd3ce8"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
dependencies = [
"generic-array",
"typenum",
@@ -955,7 +948,7 @@ version = "3.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b37feaa84e6861e00a1f5e5aa8da3ee56d605c9992d33e082786754828e20865"
dependencies = [
- "nix 0.24.1",
+ "nix 0.24.2",
"winapi 0.3.9",
]
@@ -965,38 +958,14 @@ version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b365fabc795046672053e29c954733ec3b05e4be654ab130fe8f1f94d7051f35"
-[[package]]
-name = "darling"
-version = "0.10.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0d706e75d87e35569db781a9b5e2416cff1236a47ed380831f959382ccd5f858"
-dependencies = [
- "darling_core 0.10.2",
- "darling_macro 0.10.2",
-]
-
[[package]]
name = "darling"
version = "0.13.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c"
dependencies = [
- "darling_core 0.13.4",
- "darling_macro 0.13.4",
-]
-
-[[package]]
-name = "darling_core"
-version = "0.10.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f0c960ae2da4de88a91b2d920c2a7233b400bc33cb28453a2987822d8392519b"
-dependencies = [
- "fnv",
- "ident_case",
- "proc-macro2",
- "quote",
- "strsim 0.9.3",
- "syn",
+ "darling_core",
+ "darling_macro",
]
[[package]]
@@ -1013,24 +982,13 @@ dependencies = [
"syn",
]
-[[package]]
-name = "darling_macro"
-version = "0.10.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d9b5a2f4ac4969822c62224815d069952656cadc7084fdca9751e6d959189b72"
-dependencies = [
- "darling_core 0.10.2",
- "quote",
- "syn",
-]
-
[[package]]
name = "darling_macro"
version = "0.13.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835"
dependencies = [
- "darling_core 0.13.4",
+ "darling_core",
"quote",
"syn",
]
@@ -1156,15 +1114,27 @@ dependencies = [
[[package]]
name = "dbus"
-version = "0.9.5"
+version = "0.9.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "de0a745c25b32caa56b82a3950f5fec7893a960f4c10ca3b02060b0c38d8c2ce"
+checksum = "6f8bcdd56d2e5c4ed26a529c5a9029f5db8290d433497506f958eae3be148eb6"
dependencies = [
"libc",
"libdbus-sys",
"winapi 0.3.9",
]
+[[package]]
+name = "default-net"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05e70d471b0ba4e722c85651b3bb04b6880dfdb1224a43ade80c1295314db646"
+dependencies = [
+ "libc",
+ "memalloc",
+ "system-configuration",
+ "windows",
+]
+
[[package]]
name = "deflate"
version = "0.8.6"
@@ -1195,15 +1165,6 @@ dependencies = [
"dirs-sys-next",
]
-[[package]]
-name = "dirs"
-version = "4.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059"
-dependencies = [
- "dirs-sys",
-]
-
[[package]]
name = "dirs-next"
version = "2.0.0"
@@ -1214,17 +1175,6 @@ dependencies = [
"dirs-sys-next",
]
-[[package]]
-name = "dirs-sys"
-version = "0.3.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6"
-dependencies = [
- "libc",
- "redox_users",
- "winapi 0.3.9",
-]
-
[[package]]
name = "dirs-sys-next"
version = "0.1.2"
@@ -1242,22 +1192,13 @@ version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b"
-[[package]]
-name = "dlib"
-version = "0.4.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b11f15d1e3268f140f68d390637d5e76d849782d971ae7063e0da69fe9709a76"
-dependencies = [
- "libloading 0.6.7",
-]
-
[[package]]
name = "dlib"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ac1b7517328c04c2aa68422fc60a41b92208182142ed04a25879c26c8f878794"
dependencies = [
- "libloading 0.7.3",
+ "libloading",
]
[[package]]
@@ -1268,7 +1209,7 @@ checksum = "7f3f119846c823f9eafcf953a8f6ffb6ed69bf6240883261a7f13b634579a51f"
dependencies = [
"lazy_static",
"regex",
- "serde 1.0.137",
+ "serde 1.0.139",
"strsim 0.10.0",
]
@@ -1295,9 +1236,9 @@ dependencies = [
[[package]]
name = "either"
-version = "1.6.1"
+version = "1.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457"
+checksum = "3f107b87b6afc2a64fd13cac55fe06d6c8859f12d4b14cbcdd2c67d0976781be"
[[package]]
name = "encoding_rs"
@@ -1317,7 +1258,7 @@ dependencies = [
"log",
"objc",
"pkg-config",
- "serde 1.0.137",
+ "serde 1.0.139",
"serde_derive",
"unicode-segmentation",
"winapi 0.3.9",
@@ -1418,14 +1359,14 @@ dependencies = [
[[package]]
name = "filetime"
-version = "0.2.16"
+version = "0.2.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c0408e2626025178a6a7f7ffc05a25bc47103229f19c113755de7bf63816290c"
+checksum = "e94a7bbaa59354bc20dd75b67f23e2797b4490e9d6928203fb105c79e448c86c"
dependencies = [
"cfg-if 1.0.0",
"libc",
"redox_syscall",
- "winapi 0.3.9",
+ "windows-sys 0.36.1",
]
[[package]]
@@ -1460,9 +1401,9 @@ dependencies = [
[[package]]
name = "flutter_rust_bridge"
-version = "1.34.2"
+version = "1.30.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d56ac4e92d08407968b7efba9cda734935f6ebbffd521f9255b8f516d8c2cede"
+checksum = "b7e7e4af55d6a36aad9573737a12fba774999e4d6dd5e668e29c25bb473f85f3"
dependencies = [
"allo-isolate",
"anyhow",
@@ -1474,9 +1415,9 @@ dependencies = [
[[package]]
name = "flutter_rust_bridge_codegen"
-version = "1.34.2"
+version = "1.30.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b2bd4b68e21ce08b9afe3332c37c1eef2799bc36c0521890f5aaa303942b7df2"
+checksum = "3209735fd687b06b8d770ec008874119b91f7f46b4a73d17226d5c337435bb74"
dependencies = [
"anyhow",
"cargo_metadata",
@@ -1489,7 +1430,7 @@ dependencies = [
"pathdiff",
"quote",
"regex",
- "serde 1.0.137",
+ "serde 1.0.139",
"serde_yaml",
"structopt",
"syn",
@@ -1500,9 +1441,9 @@ dependencies = [
[[package]]
name = "flutter_rust_bridge_macros"
-version = "1.34.2"
+version = "1.38.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1d4540ab97380ed5af0212f8b18ff84a5f32acc8247f8f731311516dd105363f"
+checksum = "13652b9b71bc3bf4ea3bbb5cadc9bc2350fe0fba5145f6a949309fc452576d6d"
[[package]]
name = "fnv"
@@ -1681,7 +1622,7 @@ dependencies = [
"gdk-pixbuf",
"gdk-sys",
"gio",
- "glib 0.15.11",
+ "glib 0.15.12",
"libc",
"pango",
]
@@ -1695,7 +1636,7 @@ dependencies = [
"bitflags",
"gdk-pixbuf-sys",
"gio",
- "glib 0.15.11",
+ "glib 0.15.12",
"libc",
]
@@ -1762,22 +1703,22 @@ dependencies = [
[[package]]
name = "gimli"
-version = "0.26.1"
+version = "0.26.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "78cc372d058dcf6d5ecd98510e7fbc9e5aec4d21de70f65fea8fecebcd881bd4"
+checksum = "22030e2c5a68ec659fde1e949a745124b48e6fa8b045b7ed5bd1fe4ccc5c4e5d"
[[package]]
name = "gio"
-version = "0.15.11"
+version = "0.15.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0f132be35e05d9662b9fa0fee3f349c6621f7782e0105917f4cc73c1bf47eceb"
+checksum = "68fdbc90312d462781a395f7a16d96a2b379bb6ef8cd6310a2df272771c4283b"
dependencies = [
"bitflags",
"futures-channel",
"futures-core",
"futures-io",
"gio-sys",
- "glib 0.15.11",
+ "glib 0.15.12",
"libc",
"once_cell",
"thiserror",
@@ -1817,9 +1758,9 @@ dependencies = [
[[package]]
name = "glib"
-version = "0.15.11"
+version = "0.15.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bd124026a2fa8c33a3d17a3fe59c103f2d9fa5bd92c19e029e037736729abeab"
+checksum = "edb0306fbad0ab5428b0ca674a23893db909a98582969c9b537be4ced78c505d"
dependencies = [
"bitflags",
"futures-channel",
@@ -2061,7 +2002,7 @@ dependencies = [
"gdk",
"gdk-pixbuf",
"gio",
- "glib 0.15.11",
+ "glib 0.15.12",
"gtk-sys",
"gtk3-macros",
"libc",
@@ -2117,15 +2058,18 @@ dependencies = [
"indexmap",
"slab",
"tokio",
- "tokio-util 0.7.3",
+ "tokio-util",
"tracing",
]
[[package]]
name = "hashbrown"
-version = "0.12.1"
+version = "0.12.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "db0d4cf898abf0081f964436dc980e96670a0f36863e4b83aaacdb65c9d7ccc3"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+dependencies = [
+ "ahash",
+]
[[package]]
name = "hbb_common"
@@ -2144,18 +2088,19 @@ dependencies = [
"log",
"mac_address",
"protobuf",
- "protobuf-codegen-pure",
+ "protobuf-codegen",
"quinn",
"rand 0.8.5",
"regex",
- "serde 1.0.137",
+ "serde 1.0.139",
"serde_derive",
- "serde_json 1.0.81",
+ "serde_json 1.0.82",
+ "serde_with",
"socket2 0.3.19",
"sodiumoxide",
"tokio",
"tokio-socks",
- "tokio-util 0.6.10",
+ "tokio-util",
"toml",
"winapi 0.3.9",
"zstd",
@@ -2234,21 +2179,21 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
[[package]]
name = "hwcodec"
version = "0.1.0"
-source = "git+https://github.com/21pages/hwcodec#bfc558d2375928b0a59336cfc72336415db27066"
+source = "git+https://github.com/21pages/hwcodec#91d1cd327c88490f917457072aeef0676ddb2be7"
dependencies = [
"bindgen",
"cc",
"log",
- "serde 1.0.137",
+ "serde 1.0.139",
"serde_derive",
- "serde_json 1.0.81",
+ "serde_json 1.0.82",
]
[[package]]
name = "hyper"
-version = "0.14.19"
+version = "0.14.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "42dc3c131584288d375f2d07f822b0cb012d8c6fb899a5b9fdb3cb7eb9b6004f"
+checksum = "02c929dc5c39e335a03c405292728118860721b10190d98c2a0f0efd5baafbac"
dependencies = [
"bytes",
"futures-channel",
@@ -2350,6 +2295,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
dependencies = [
"cfg-if 1.0.0",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
]
[[package]]
@@ -2456,11 +2404,11 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
[[package]]
name = "libappindicator"
-version = "0.7.0"
+version = "0.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "97b29fab3280d59f3d06725f75da9ef9a1b001b2c748b1abfebd1c966c61d7de"
+checksum = "db2d3cb96d092b4824cb306c9e544c856a4cb6210c1081945187f7f1924b47e8"
dependencies = [
- "glib 0.15.11",
+ "glib 0.15.12",
"gtk",
"gtk-sys",
"libappindicator-sys",
@@ -2469,12 +2417,12 @@ dependencies = [
[[package]]
name = "libappindicator-sys"
-version = "0.7.2"
+version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4a0e019ae1a736a858f4c52b58af2ca6e797f27d7fe534e8a56776d74a8f2535"
+checksum = "f1b3b6681973cea8cc3bce7391e6d7d5502720b80a581c9a95c9cbaf592826aa"
dependencies = [
"gtk-sys",
- "libloading 0.7.3",
+ "libloading",
"once_cell",
]
@@ -2493,16 +2441,6 @@ dependencies = [
"pkg-config",
]
-[[package]]
-name = "libloading"
-version = "0.6.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "351a32417a12d5f7e82c368a66781e307834dae04c6ce0cd4456d52989229883"
-dependencies = [
- "cfg-if 1.0.0",
- "winapi 0.3.9",
-]
-
[[package]]
name = "libloading"
version = "0.7.3"
@@ -2659,6 +2597,12 @@ version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f"
+[[package]]
+name = "memalloc"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df39d232f5c40b0891c10216992c2f250c054105cb1e56f0fc9032db6203ecc1"
+
[[package]]
name = "memchr"
version = "2.5.0"
@@ -2667,9 +2611,9 @@ checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
[[package]]
name = "memmap2"
-version = "0.1.0"
+version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d9b70ca2a6103ac8b665dc150b142ef0e4e89df640c9e6cf295d189c3caebe5a"
+checksum = "00b6c2ebff6180198788f5db08d7ce3bc1d0b617176678831a7510825973e357"
dependencies = [
"libc",
]
@@ -2742,19 +2686,6 @@ dependencies = [
"winapi 0.2.8",
]
-[[package]]
-name = "mio"
-version = "0.7.14"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8067b404fe97c70829f082dec8bcf4f71225d7eaea1d8645349cb76fa06205cc"
-dependencies = [
- "libc",
- "log",
- "miow 0.3.7",
- "ntapi",
- "winapi 0.3.9",
-]
-
[[package]]
name = "mio"
version = "0.8.4"
@@ -2767,18 +2698,6 @@ dependencies = [
"windows-sys 0.36.1",
]
-[[package]]
-name = "mio-misc"
-version = "1.2.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b47412f3a52115b936ff2a229b803498c7b4d332adeb87c2f1498c9da54c398c"
-dependencies = [
- "crossbeam",
- "crossbeam-queue",
- "log",
- "mio 0.7.14",
-]
-
[[package]]
name = "mio-named-pipes"
version = "0.1.7"
@@ -2829,10 +2748,11 @@ checksum = "0419348c027fa7be448d2ae7ea0e4e04c2334c31dc4e74ab29f00a2a7ca69204"
[[package]]
name = "ndk"
-version = "0.3.0"
+version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8794322172319b972f528bf90c6b467be0079f1fa82780ffb431088e741a73ab"
+checksum = "96d868f654c72e75f8687572699cdabe755f03effbb62542768e995d5b8d699d"
dependencies = [
+ "bitflags",
"jni-sys",
"ndk-sys 0.2.2",
"num_enum",
@@ -2860,15 +2780,16 @@ checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b"
[[package]]
name = "ndk-glue"
-version = "0.3.0"
+version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c5caf0c24d51ac1c905c27d4eda4fa0635bbe0de596b8f79235e0b17a4d29385"
+checksum = "c71bee8ea72d685477e28bd004cfe1bf99c754d688cd78cad139eae4089484d4"
dependencies = [
"lazy_static",
"libc",
"log",
- "ndk 0.3.0",
- "ndk-macro 0.2.0",
+ "ndk 0.5.0",
+ "ndk-context",
+ "ndk-macro",
"ndk-sys 0.2.2",
]
@@ -2883,30 +2804,17 @@ dependencies = [
"log",
"ndk 0.6.0",
"ndk-context",
- "ndk-macro 0.3.0",
+ "ndk-macro",
"ndk-sys 0.3.0",
]
-[[package]]
-name = "ndk-macro"
-version = "0.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "05d1c6307dc424d0f65b9b06e94f88248e6305726b14729fd67a5e47b2dc481d"
-dependencies = [
- "darling 0.10.2",
- "proc-macro-crate 0.1.5",
- "proc-macro2",
- "quote",
- "syn",
-]
-
[[package]]
name = "ndk-macro"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0df7ac00c4672f9d5aece54ee3347520b7e20f158656c7db2e6de01902eb7a6c"
dependencies = [
- "darling 0.13.4",
+ "darling",
"proc-macro-crate 1.1.3",
"proc-macro2",
"quote",
@@ -2939,30 +2847,6 @@ dependencies = [
"winapi 0.3.9",
]
-[[package]]
-name = "nix"
-version = "0.18.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "83450fe6a6142ddd95fb064b746083fc4ef1705fe81f64a64e1d4b39f54a1055"
-dependencies = [
- "bitflags",
- "cc",
- "cfg-if 0.1.10",
- "libc",
-]
-
-[[package]]
-name = "nix"
-version = "0.20.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fa9b4819da1bc61c0ea48b63b7bc8604064dd43013e7cc325df098d49cd7c18a"
-dependencies = [
- "bitflags",
- "cc",
- "cfg-if 1.0.0",
- "libc",
-]
-
[[package]]
name = "nix"
version = "0.22.3"
@@ -2991,9 +2875,9 @@ dependencies = [
[[package]]
name = "nix"
-version = "0.24.1"
+version = "0.24.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8f17df307904acd05aa8e32e97bb20f2a0df1728bbc2d771ae8f9a90463441e9"
+checksum = "195cdbc1741b8134346d515b3a56a1c94b0912758009cfd53f99ea0f57b065fc"
dependencies = [
"bitflags",
"cfg-if 1.0.0",
@@ -3160,9 +3044,9 @@ dependencies = [
[[package]]
name = "object"
-version = "0.28.4"
+version = "0.29.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e42c982f2d955fac81dd7e1d0e1426a7d702acd9c98d19ab01083a6a0328c424"
+checksum = "21158b2c33aa6d4561f1c0a6ea283ca92bc54802a93b263e910746d679a7eb53"
dependencies = [
"memchr",
]
@@ -3192,9 +3076,9 @@ dependencies = [
[[package]]
name = "once_cell"
-version = "1.12.0"
+version = "1.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7709cef83f0c1f58f666e746a08b21e0085f7440fa6a29cc194d68aac97a4225"
+checksum = "18a6dbe30758c9f83eb00cbea4ac95966305f5a7772f3f42ebfc7fc7eddbd8e1"
[[package]]
name = "openssl-probe"
@@ -3204,18 +3088,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
[[package]]
name = "os_str_bytes"
-version = "6.1.0"
+version = "6.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "21326818e99cfe6ce1e524c2a805c189a99b5ae555a35d19f9a284b427d86afa"
-
-[[package]]
-name = "owned_ttf_parser"
-version = "0.6.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9f923fb806c46266c02ab4a5b239735c144bdeda724a50ed058e5226f594cde3"
-dependencies = [
- "ttf-parser",
-]
+checksum = "648001efe5d5c0102d8cea768e348da85d90af8ba91f0bea908f157951493cd4"
[[package]]
name = "padlock"
@@ -3230,7 +3105,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "22e4045548659aee5313bde6c582b0d83a627b7904dd20dc2d9ef0895d414e4f"
dependencies = [
"bitflags",
- "glib 0.15.11",
+ "glib 0.15.12",
"libc",
"once_cell",
"pango-sys",
@@ -3250,8 +3125,8 @@ dependencies = [
[[package]]
name = "parity-tokio-ipc"
-version = "0.7.3"
-source = "git+https://github.com/open-trade/parity-tokio-ipc#64d5b6b11464d01bfe75b3b79a49bd455b79e352"
+version = "0.7.3-1"
+source = "git+https://github.com/open-trade/parity-tokio-ipc#20b2895910161605210657f3e751edd55321f698"
dependencies = [
"futures",
"libc",
@@ -3390,18 +3265,18 @@ dependencies = [
[[package]]
name = "pin-project"
-version = "1.0.10"
+version = "1.0.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "58ad3879ad3baf4e44784bc6a718a8698867bb991f8ce24d1bcbe2cfb4c3a75e"
+checksum = "78203e83c48cffbe01e4a2d35d566ca4de445d79a85372fc64e378bfc812a260"
dependencies = [
"pin-project-internal",
]
[[package]]
name = "pin-project-internal"
-version = "1.0.10"
+version = "1.0.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "744b6f092ba29c3650faf274db506afd39944f48420f6c86b17cfe0ee1cb36bb"
+checksum = "710faf75e1b33345361201d36d04e98ac1ed8909151a017ed384700836104c74"
dependencies = [
"proc-macro2",
"quote",
@@ -3526,60 +3401,56 @@ dependencies = [
[[package]]
name = "protobuf"
-version = "3.0.0-alpha.2"
+version = "3.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9d5ef59c35c7472ce5e1b6c5924b87585143d1fc2cf39eae0009bba6c4df62f1"
+checksum = "4ee4a7d8b91800c8f167a6268d1a1026607368e1adc84e98fe044aeb905302f7"
+dependencies = [
+ "bytes",
+ "once_cell",
+ "protobuf-support",
+ "thiserror",
+]
[[package]]
name = "protobuf-codegen"
-version = "3.0.0-alpha.2"
+version = "3.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "89100ee819f69b77a4cab389fec9dd155a305af4c615e6413ec1ef9341f333ef"
+checksum = "07b893e5e7d3395545d5244f8c0d33674025bd566b26c03bfda49b82c6dec45e"
dependencies = [
"anyhow",
+ "once_cell",
"protobuf",
"protobuf-parse",
- "thiserror",
-]
-
-[[package]]
-name = "protobuf-codegen-pure"
-version = "3.0.0-alpha.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "79453e74d08190551e821533ee42c447f9e21ca26f83520e120e6e8af27f6879"
-dependencies = [
- "anyhow",
- "protobuf",
- "protobuf-codegen",
- "protobuf-parse",
- "thiserror",
-]
-
-[[package]]
-name = "protobuf-parse"
-version = "3.0.0-alpha.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c265ffc69976efc3056955b881641add3186ad0be893ef10622482d80d1d2b68"
-dependencies = [
- "anyhow",
- "protobuf",
- "protoc",
+ "regex",
"tempfile",
"thiserror",
]
[[package]]
-name = "protoc"
-version = "3.0.0-alpha.2"
+name = "protobuf-parse"
+version = "3.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1f1f8b318a54d18fbe542513331e058f4f8ce6502e542e057c50c7e5e803fdab"
+checksum = "9b1447dd751c434cc1b415579837ebd0411ed7d67d465f38010da5d7cd33af4d"
dependencies = [
"anyhow",
+ "indexmap",
"log",
+ "protobuf",
+ "protobuf-support",
+ "tempfile",
"thiserror",
"which 4.2.5",
]
+[[package]]
+name = "protobuf-support"
+version = "3.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ca157fe12fc7ee2e315f2f735e27df41b3d97cdd70ea112824dac1ffb08ee1c"
+dependencies = [
+ "thiserror",
+]
+
[[package]]
name = "quest"
version = "0.3.0"
@@ -3791,16 +3662,6 @@ dependencies = [
"rand_core 0.3.1",
]
-[[package]]
-name = "raw-window-handle"
-version = "0.3.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e28f55143d0548dad60bb4fbdc835a3d7ac6acc3324506450c5fdd6e42903a76"
-dependencies = [
- "libc",
- "raw-window-handle 0.4.3",
-]
-
[[package]]
name = "raw-window-handle"
version = "0.4.3"
@@ -3836,8 +3697,8 @@ dependencies = [
[[package]]
name = "rdev"
-version = "0.5.0"
-source = "git+https://github.com/open-trade/rdev#fbbefd0b5d87095a7349965aec9ecd33de7035ac"
+version = "0.5.0-1"
+source = "git+https://github.com/open-trade/rdev#a9b6ea462956f289b4a48e81f2ea7dda33cd8047"
dependencies = [
"cocoa 0.22.0",
"core-foundation 0.7.0",
@@ -3889,9 +3750,9 @@ dependencies = [
[[package]]
name = "regex"
-version = "1.5.6"
+version = "1.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d83f127d94bdbcda4c8cc2e50f6f84f4b611f69c902699ca385a39c3a75f9ff1"
+checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b"
dependencies = [
"aho-corasick",
"memchr",
@@ -3900,9 +3761,9 @@ dependencies = [
[[package]]
name = "regex-syntax"
-version = "0.6.26"
+version = "0.6.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "49b3de9ec5dc0a3417da371aab17d729997c15010e7fd24ff707773a33bddb64"
+checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244"
[[package]]
name = "remove_dir_all"
@@ -3948,8 +3809,8 @@ dependencies = [
"pin-project-lite",
"rustls",
"rustls-pemfile 1.0.0",
- "serde 1.0.137",
- "serde_json 1.0.81",
+ "serde 1.0.139",
+ "serde_json 1.0.82",
"serde_urlencoded",
"tokio",
"tokio-rustls",
@@ -3990,13 +3851,11 @@ dependencies = [
[[package]]
name = "rpassword"
-version = "6.0.1"
+version = "7.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2bf099a1888612545b683d2661a1940089f6c2e5a8e38979b2159da876bfd956"
+checksum = "26b763cb66df1c928432cc35053f8bd4cec3335d8559fc16010017d16b3c1680"
dependencies = [
"libc",
- "serde 1.0.137",
- "serde_json 1.0.81",
"winapi 0.3.9",
]
@@ -4062,7 +3921,7 @@ dependencies = [
"base64",
"cc",
"cfg-if 1.0.0",
- "clap 3.2.6",
+ "clap 3.2.12",
"clipboard",
"cocoa 0.24.0",
"core-foundation 0.9.3",
@@ -4070,6 +3929,7 @@ dependencies = [
"cpal",
"ctrlc",
"dasp",
+ "default-net",
"dispatch",
"enigo",
"flexi_logger",
@@ -4092,16 +3952,16 @@ dependencies = [
"rdev",
"repng",
"reqwest",
- "rpassword 6.0.1",
+ "rpassword 7.0.0",
"rubato",
"runas",
"rust-pulsectl",
"samplerate",
"sciter-rs",
"scrap",
- "serde 1.0.137",
+ "serde 1.0.139",
"serde_derive",
- "serde_json 1.0.81",
+ "serde_json 1.0.82",
"sha2",
"simple_rc",
"sys-locale",
@@ -4116,6 +3976,7 @@ dependencies = [
"winit",
"winreg 0.10.1",
"winres",
+ "wol-rs",
]
[[package]]
@@ -4174,21 +4035,11 @@ dependencies = [
"base64",
]
-[[package]]
-name = "rusttype"
-version = "0.9.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dc7c727aded0be18c5b80c1640eae0ac8e396abf6fa8477d96cb37d18ee5ec59"
-dependencies = [
- "ab_glyph_rasterizer",
- "owned_ttf_parser",
-]
-
[[package]]
name = "rustversion"
-version = "1.0.7"
+version = "1.0.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a0a5f7c728f5d284929a1cccb5bc19884422bfe6ef4d6c409da2c41838983fcf"
+checksum = "24c8ad4f0c00e1eb5bc7614d236a7f1300e3dbd76b68cac8e06fb00b015ad8d8"
[[package]]
name = "ryu"
@@ -4269,8 +4120,8 @@ dependencies = [
"num_cpus",
"quest",
"repng",
- "serde 1.0.137",
- "serde_json 1.0.81",
+ "serde 1.0.139",
+ "serde_json 1.0.82",
"target_build_utils",
"tracing",
"webm",
@@ -4321,11 +4172,11 @@ dependencies = [
[[package]]
name = "semver"
-version = "1.0.10"
+version = "1.0.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a41d061efea015927ac527063765e73601444cdc344ba855bc7bd44578b25e1c"
+checksum = "a2333e6df6d6598f2b1974829f853c2b4c5f4a6e503c10af918081aa6f8564e1"
dependencies = [
- "serde 1.0.137",
+ "serde 1.0.139",
]
[[package]]
@@ -4345,18 +4196,18 @@ checksum = "34b623917345a631dc9608d5194cc206b3fe6c3554cd1c75b937e55e285254af"
[[package]]
name = "serde"
-version = "1.0.137"
+version = "1.0.139"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "61ea8d54c77f8315140a05f4c7237403bf38b72704d031543aa1d16abbf517d1"
+checksum = "0171ebb889e45aa68b44aee0859b3eede84c6f5f5c228e6f140c0b2a0a46cad6"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
-version = "1.0.137"
+version = "1.0.139"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1f26faba0c3959972377d3b2d306ee9f71faee9714294e41bb777f83f88578be"
+checksum = "dc1d3230c1de7932af58ad8ffbe1d784bd55efd5a9d84ac24f69c72d83543dfb"
dependencies = [
"proc-macro2",
"quote",
@@ -4377,13 +4228,13 @@ dependencies = [
[[package]]
name = "serde_json"
-version = "1.0.81"
+version = "1.0.82"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9b7ce2b32a1aed03c558dc61a5cd328f15aff2dbc17daad8fb8af04d2100e15c"
+checksum = "82c2c1fdcd807d1098552c5b9a36e425e42e9fbd7c6a37a8425f390f781f7fa7"
dependencies = [
"itoa 1.0.2",
"ryu",
- "serde 1.0.137",
+ "serde 1.0.139",
]
[[package]]
@@ -4395,18 +4246,40 @@ dependencies = [
"form_urlencoded",
"itoa 1.0.2",
"ryu",
- "serde 1.0.137",
+ "serde 1.0.139",
+]
+
+[[package]]
+name = "serde_with"
+version = "1.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "678b5a069e50bf00ecd22d0cd8ddf7c236f68581b03db652061ed5eb13a312ff"
+dependencies = [
+ "serde 1.0.139",
+ "serde_with_macros",
+]
+
+[[package]]
+name = "serde_with_macros"
+version = "1.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e182d6ec6f05393cc0e5ed1bf81ad6db3a8feedf8ee515ecdd369809bcce8082"
+dependencies = [
+ "darling",
+ "proc-macro2",
+ "quote",
+ "syn",
]
[[package]]
name = "serde_yaml"
-version = "0.8.24"
+version = "0.8.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "707d15895415db6628332b737c838b88c598522e4dc70647e59b72312924aebc"
+checksum = "578a7433b776b56a35785ed5ce9a7e777ac0598aac5a6dd1b4b18a307c7fc71b"
dependencies = [
"indexmap",
"ryu",
- "serde 1.0.137",
+ "serde 1.0.139",
"yaml-rust",
]
@@ -4458,7 +4331,7 @@ version = "0.1.0"
dependencies = [
"confy",
"hbb_common",
- "serde 1.0.137",
+ "serde 1.0.139",
"serde_derive",
"walkdir",
]
@@ -4477,24 +4350,24 @@ checksum = "eb703cfe953bccee95685111adeedb76fabe4e97549a58d16f03ea7b9367bb32"
[[package]]
name = "smallvec"
-version = "1.8.1"
+version = "1.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cc88c725d61fc6c3132893370cac4a0200e3fedf5da8331c570664b1987f5ca2"
+checksum = "2fd0db749597d91ff862fd1d55ea87f7855a744a8425a64695b6fca237d1dad1"
[[package]]
name = "smithay-client-toolkit"
-version = "0.12.3"
+version = "0.15.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4750c76fd5d3ac95fa3ed80fe667d6a3d8590a960e5b575b98eea93339a80b80"
+checksum = "8a28f16a97fa0e8ce563b2774d1e732dd5d4025d2772c5dba0a41a0f90a29da3"
dependencies = [
- "andrew",
"bitflags",
"calloop",
- "dlib 0.4.2",
+ "dlib",
"lazy_static",
"log",
"memmap2",
- "nix 0.18.0",
+ "nix 0.22.3",
+ "pkg-config",
"wayland-client",
"wayland-cursor",
"wayland-protocols",
@@ -4530,7 +4403,7 @@ dependencies = [
"ed25519",
"libc",
"libsodium-sys",
- "serde 1.0.137",
+ "serde 1.0.139",
]
[[package]]
@@ -4563,12 +4436,6 @@ version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
-[[package]]
-name = "strsim"
-version = "0.9.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c"
-
[[package]]
name = "strsim"
version = "0.10.0"
@@ -4657,9 +4524,9 @@ dependencies = [
[[package]]
name = "sysinfo"
-version = "0.23.13"
+version = "0.24.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3977ec2e0520829be45c8a2df70db2bf364714d8a748316a10c3c35d4d2b01c9"
+checksum = "0b6e19da72a8d75be4d40e4dd4686afca31507f26c3ffdf6bd3073278d9de0a0"
dependencies = [
"cfg-if 1.0.0",
"core-foundation-sys 0.8.3",
@@ -4670,6 +4537,27 @@ dependencies = [
"winapi 0.3.9",
]
+[[package]]
+name = "system-configuration"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d75182f12f490e953596550b65ee31bda7c8e043d9386174b353bda50838c3fd"
+dependencies = [
+ "bitflags",
+ "core-foundation 0.9.3",
+ "system-configuration-sys",
+]
+
+[[package]]
+name = "system-configuration-sys"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9"
+dependencies = [
+ "core-foundation-sys 0.8.3",
+ "libc",
+]
+
[[package]]
name = "system-deps"
version = "1.3.2"
@@ -4831,10 +4719,11 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c"
[[package]]
name = "tokio"
-version = "1.19.2"
+version = "1.20.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c51a52ed6686dd62c320f9b89299e9dfb46f730c7a48e635c19f21d116cb1439"
+checksum = "57aec3cfa4c296db7255446efb4928a6be304b431a806216105542a67b6ca82e"
dependencies = [
+ "autocfg 1.1.0",
"bytes",
"libc",
"memchr",
@@ -4873,8 +4762,8 @@ dependencies = [
[[package]]
name = "tokio-socks"
-version = "0.5.1"
-source = "git+https://github.com/open-trade/tokio-socks#c34272f219b24dc6508f13fa81eff9850e616ce2"
+version = "0.5.1-1"
+source = "git+https://github.com/open-trade/tokio-socks#7034e79263ce25c348be072808d7601d82cd892d"
dependencies = [
"bytes",
"either",
@@ -4884,23 +4773,7 @@ dependencies = [
"pin-project",
"thiserror",
"tokio",
- "tokio-util 0.6.10",
-]
-
-[[package]]
-name = "tokio-util"
-version = "0.6.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "36943ee01a6d67977dd3f84a5a1d2efeb4ada3a1ae771cadfaa535d9d9fc6507"
-dependencies = [
- "bytes",
- "futures-core",
- "futures-io",
- "futures-sink",
- "log",
- "pin-project-lite",
- "slab",
- "tokio",
+ "tokio-util",
]
[[package]]
@@ -4911,8 +4784,12 @@ checksum = "cc463cd8deddc3770d20f9852143d50bf6094e640b485cb2e189a2099085ff45"
dependencies = [
"bytes",
"futures-core",
+ "futures-io",
"futures-sink",
+ "futures-util",
+ "hashbrown",
"pin-project-lite",
+ "slab",
"tokio",
"tracing",
]
@@ -4923,7 +4800,7 @@ version = "0.5.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7"
dependencies = [
- "serde 1.0.137",
+ "serde 1.0.139",
]
[[package]]
@@ -4946,9 +4823,9 @@ dependencies = [
[[package]]
name = "tracing-attributes"
-version = "0.1.21"
+version = "0.1.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cc6b8ad3567499f98a1db7a752b07a7c8c7c7c34c332ec00effb2b0027974b7c"
+checksum = "11c75893af559bc8e10716548bdef5cb2b983f8e637db9d0e15126b61b484ee2"
dependencies = [
"proc-macro2",
"quote",
@@ -4994,9 +4871,8 @@ dependencies = [
[[package]]
name = "trayicon"
-version = "0.1.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c367fd7cdcdf19234aa104f7e03abe1be526018e4282af9f275bf436b9c9ad23"
+version = "0.1.3-1"
+source = "git+https://github.com/open-trade/trayicon-rs#8d9c4489287752cc5be4a35c103198f7111112f9"
dependencies = [
"winapi 0.3.9",
"winit",
@@ -5008,12 +4884,6 @@ version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642"
-[[package]]
-name = "ttf-parser"
-version = "0.6.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3e5d7cd7ab3e47dda6e56542f4bbf3824c15234958c6e1bd6aaa347e93499fdc"
-
[[package]]
name = "typenum"
version = "1.15.0"
@@ -5022,9 +4892,9 @@ checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987"
[[package]]
name = "ucd-trie"
-version = "0.1.3"
+version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c"
+checksum = "89570599c4fe5585de2b388aab47e99f7fa4e9238a1399f707a02e356058141c"
[[package]]
name = "unicode-bidi"
@@ -5034,15 +4904,15 @@ checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992"
[[package]]
name = "unicode-ident"
-version = "1.0.1"
+version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c"
+checksum = "15c61ba63f9235225a22310255a29b806b907c9b8c964bcbd0a2c70f3f2deea7"
[[package]]
name = "unicode-normalization"
-version = "0.1.20"
+version = "0.1.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "81dee68f85cab8cf68dec42158baf3a79a1cdc065a8b103025965d6ccb7f6cbd"
+checksum = "854cbdc4f7bc6ae19c820d44abdc3277ac3e1b2b93db20a636825d9322fb60e6"
dependencies = [
"tinyvec",
]
@@ -5123,7 +4993,7 @@ dependencies = [
"cc",
"hbb_common",
"lazy_static",
- "serde 1.0.137",
+ "serde 1.0.139",
"serde_derive",
"thiserror",
]
@@ -5229,14 +5099,14 @@ checksum = "6a89911bd99e5f3659ec4acf9c4d93b0a90fe4a2a11f15328472058edc5261be"
[[package]]
name = "wayland-client"
-version = "0.28.6"
+version = "0.29.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e3ab332350e502f159382201394a78e3cc12d0f04db863429260164ea40e0355"
+checksum = "91223460e73257f697d9e23d401279123d36039a3f7a449e983f123292d4458f"
dependencies = [
"bitflags",
"downcast-rs",
"libc",
- "nix 0.20.0",
+ "nix 0.22.3",
"scoped-tls",
"wayland-commons",
"wayland-scanner",
@@ -5245,11 +5115,11 @@ dependencies = [
[[package]]
name = "wayland-commons"
-version = "0.28.6"
+version = "0.29.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a21817947c7011bbd0a27e11b17b337bfd022e8544b071a2641232047966fbda"
+checksum = "94f6e5e340d7c13490eca867898c4cec5af56c27a5ffe5c80c6fc4708e22d33e"
dependencies = [
- "nix 0.20.0",
+ "nix 0.22.3",
"once_cell",
"smallvec",
"wayland-sys",
@@ -5257,20 +5127,20 @@ dependencies = [
[[package]]
name = "wayland-cursor"
-version = "0.28.6"
+version = "0.29.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "be610084edd1586d45e7bdd275fe345c7c1873598caa464c4fb835dee70fa65a"
+checksum = "c52758f13d5e7861fc83d942d3d99bf270c83269575e52ac29e5b73cb956a6bd"
dependencies = [
- "nix 0.20.0",
+ "nix 0.22.3",
"wayland-client",
"xcursor",
]
[[package]]
name = "wayland-protocols"
-version = "0.28.6"
+version = "0.29.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "286620ea4d803bacf61fa087a4242ee316693099ee5a140796aaba02b29f861f"
+checksum = "60147ae23303402e41fe034f74fb2c35ad0780ee88a1c40ac09a3be1e7465741"
dependencies = [
"bitflags",
"wayland-client",
@@ -5280,9 +5150,9 @@ dependencies = [
[[package]]
name = "wayland-scanner"
-version = "0.28.6"
+version = "0.29.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ce923eb2deb61de332d1f356ec7b6bf37094dc5573952e1c8936db03b54c03f1"
+checksum = "39a1ed3143f7a143187156a2ab52742e89dac33245ba505c17224df48939f9e0"
dependencies = [
"proc-macro2",
"quote",
@@ -5291,11 +5161,11 @@ dependencies = [
[[package]]
name = "wayland-sys"
-version = "0.28.6"
+version = "0.29.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d841fca9aed7febf9bed2e9796c49bf58d4152ceda8ac949ebe00868d8f0feb8"
+checksum = "d9341df79a8975679188e37dab3889bfa57c44ac2cb6da166f519a81cbe452d4"
dependencies = [
- "dlib 0.5.0",
+ "dlib",
"lazy_static",
"pkg-config",
]
@@ -5340,18 +5210,18 @@ dependencies = [
[[package]]
name = "webpki-roots"
-version = "0.22.3"
+version = "0.22.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "44d8de8415c823c8abd270ad483c6feeac771fad964890779f9a8cb24fbbc1bf"
+checksum = "f1c760f0d366a6c24a02ed7816e23e691f5d92291f94d15e836006fd11b04daf"
dependencies = [
"webpki",
]
[[package]]
name = "weezl"
-version = "0.1.6"
+version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9c97e489d8f836838d497091de568cf16b117486d529ec5579233521065bd5e4"
+checksum = "9193164d4de03a926d909d3bc7c30543cecb35400c02114792c2cae20d5e2dbb"
[[package]]
name = "wepoll-ffi"
@@ -5451,6 +5321,19 @@ version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+[[package]]
+name = "windows"
+version = "0.30.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b749ebd2304aa012c5992d11a25d07b406bdbe5f79d371cb7a918ce501a19eb0"
+dependencies = [
+ "windows_aarch64_msvc 0.30.0",
+ "windows_i686_gnu 0.30.0",
+ "windows_i686_msvc 0.30.0",
+ "windows_x86_64_gnu 0.30.0",
+ "windows_x86_64_msvc 0.30.0",
+]
+
[[package]]
name = "windows-service"
version = "0.4.0"
@@ -5495,6 +5378,12 @@ version = "0.28.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "52695a41e536859d5308cc613b4a022261a274390b25bd29dfff4bf08505f3c2"
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.30.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "29277a4435d642f775f63c7d1faeb927adba532886ce0287bd985bffb16b6bca"
+
[[package]]
name = "windows_aarch64_msvc"
version = "0.36.1"
@@ -5507,6 +5396,12 @@ version = "0.28.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f54725ac23affef038fecb177de6c9bf065787c2f432f79e3c373da92f3e1d8a"
+[[package]]
+name = "windows_i686_gnu"
+version = "0.30.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1145e1989da93956c68d1864f32fb97c8f561a8f89a5125f6a2b7ea75524e4b8"
+
[[package]]
name = "windows_i686_gnu"
version = "0.36.1"
@@ -5519,6 +5414,12 @@ version = "0.28.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "51d5158a43cc43623c0729d1ad6647e62fa384a3d135fd15108d37c683461f64"
+[[package]]
+name = "windows_i686_msvc"
+version = "0.30.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4a09e3a0d4753b73019db171c1339cd4362c8c44baf1bcea336235e955954a6"
+
[[package]]
name = "windows_i686_msvc"
version = "0.36.1"
@@ -5531,6 +5432,12 @@ version = "0.28.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bc31f409f565611535130cfe7ee8e6655d3fa99c1c61013981e491921b5ce954"
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.30.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ca64fcb0220d58db4c119e050e7af03c69e6f4f415ef69ec1773d9aab422d5a"
+
[[package]]
name = "windows_x86_64_gnu"
version = "0.36.1"
@@ -5543,6 +5450,12 @@ version = "0.28.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3f2b8c7cbd3bfdddd9ab98769f9746a7fad1bca236554cd032b78d768bc0e89f"
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.30.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08cabc9f0066848fef4bc6a1c1668e6efce38b661d2aeec75d18d8617eebb5f1"
+
[[package]]
name = "windows_x86_64_msvc"
version = "0.36.1"
@@ -5551,9 +5464,9 @@ checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680"
[[package]]
name = "winit"
-version = "0.25.0"
+version = "0.26.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "79610794594d5e86be473ef7763f604f2159cbac8c94debd00df8fb41e86c2f8"
+checksum = "9b43cc931d58b99461188607efd7acb2a093e65fc621f54cad78517a6063e73a"
dependencies = [
"bitflags",
"cocoa 0.24.0",
@@ -5565,18 +5478,19 @@ dependencies = [
"lazy_static",
"libc",
"log",
- "mio 0.7.14",
- "mio-misc",
- "ndk 0.3.0",
- "ndk-glue 0.3.0",
+ "mio 0.8.4",
+ "ndk 0.5.0",
+ "ndk-glue 0.5.2",
"ndk-sys 0.2.2",
"objc",
"parking_lot 0.11.2",
"percent-encoding",
- "raw-window-handle 0.3.4",
- "scopeguard",
+ "raw-window-handle",
"smithay-client-toolkit",
+ "wasm-bindgen",
"wayland-client",
+ "wayland-protocols",
+ "web-sys",
"winapi 0.3.9",
"x11-dl",
]
@@ -5608,6 +5522,15 @@ dependencies = [
"toml",
]
+[[package]]
+name = "wol-rs"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d7f97e69b28b256ccfb02472c25057132e234aa8368fea3bb0268def564ce1f2"
+dependencies = [
+ "clap 3.2.12",
+]
+
[[package]]
name = "ws2_32-sys"
version = "0.2.1"
@@ -5660,15 +5583,6 @@ dependencies = [
"nom",
]
-[[package]]
-name = "xdg"
-version = "2.4.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0c4583db5cbd4c4c0303df2d15af80f0539db703fa1c68802d4cbbd2dd0f88f6"
-dependencies = [
- "dirs",
-]
-
[[package]]
name = "xml-rs"
version = "0.8.4"
diff --git a/Cargo.toml b/Cargo.toml
index 898d81da8..3656e8221 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -51,11 +51,13 @@ samplerate = { version = "0.2", optional = true }
async-trait = "0.1"
uuid = { version = "1.0", features = ["v4"] }
clap = "3.0"
-rpassword = "6.0"
+rpassword = "7.0"
base64 = "0.13"
-sysinfo = "0.23"
+sysinfo = "0.24"
num_cpus = "1.13"
bytes = "1.1"
+default-net = "0.11.0"
+wol-rs = "0.9.1"
[target.'cfg(not(target_os = "linux"))'.dependencies]
reqwest = { version = "0.11", features = ["json", "rustls-tls"], default-features=false }
@@ -77,9 +79,8 @@ arboard = "2.0"
[target.'cfg(target_os = "windows")'.dependencies]
#systray = { git = "https://github.com/open-trade/systray-rs" }
-trayicon = { version = "0.1", features = ["winit"] }
-# > 0.25 not work with trayicon
-winit = "0.25"
+trayicon = { git = "https://github.com/open-trade/trayicon-rs", features = ["winit"] }
+winit = "0.26"
winapi = { version = "0.3", features = ["winuser"] }
winreg = "0.10"
windows-service = "0.4"
@@ -102,10 +103,10 @@ async-process = "1.3"
[target.'cfg(target_os = "android")'.dependencies]
android_logger = "0.11"
-jni = "0.19.0"
+jni = "0.19"
[target.'cfg(any(target_os = "android", target_os = "ios"))'.dependencies]
-flutter_rust_bridge = "1.30.0"
+flutter_rust_bridge = "=1.30.0"
[workspace]
members = ["libs/scrap", "libs/hbb_common", "libs/enigo", "libs/clipboard", "libs/virtual_display", "libs/simple_rc"]
@@ -123,7 +124,7 @@ winapi = { version = "0.3", features = [ "winnt" ] }
cc = "1.0"
hbb_common = { path = "libs/hbb_common" }
simple_rc = { path = "libs/simple_rc", optional = true }
-flutter_rust_bridge_codegen = "1.30.0"
+flutter_rust_bridge_codegen = "=1.30.0"
[dev-dependencies]
hound = "3.4"
diff --git a/README-AR.md b/README-AR.md
index 055a654d2..636d2611e 100644
--- a/README-AR.md
+++ b/README-AR.md
@@ -5,7 +5,7 @@
Docker •
Structure •
Snapshot
- [česky] | [中文] | [Español] | [فارسی] | [Français] | [Deutsch] | [Polski] | [Indonesian] | [Suomi] | [മലയാളം] | [日本語] | [Nederlands] | [Italiano] | [Русский] | [Português (Brasil)] | [Esperanto] | [한국어] | [العربي]
+ [česky] | [中文] | | [Magyar] | [Español] | [فارسی] | [Français] | [Deutsch] | [Polski] | [Indonesian] | [Suomi] | [മലയാളം] | [日本語] | [Nederlands] | [Italiano] | [Русский] | [Português (Brasil)] | [Esperanto] | [한국어] | [العربي]
لغتك الأم, Doc و RustDesk UI, README نحن بحاجة إلى مساعدتك لترجمة هذا
diff --git a/README-CS.md b/README-CS.md
index 1dd5463a1..ac4567a0f 100644
--- a/README-CS.md
+++ b/README-CS.md
@@ -5,7 +5,7 @@
Docker •
Struktura •
Ukázky
- [中文] | [Español] | [فارسی] | [Français] | [Deutsch] | [Polski] | [Indonesian] | [Suomi] | [മലയാളം] | [日本語] | [Nederlands] | [Italiano] | [Русский] | [Português (Brasil)] | [Esperanto] | [한국어] | [العربي]
+ [česky] | [中文] | | [Magyar] | [Español] | [فارسی] | [Français] | [Deutsch] | [Polski] | [Indonesian] | [Suomi] | [മലയാളം] | [日本語] | [Nederlands] | [Italiano] | [Русский] | [Português (Brasil)] | [Esperanto] | [한국어] | [العربي]
Potřebujeme Vaši pomoc s překláním textů tohoto ČTIMNE, uživatelského rozhraní aplikace RustDesk a dokumentace k ní do vašeho jazyka
diff --git a/README-DE.md b/README-DE.md
index 3f770d226..0df001e3f 100644
--- a/README-DE.md
+++ b/README-DE.md
@@ -5,11 +5,11 @@
Docker •
Dateistruktur •
Screenshots
- [中文] | [Español] | [فارسی] | [Français] | [Deutsch] | [Polski] | [Suomi] | [മലയാളം] | [日本語] | [Nederlands] | [Italiano] | [Русский] | [Português (Brasil)] | [Esperanto] | [한국어] | [العربي]
+ [česky] | [中文] | | [Magyar] | [Español] | [فارسی] | [Français] | [Deutsch] | [Polski] | [Indonesian] | [Suomi] | [മലയാളം] | [日本語] | [Nederlands] | [Italiano] | [Русский] | [Português (Brasil)] | [Esperanto] | [한국어] | [العربي]
Wir brauchen deine Hilfe um diese README Datei zu verbessern und aktualisieren
-Rede mit uns: [Discord](https://discord.gg/nDceKgxnkV) | [Reddit](https://www.reddit.com/r/rustdesk)
+Rede mit uns: [Discord](https://discord.gg/nDceKgxnkV) | [Twitter](https://twitter.com/rustdesk) | [Reddit](https://www.reddit.com/r/rustdesk)
[](https://ko-fi.com/I2I04VU09)
diff --git a/README-EO.md b/README-EO.md
index 21a4f9521..b532aa4de 100644
--- a/README-EO.md
+++ b/README-EO.md
@@ -5,11 +5,11 @@
Docker •
Strukturo •
Ekrankopio
- [中文] | [Español] | [فارسی] | [Français] | [Deutsch] | [Polski] | [Suomi] | [മലയാളം] | [日本語] | [Nederlands] | [Italiano] | [Русский] | [Português (Brasil)] | [Esperanto] | [한국어] | [العربي]
+ [česky] | [中文] | | [Magyar] | [Español] | [فارسی] | [Français] | [Deutsch] | [Polski] | [Indonesian] | [Suomi] | [മലയാളം] | [日本語] | [Nederlands] | [Italiano] | [Русский] | [Português (Brasil)] | [Esperanto] | [한국어] | [العربي]
Ni bezonas helpon traduki tiun README kaj la interfacon al via denaska lingvo
-Babili kun ni: [Discord](https://discord.gg/nDceKgxnkV) | [Reddit](https://www.reddit.com/r/rustdesk)
+Babili kun ni: [Discord](https://discord.gg/nDceKgxnkV) | [Twitter](https://twitter.com/rustdesk) | [Reddit](https://www.reddit.com/r/rustdesk)
[](https://ko-fi.com/I2I04VU09)
diff --git a/README-ES.md b/README-ES.md
index ce8601fa0..3d8f019a4 100644
--- a/README-ES.md
+++ b/README-ES.md
@@ -5,7 +5,7 @@
Docker •
Estructura •
Captura de pantalla
- [česky] | [中文] | [Español] | [فارسی] | [Français] | [Deutsch] | [Polski] | [Indonesian] | [Suomi] | [മലയാളം] | [日本語] | [Nederlands] | [Italiano] | [Русский] | [Português (Brasil)] | [Esperanto] | [한국어] | [العربي]
+ [česky] | [中文] | | [Magyar] | [Español] | [فارسی] | [Français] | [Deutsch] | [Polski] | [Indonesian] | [Suomi] | [മലയാളം] | [日本語] | [Nederlands] | [Italiano] | [Русский] | [Português (Brasil)] | [Esperanto] | [한국어] | [العربي]
Necesitamos tu ayuda para traducir este README a tu idioma
diff --git a/README-FA.md b/README-FA.md
index 0f7ca1a95..0aac205a8 100644
--- a/README-FA.md
+++ b/README-FA.md
@@ -5,11 +5,11 @@
داکر •
ساخت •
سرور
- [česky] | [中文] | [Español] | [فارسی] | [Français] | [Deutsch] | [Polski] | [Indonesian] | [Suomi] | [മലയാളം] | [日本語] | [Nederlands] | [Italiano] | [Русский] | [Português (Brasil)] | [Esperanto] | [한국어] | [العربي]
+ [česky] | [中文] | | [Magyar] | [Español] | [فارسی] | [Français] | [Deutsch] | [Polski] | [Indonesian] | [Suomi] | [മലയാളം] | [日本語] | [Nederlands] | [Italiano] | [Русский] | [Português (Brasil)] | [Esperanto] | [한국어] | [العربي]
برای ترجمه این RustDesk UI ،README و Doc به زبان مادری شما به کمکتون نیاز داریم
-با ما گپ بزنید: [Reddit](https://www.reddit.com/r/rustdesk) | [Twitter](https://twitter.com/rustdesk) | [Discord](https://discord.gg/nDceKgxnkV)
+با ما گپ بزنید: [Reddit](https://www.reddit.com/r/rustdesk) | [Twitter](https://twitter.com/rustdesk) | [Discord](https://discord.gg/nDceKgxnkV)
[](https://ko-fi.com/I2I04VU09)
diff --git a/README-FI.md b/README-FI.md
index a2d7534e0..ca846007f 100644
--- a/README-FI.md
+++ b/README-FI.md
@@ -5,11 +5,11 @@
Docker •
Rakenne •
Tilannevedos
- [中文] | [Español] | [فارسی] | [Français] | [Deutsch] | [Polski] | [Suomi] | [മലയാളം] | [日本語] | [Nederlands] | [Italiano] | [Русский] | [Português (Brasil)] | [Esperanto] | [한국어] | [العربي]
+ [česky] | [中文] | | [Magyar] | [Español] | [فارسی] | [Français] | [Deutsch] | [Polski] | [Indonesian] | [Suomi] | [മലയാളം] | [日本語] | [Nederlands] | [Italiano] | [Русский] | [Português (Brasil)] | [Esperanto] | [한국어] | [العربي]
Tarvitsemme apua tämän README-tiedoston kääntämiseksi äidinkielellesi
-Juttele meidän kanssa: [Discord](https://discord.gg/nDceKgxnkV) | [Reddit](https://www.reddit.com/r/rustdesk)
+Juttele meidän kanssa: [Discord](https://discord.gg/nDceKgxnkV) | [Twitter](https://twitter.com/rustdesk) | [Reddit](https://www.reddit.com/r/rustdesk)
[](https://ko-fi.com/I2I04VU09)
diff --git a/README-FR.md b/README-FR.md
index b1f8e3670..5d421b97d 100644
--- a/README-FR.md
+++ b/README-FR.md
@@ -5,11 +5,11 @@
Docker -
Structure -
Images
- [中文] | [Español] | [فارسی] | [Français] | [Deutsch] | [Polski] | [Suomi] | [മലയാളം] | [日本語] | [Nederlands] | [Italiano] | [Русский] | [Português (Brasil)] | [Esperanto] | [한국어] | [العربي]
+ [česky] | [中文] | | [Magyar] | [Español] | [فارسی] | [Français] | [Deutsch] | [Polski] | [Indonesian] | [Suomi] | [മലയാളം] | [日本語] | [Nederlands] | [Italiano] | [Русский] | [Português (Brasil)] | [Esperanto] | [한국어] | [العربي]
Nous avons besoin de votre aide pour traduire ce README dans votre langue maternelle.
-Chattez avec nous : [Discord](https://discord.gg/nDceKgxnkV) | [Reddit](https://www.reddit.com/r/rustdesk)
+Chattez avec nous : [Discord](https://discord.gg/nDceKgxnkV) | [Twitter](https://twitter.com/rustdesk) | [Reddit](https://www.reddit.com/r/rustdesk)
[](https://ko-fi.com/I2I04VU09)
diff --git a/README-HU.md b/README-HU.md
new file mode 100644
index 000000000..eeeaaa37d
--- /dev/null
+++ b/README-HU.md
@@ -0,0 +1,182 @@
+
+ 
+ Szerverek •
+ Építés •
+ Docker •
+ Struktúra •
+ Képernyőképek
+ [česky] | [中文] | | [Magyar] | [Español] | [فارسی] | [Français] | [Deutsch] | [Polski] | [Indonesian] | [Suomi] | [മലയാളം] | [日本語] | [Nederlands] | [Italiano] | [Русский] | [Português (Brasil)] | [Esperanto] | [한국어] | [العربي]
+ Kell a segítséged, hogy lefordítsuk ezt a README-t, a RustDesk UI-t és a Dokumentációt az anyanyelvedre
+
+
+Beszélgess velünk: [Discord](https://discord.gg/nDceKgxnkV) | [Twitter](https://twitter.com/rustdesk) | [Reddit](https://www.reddit.com/r/rustdesk)
+
+[](https://ko-fi.com/I2I04VU09)
+
+A RustDesk egy távoli elérésű asztali szoftver, Rust-ban írva. Működik mindenféle konfiguráció nélkül, feltelepítéssel, vagy anélkül. Az adataidat teljesen te kezeled, nincs szükség aggódásra a harmadik felek miatt. Használhatod a RustDesk punblikus randevú/relay szervereit, [hostolhatsz sajátot](https://rustdesk.com/server), vagy akár [írhatsz is egyet](https://github.com/rustdesk/rustdesk-server-demo).
+
+
+
+A RustDesk szívesen fogad minden contributiont, támogatást mindenkitől. Lásd a [`CONTRIBUTING.md`](CONTRIBUTING.md) fájlt a kezdéshez.
+
+[**Hogyan működik a RustDesk?**](https://github.com/rustdesk/rustdesk/wiki/How-does-RustDesk-work%3F)
+
+[**BINARY LELTÖLTÉS**](https://github.com/rustdesk/rustdesk/releases)
+
+[
](https://f-droid.org/en/packages/com.carriez.flutter_hbb)
+
+## Ingyenes publikus szerverek
+
+Ezalatt az üzenet alatt találhatóak azok a publikus szerverek, amelyeket ingyen használhatsz. Ezek a szerverek változhatnak a jövőben, illetve a hálózatuk lehet hogy lassú lehet.
+| Hely | Host | Specifikáció |
+| --------- | ------------- | ------------------ |
+| Seoul | AWS lightsail | 1 VCPU / 0.5GB RAM |
+| Singapore | Vultr | 1 VCPU / 1GB RAM |
+| Dallas | Vultr | 1 VCPU / 1GB RAM | |
+
+## Dependencies
+
+Az asztali verziók [sciter](https://sciter.com/)-t használnak a GUI-hoz, kérlek telepítsd a dynamikus könyvtárat magad.
+
+[Windows](https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.win/x64/sciter.dll) |
+[Linux](https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.lnx/x64/libsciter-gtk.so) |
+[MacOS](https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.osx/libsciter.dylib)
+
+A telefonos verziók Flutter-t hasznának. Később lehetséges hogy Sciterről Flutterre migrálunk az asztali verziókban is.
+
+## Építési pontok
+
+- Készítsd elő a Rust, C++ fejlesztői környezetet (env)
+
+- Telepítsd a [vcpkg](https://github.com/microsoft/vcpkg)-t, és állítsd be a `VCPKG_ROOT` környezeti változót helyesen
+
+ - Windows: vcpkg install libvpx:x64-windows-static libyuv:x64-windows-static opus:x64-windows-static
+ - Linux/MacOS: vcpkg install libvpx libyuv opus
+
+- Futtasd a `cargo run` parancsot
+
+## [Építés](https://rustdesk.com/docs/hu/dev/build/)
+
+## Hogyan építs Linuxon
+
+### Ubuntu 18 (Debian 10)
+
+```sh
+sudo apt install -y g++ gcc git curl wget nasm yasm libgtk-3-dev clang libxcb-randr0-dev libxdo-dev libxfixes-dev libxcb-shape0-dev libxcb-xfixes0-dev libasound2-dev libpulse-dev cmake
+```
+
+### Fedora 28 (CentOS 8)
+
+```sh
+sudo yum -y install gcc-c++ git curl wget nasm yasm gcc gtk3-devel clang libxcb-devel libxdo-devel libXfixes-devel pulseaudio-libs-devel cmake alsa-lib-devel
+```
+
+### Arch (Manjaro)
+
+```sh
+sudo pacman -Syu --needed unzip git cmake gcc curl wget yasm nasm zip make pkg-config clang gtk3 xdotool libxcb libxfixes alsa-lib pulseaudio
+```
+
+### Telepítsd a pynput csomagot
+
+```sh
+pip3 install pynput
+```
+
+### Telepítsd a vcpkg-t
+
+```sh
+git clone https://github.com/microsoft/vcpkg
+cd vcpkg
+git checkout 2021.12.01
+cd ..
+vcpkg/bootstrap-vcpkg.sh
+export VCPKG_ROOT=$HOME/vcpkg
+vcpkg/vcpkg install libvpx libyuv opus
+```
+
+### Fixeld a libvpx-t (Fedora-n csak)
+
+```sh
+cd vcpkg/buildtrees/libvpx/src
+cd *
+./configure
+sed -i 's/CFLAGS+=-I/CFLAGS+=-fPIC -I/g' Makefile
+sed -i 's/CXXFLAGS+=-I/CXXFLAGS+=-fPIC -I/g' Makefile
+make
+cp libvpx.a $HOME/vcpkg/installed/x64-linux/lib/
+cd
+```
+
+### Építés
+
+```sh
+curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
+source $HOME/.cargo/env
+git clone https://github.com/rustdesk/rustdesk
+cd rustdesk
+mkdir -p target/debug
+wget https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.lnx/x64/libsciter-gtk.so
+mv libsciter-gtk.so target/debug
+VCPKG_ROOT=$HOME/vcpkg cargo run
+```
+
+### Válts Wayland-ról X11-re (Xorg)
+
+A RustDesk nem támogatja a Waylendet. [Itt](https://docs.fedoraproject.org/en-US/quick-docs/configuring-xorg-as-default-gnome-session/) található egy tutorial amelynek segítségével beállíthatod a Xorg-ot mint alap GNOME session.
+
+## Hogyan építs Dockerrel
+
+Kezdjünk a repo clónozásával, majd pedig a Docker container megépítésével:
+
+```sh
+git clone https://github.com/rustdesk/rustdesk
+cd rustdesk
+docker build -t "rustdesk-builder" .
+```
+
+Ezután, minden egyes alkalommal amikor meg kell építened a RustDesk-et, futtasd a kövezkező parancsot:
+
+```sh
+docker run --rm -it -v $PWD:/home/user/rustdesk -v rustdesk-git-cache:/home/user/.cargo/git -v rustdesk-registry-cache:/home/user/.cargo/registry -e PUID="$(id -u)" -e PGID="$(id -g)" rustdesk-builder
+```
+
+Fontos, hogy az első építés lehet hogy több ideig fog tartani mint a következőek, mivel a dependenciek még nincsenek cachelve. Emelett, ha esetleg szeretnél valamilyen argumentumot hozzáadni az építő parancshoz, akkor megteheted a paracssor végén, a `` argumentum használatával. Például ha egy optimalizált release éptést szeretnél megépíteni, akkor add hozzá a fenti parancsorhoz a `--release` opciót. A futtatható binary elérhető lesz a target mappában a rendszereden, futtatni a következőképpen tudod:
+
+```sh
+target/debug/rustdesk
+```
+
+Vagy ha release binary, akkor:
+
+```sh
+target/release/rustdesk
+```
+
+Kérlek mindenképpen nézd meg hogy ezeket a parancsokat a root RustDesk mappában futtatod e, különben a RustDesk lehet hogy nem fogja megtalálni az építéshez szükséges elemeket. Fontos az is, hogy jelenleg más cargo subparancsok, például `install`vagy `run` nem támogatottak, mivel egy Dockeres építés esetén elindítanák a programot a containeren belül.
+
+
+## Fájl Struktúra
+
+- **[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
+- **[src/ui](https://github.com/rustdesk/rustdesk/tree/master/src/ui)**: GUI
+- **[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
+- **[src/rendezvous_mediator.rs](https://github.com/rustdesk/rustdesk/tree/master/src/rendezvous_mediator.rs)**: Communicate with [rustdesk-server](https://github.com/rustdesk/rustdesk-server), wait for remote direct (TCP hole punching) or relayed connection
+- **[src/platform](https://github.com/rustdesk/rustdesk/tree/master/src/platform)**: platform specific code
+- **[flutter](https://github.com/rustdesk/rustdesk/tree/master/flutter)**: Flutter code for mobile
+- **[flutter/web/js](https://github.com/rustdesk/rustdesk/tree/master/flutter/web/js)**: Javascript for Flutter web client
+
+## Képernyőképek
+
+
+
+
+
+
+
+
diff --git a/README-ID.md b/README-ID.md
index 624336f45..6dc00f6fd 100644
--- a/README-ID.md
+++ b/README-ID.md
@@ -5,11 +5,11 @@
Docker •
Structure •
Snapshot
- [中文] | [Español] | [فارسی] | [Français] | [Deutsch] | [Polski] | [Indonesian] | [Suomi] | [മലയാളം] | [日本語] | [Nederlands] | [Italiano] | [Русский] | [Português (Brasil)] | [Esperanto] | [한국어] | [العربي]
+ [česky] | [中文] | | [Magyar] | [Español] | [فارسی] | [Français] | [Deutsch] | [Polski] | [Indonesian] | [Suomi] | [മലയാളം] | [日本語] | [Nederlands] | [Italiano] | [Русский] | [Português (Brasil)] | [Esperanto] | [한국어] | [العربي]
Kami membutuhkan bantuan Anda untuk menerjemahkan README ini dan RustDesk UI ke bahasa asli anda
-Birbincang bersama kami: [Discord](https://discord.gg/nDceKgxnkV) | [Reddit](https://www.reddit.com/r/rustdesk)
+Birbincang bersama kami: [Discord](https://discord.gg/nDceKgxnkV) | [Twitter](https://twitter.com/rustdesk) | [Reddit](https://www.reddit.com/r/rustdesk)
[](https://ko-fi.com/I2I04VU09)
diff --git a/README-IT.md b/README-IT.md
index 7eba7860a..6d3aaf5ee 100644
--- a/README-IT.md
+++ b/README-IT.md
@@ -5,11 +5,11 @@
Docker •
Struttura •
Screenshots
- [中文] | [Español] | [فارسی] | [Français] | [Deutsch] | [Polski] | [Suomi] | [മലയാളം] | [日本語] | [Nederlands] | [Italiano] | [Русский] | [Português (Brasil)] | [Esperanto] | [한국어] | [العربي]
+ [česky] | [中文] | | [Magyar] | [Español] | [فارسی] | [Français] | [Deutsch] | [Polski] | [Indonesian] | [Suomi] | [മലയാളം] | [日本語] | [Nederlands] | [Italiano] | [Русский] | [Português (Brasil)] | [Esperanto] | [한국어] | [العربي]
Abbiamo bisogno del tuo aiuto per tradurre questo README e la RustDesk UI nella tua lingua nativa
-Chatta con noi: [Discord](https://discord.gg/nDceKgxnkV) | [Reddit](https://www.reddit.com/r/rustdesk)
+Chatta con noi: [Discord](https://discord.gg/nDceKgxnkV) | [Twitter](https://twitter.com/rustdesk) | [Reddit](https://www.reddit.com/r/rustdesk)
[](https://ko-fi.com/I2I04VU09)
diff --git a/README-JP.md b/README-JP.md
index 60816a5d5..a912d3cf3 100644
--- a/README-JP.md
+++ b/README-JP.md
@@ -5,7 +5,7 @@
Docker •
Structure •
Snapshot
- [中文] | [Español] | [فارسی] | [Français] | [Deutsch] | [Polski] | [Indonesian] | [Suomi] | [മലയാളം] | [日本語] | [Nederlands] | [Italiano] | [Русский] | [Português (Brasil)] | [Esperanto] | [한국어] | [العربي]
+ [česky] | [中文] | | [Magyar] | [Español] | [فارسی] | [Français] | [Deutsch] | [Polski] | [Indonesian] | [Suomi] | [മലയാളം] | [日本語] | [Nederlands] | [Italiano] | [Русский] | [Português (Brasil)] | [Esperanto] | [한국어] | [العربي]
このREADMEをあなたの母国語に翻訳するために、あなたの助けが必要です。
diff --git a/README-KR.md b/README-KR.md
index 750cf91bd..11eed8ab2 100644
--- a/README-KR.md
+++ b/README-KR.md
@@ -5,7 +5,7 @@
Docker •
Structure •
Snapshot
- [中文] | [Español] | [فارسی] | [Français] | [Deutsch] | [Polski] | [Indonesian] | [Suomi] | [മലയാളം] | [日本語] | [Nederlands] | [Italiano] | [Русский] | [Português (Brasil)] | [Esperanto] | [한국어] | [العربي]
+ [česky] | [中文] | | [Magyar] | [Español] | [فارسی] | [Français] | [Deutsch] | [Polski] | [Indonesian] | [Suomi] | [മലയാളം] | [日本語] | [Nederlands] | [Italiano] | [Русский] | [Português (Brasil)] | [Esperanto] | [한국어] | [العربي]
README를 모국어로 번역하기 위한 당신의 도움의 필요합니다.
diff --git a/README-ML.md b/README-ML.md
index c479d0496..d72d14c02 100644
--- a/README-ML.md
+++ b/README-ML.md
@@ -5,11 +5,11 @@
Docker •
Structure •
Snapshot
- [中文] | [Español] | [فارسی] | [Français] | [Deutsch] | [Polski] | [Suomi] | [മലയാളം] | [日本語] | [Nederlands] | [Italiano] | [Русский] | [Português (Brasil)] | [Esperanto] | [한국어] | [العربي]
+ [česky] | [中文] | | [Magyar] | [Español] | [فارسی] | [Français] | [Deutsch] | [Polski] | [Indonesian] | [Suomi] | [മലയാളം] | [日本語] | [Nederlands] | [Italiano] | [Русский] | [Português (Brasil)] | [Esperanto] | [한국어] | [العربي]
ഈ README നിങ്ങളുടെ മാതൃഭാഷയിലേക്ക് വിവർത്തനം ചെയ്യാൻ ഞങ്ങൾക്ക് നിങ്ങളുടെ സഹായം ആവശ്യമാണ്
-ഞങ്ങളുമായി ചാറ്റ് ചെയ്യുക: [Discord](https://discord.gg/nDceKgxnkV) | [Reddit](https://www.reddit.com/r/rustdesk)
+ഞങ്ങളുമായി ചാറ്റ് ചെയ്യുക: [Discord](https://discord.gg/nDceKgxnkV) | [Twitter](https://twitter.com/rustdesk) | [Reddit](https://www.reddit.com/r/rustdesk)
[](https://ko-fi.com/I2I04VU09)
diff --git a/README-NL.md b/README-NL.md
index 2d87504db..cce863b6d 100644
--- a/README-NL.md
+++ b/README-NL.md
@@ -5,11 +5,11 @@
Docker •
Structuur •
Snapshot
- [中文] | [Español] | [فارسی] | [Français] | [Deutsch] | [Polski] | [Suomi] | [മലയാളം] | [日本語] | [Nederlands] | [Italiano] | [Русский] | [Português (Brasil)] | [Esperanto] | [한국어] | [العربي]
+ [česky] | [中文] | | [Magyar] | [Español] | [فارسی] | [Français] | [Deutsch] | [Polski] | [Indonesian] | [Suomi] | [മലയാളം] | [日本語] | [Nederlands] | [Italiano] | [Русский] | [Português (Brasil)] | [Esperanto] | [한국어] | [العربي]
We hebben je hulp nodig om deze README te vertalen naar jouw moedertaal
-Praat met ons: [Discord](https://discord.gg/nDceKgxnkV) | [Reddit](https://www.reddit.com/r/rustdesk)
+Praat met ons: [Discord](https://discord.gg/nDceKgxnkV) | [Twitter](https://twitter.com/rustdesk) | [Reddit](https://www.reddit.com/r/rustdesk)
[](https://ko-fi.com/I2I04VU09)
diff --git a/README-PL.md b/README-PL.md
index 162ca7648..d21461fee 100644
--- a/README-PL.md
+++ b/README-PL.md
@@ -5,11 +5,11 @@
Docker •
Struktura •
Snapshot
- [中文] | [Español] | [فارسی] | [Français] | [Deutsch] | [Polski] | [Suomi] | [മലയാളം] | [日本語] | [Nederlands] | [Italiano] | [Русский] | [Português (Brasil)] | [Esperanto] | [한국어] | [العربي]
+ [česky] | [中文] | | [Magyar] | [Español] | [فارسی] | [Français] | [Deutsch] | [Polski] | [Indonesian] | [Suomi] | [മലയാളം] | [日本語] | [Nederlands] | [Italiano] | [Русский] | [Português (Brasil)] | [Esperanto] | [한국어] | [العربي]
Potrzebujemy twojej pomocy w tłumaczeniu README na twój ojczysty język
-Porozmawiaj z nami na: [Discord](https://discord.gg/nDceKgxnkV) | [Reddit](https://www.reddit.com/r/rustdesk)
+Porozmawiaj z nami na: [Discord](https://discord.gg/nDceKgxnkV) | [Twitter](https://twitter.com/rustdesk) | [Reddit](https://www.reddit.com/r/rustdesk)
[](https://ko-fi.com/I2I04VU09)
diff --git a/README-PTBR.md b/README-PTBR.md
index 76b360283..11986df55 100644
--- a/README-PTBR.md
+++ b/README-PTBR.md
@@ -5,11 +5,11 @@
Docker •
Estrutura •
Screenshots
- [中文] | [Español] | [فارسی] | [Français] | [Deutsch] | [Polski] | [Suomi] | [മലയാളം] | [日本語] | [Nederlands] | [Italiano] | [Русский] | [Português (Brasil)] | [Esperanto] | [한국어] | [العربي]
+ [česky] | [中文] | | [Magyar] | [Español] | [فارسی] | [Français] | [Deutsch] | [Polski] | [Indonesian] | [Suomi] | [മലയാളം] | [日本語] | [Nederlands] | [Italiano] | [Русский] | [Português (Brasil)] | [Esperanto] | [한국어] | [العربي]
Precisamos de sua ajuda para traduzir este README e a UI do RustDesk para sua língua nativa
-Converse conosco: [Discord](https://discord.gg/nDceKgxnkV) | [Reddit](https://www.reddit.com/r/rustdesk)
+Converse conosco: [Discord](https://discord.gg/nDceKgxnkV) | [Twitter](https://twitter.com/rustdesk) | [Reddit](https://www.reddit.com/r/rustdesk)
[](https://ko-fi.com/I2I04VU09)
diff --git a/README-RU.md b/README-RU.md
index 755d91ca3..3b01b8749 100644
--- a/README-RU.md
+++ b/README-RU.md
@@ -5,7 +5,7 @@
Docker •
Structure •
Snapshot
- [中文] | [Español] | [فارسی] | [Français] | [Deutsch] | [Polski] | [Suomi] | [മലയാളം] | [日本語] | [Nederlands] | [Italiano] | [Русский] | [Português (Brasil)] | [Esperanto] | [한국어] | [العربي]
+ [česky] | [中文] | | [Magyar] | [Español] | [فارسی] | [Français] | [Deutsch] | [Polski] | [Indonesian] | [Suomi] | [മലയാളം] | [日本語] | [Nederlands] | [Italiano] | [Русский] | [Português (Brasil)] | [Esperanto] | [한국어] | [العربي]
Нам нужна ваша помощь для перевода этого README и RustDesk UI на ваш родной язык
diff --git a/README-ZH.md b/README-ZH.md
index cd1a332c3..cce3841ee 100644
--- a/README-ZH.md
+++ b/README-ZH.md
@@ -5,7 +5,7 @@
Docker •
结构 •
截图
- [中文] | [Español] | [فارسی] | [Français] | [Deutsch] | [Polski] | [Suomi] | [മലയാളം] | [日本語] | [Nederlands] | [Italiano] | [Русский] | [Português (Brasil)] | [Esperanto] | [한국어] | [العربي]
+ [česky] | [中文] | | [Magyar] | [Español] | [فارسی] | [Français] | [Deutsch] | [Polski] | [Indonesian] | [Suomi] | [മലയാളം] | [日本語] | [Nederlands] | [Italiano] | [Русский] | [Português (Brasil)] | [Esperanto] | [한국어] | [العربي]
Chat with us: [知乎](https://www.zhihu.com/people/rustdesk) | [Discord](https://discord.gg/nDceKgxnkV) | [Reddit](https://www.reddit.com/r/rustdesk)
diff --git a/README.md b/README.md
index 2166073a7..c00212991 100644
--- a/README.md
+++ b/README.md
@@ -5,7 +5,7 @@
Docker •
Structure •
Snapshot
- [česky] | [中文] | [Español] | [فارسی] | [Français] | [Deutsch] | [Polski] | [Indonesian] | [Suomi] | [മലയാളം] | [日本語] | [Nederlands] | [Italiano] | [Русский] | [Português (Brasil)] | [Esperanto] | [한국어] | [العربي]
+ [česky] | [中文] | | [Magyar] | [Español] | [فارسی] | [Français] | [Deutsch] | [Polski] | [Indonesian] | [Suomi] | [മലയാളം] | [日本語] | [Nederlands] | [Italiano] | [Русский] | [Português (Brasil)] | [Esperanto] | [한국어] | [العربي]
We need your help to translate this README, RustDesk UI and Doc to your native language
diff --git a/flutter/android/app/src/main/AndroidManifest.xml b/flutter/android/app/src/main/AndroidManifest.xml
index 1759a1ac0..04b2ccc9a 100644
--- a/flutter/android/app/src/main/AndroidManifest.xml
+++ b/flutter/android/app/src/main/AndroidManifest.xml
@@ -3,6 +3,7 @@
package="com.carriez.flutter_hbb">
+
diff --git a/flutter/android/app/src/main/kotlin/com/carriez/flutter_hbb/InputService.kt b/flutter/android/app/src/main/kotlin/com/carriez/flutter_hbb/InputService.kt
index 76068eee5..905a2734d 100644
--- a/flutter/android/app/src/main/kotlin/com/carriez/flutter_hbb/InputService.kt
+++ b/flutter/android/app/src/main/kotlin/com/carriez/flutter_hbb/InputService.kt
@@ -8,14 +8,14 @@ package com.carriez.flutter_hbb
import android.accessibilityservice.AccessibilityService
import android.accessibilityservice.GestureDescription
-import android.content.Context
import android.graphics.Path
import android.os.Build
import android.util.Log
import android.view.accessibility.AccessibilityEvent
-import androidx.annotation.Keep
import androidx.annotation.RequiresApi
import java.util.*
+import kotlin.math.abs
+import kotlin.math.max
const val LIFT_DOWN = 9
const val LIFT_MOVE = 8
@@ -49,28 +49,40 @@ class InputService : AccessibilityService() {
private val wheelActionsQueue = LinkedList()
private var isWheelActionsPolling = false
+ private var isWaitingLongPress = false
@RequiresApi(Build.VERSION_CODES.N)
fun onMouseInput(mask: Int, _x: Int, _y: Int) {
- val x = if (_x < 0) {
- 0
- } else {
- _x
- }
-
- val y = if (_y < 0) {
- 0
- } else {
- _y
- }
+ val x = max(0, _x)
+ val y = max(0, _y)
if (mask == 0 || mask == LIFT_MOVE) {
+ val oldX = mouseX
+ val oldY = mouseY
mouseX = x * SCREEN_INFO.scale
mouseY = y * SCREEN_INFO.scale
+ if (isWaitingLongPress) {
+ val delta = abs(oldX - mouseX) + abs(oldY - mouseY)
+ Log.d(logTag,"delta:$delta")
+ if (delta > 8) {
+ isWaitingLongPress = false
+ }
+ }
}
// left button down ,was up
if (mask == LIFT_DOWN) {
+ isWaitingLongPress = true
+ timer.schedule(object : TimerTask() {
+ override fun run() {
+ if (isWaitingLongPress) {
+ isWaitingLongPress = false
+ leftIsDown = false
+ endGesture(mouseX, mouseY)
+ }
+ }
+ }, LONG_TAP_DELAY * 4)
+
leftIsDown = true
startGesture(mouseX, mouseY)
return
@@ -83,9 +95,12 @@ class InputService : AccessibilityService() {
// left up ,was down
if (mask == LIFT_UP) {
- leftIsDown = false
- endGesture(mouseX, mouseY)
- return
+ if (leftIsDown) {
+ leftIsDown = false
+ isWaitingLongPress = false
+ endGesture(mouseX, mouseY)
+ return
+ }
}
if (mask == RIGHT_UP) {
diff --git a/flutter/android/app/src/main/kotlin/com/carriez/flutter_hbb/MainActivity.kt b/flutter/android/app/src/main/kotlin/com/carriez/flutter_hbb/MainActivity.kt
index 3cc105bfa..fd340f7ed 100644
--- a/flutter/android/app/src/main/kotlin/com/carriez/flutter_hbb/MainActivity.kt
+++ b/flutter/android/app/src/main/kotlin/com/carriez/flutter_hbb/MainActivity.kt
@@ -192,7 +192,6 @@ class MainActivity : FlutterActivity() {
override fun onResume() {
super.onResume()
val inputPer = InputService.isOpen
- Log.d(logTag, "onResume inputPer:$inputPer")
activity.runOnUiThread {
flutterMethodChannel.invokeMethod(
"on_state_changed",
diff --git a/flutter/android/app/src/main/kotlin/com/carriez/flutter_hbb/common.kt b/flutter/android/app/src/main/kotlin/com/carriez/flutter_hbb/common.kt
index 7ce7d3ecc..4bf244a06 100644
--- a/flutter/android/app/src/main/kotlin/com/carriez/flutter_hbb/common.kt
+++ b/flutter/android/app/src/main/kotlin/com/carriez/flutter_hbb/common.kt
@@ -2,20 +2,26 @@ package com.carriez.flutter_hbb
import android.annotation.SuppressLint
import android.content.Context
+import android.content.Intent
import android.media.AudioRecord
import android.media.AudioRecord.READ_BLOCKING
import android.media.MediaCodecList
import android.media.MediaFormat
+import android.net.Uri
import android.os.Build
import android.os.Handler
import android.os.Looper
-import android.util.Log
+import android.os.PowerManager
+import android.provider.Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS
+import android.provider.Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
import androidx.annotation.RequiresApi
+import androidx.core.content.ContextCompat.getSystemService
import com.hjq.permissions.Permission
import com.hjq.permissions.XXPermissions
import java.nio.ByteBuffer
import java.util.*
+
@SuppressLint("ConstantLocale")
val LOCAL_NAME = Locale.getDefault().toString()
val SCREEN_INFO = Info(0, 0, 1, 200)
@@ -38,8 +44,31 @@ fun testVP9Support(): Boolean {
return res != null
}
+@RequiresApi(Build.VERSION_CODES.M)
fun requestPermission(context: Context, type: String) {
val permission = when (type) {
+ "ignore_battery_optimizations" -> {
+ try {
+ context.startActivity(Intent(ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS).apply {
+ data = Uri.parse("package:" + context.packageName)
+ })
+ } catch (e:Exception) {
+ e.printStackTrace()
+ }
+ return
+ }
+ "application_details_settings" -> {
+ try {
+ context.startActivity(Intent().apply {
+ addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+ action = "android.settings.APPLICATION_DETAILS_SETTINGS"
+ data = Uri.parse("package:" + context.packageName)
+ })
+ } catch (e:Exception) {
+ e.printStackTrace()
+ }
+ return
+ }
"audio" -> {
Permission.RECORD_AUDIO
}
@@ -52,7 +81,7 @@ fun requestPermission(context: Context, type: String) {
}
XXPermissions.with(context)
.permission(permission)
- .request { permissions, all ->
+ .request { _, all ->
if (all) {
Handler(Looper.getMainLooper()).post {
MainActivity.flutterMethodChannel.invokeMethod(
@@ -64,8 +93,13 @@ fun requestPermission(context: Context, type: String) {
}
}
+@RequiresApi(Build.VERSION_CODES.M)
fun checkPermission(context: Context, type: String): Boolean {
val permission = when (type) {
+ "ignore_battery_optimizations" -> {
+ val pw = context.getSystemService(Context.POWER_SERVICE) as PowerManager
+ return pw.isIgnoringBatteryOptimizations(context.packageName)
+ }
"audio" -> {
Permission.RECORD_AUDIO
}
diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart
index d6be51986..a7c5dfea0 100644
--- a/flutter/lib/common.dart
+++ b/flutter/lib/common.dart
@@ -260,7 +260,12 @@ class PermissionManager {
static Timer? _timer;
static var _current = "";
- static final permissions = ["audio", "file"];
+ static final permissions = [
+ "audio",
+ "file",
+ "ignore_battery_optimizations",
+ "application_details_settings"
+ ];
static bool isWaitingFile() {
if (_completer != null) {
@@ -279,9 +284,12 @@ class PermissionManager {
if (!permissions.contains(type))
return Future.error("Wrong permission!$type");
+ FFI.invokeMethod("request_permission", type);
+ if (type == "ignore_battery_optimizations") {
+ return Future.value(false);
+ }
_current = type;
_completer = Completer();
- FFI.invokeMethod("request_permission", type);
// timeout
_timer?.cancel();
diff --git a/flutter/lib/pages/remote_page.dart b/flutter/lib/pages/remote_page.dart
index c383bc361..7a3e489b0 100644
--- a/flutter/lib/pages/remote_page.dart
+++ b/flutter/lib/pages/remote_page.dart
@@ -262,7 +262,6 @@ class _RemotePageState extends State {
: SafeArea(child:
OrientationBuilder(builder: (ctx, orientation) {
if (_currentOrientation != orientation) {
- debugPrint("on orientation changed");
Timer(Duration(milliseconds: 200), () {
resetMobileActionsOverlay();
_currentOrientation = orientation;
@@ -1061,6 +1060,8 @@ void showOptions() {
getRadio('Optimize reaction time', 'low', quality, setQuality),
Divider(color: MyTheme.border),
getToggle(setState, 'show-remote-cursor', 'Show remote cursor'),
+ getToggle(
+ setState, 'show-quality-monitor', 'Show quality monitor'),
] +
more),
actions: [],
diff --git a/flutter/lib/pages/settings_page.dart b/flutter/lib/pages/settings_page.dart
index 2c8b7fe9a..30eb88b7b 100644
--- a/flutter/lib/pages/settings_page.dart
+++ b/flutter/lib/pages/settings_page.dart
@@ -1,3 +1,5 @@
+import 'dart:async';
+
import 'package:settings_ui/settings_ui.dart';
import 'package:flutter/material.dart';
import 'package:url_launcher/url_launcher.dart';
@@ -24,13 +26,100 @@ class SettingsPage extends StatefulWidget implements PageShape {
_SettingsState createState() => _SettingsState();
}
-class _SettingsState extends State {
+class _SettingsState extends State with WidgetsBindingObserver {
static const url = 'https://rustdesk.com/';
+ final _hasIgnoreBattery = androidVersion >= 26;
+ var _ignoreBatteryOpt = false;
+
+ @override
+ void initState() {
+ super.initState();
+ WidgetsBinding.instance.addObserver(this);
+ if (_hasIgnoreBattery) {
+ updateIgnoreBatteryStatus();
+ }
+ }
+
+ @override
+ void dispose() {
+ WidgetsBinding.instance.removeObserver(this);
+ super.dispose();
+ }
+
+ @override
+ void didChangeAppLifecycleState(AppLifecycleState state) {
+ if (state == AppLifecycleState.resumed) {
+ updateIgnoreBatteryStatus();
+ }
+ }
+
+ Future updateIgnoreBatteryStatus() async {
+ final res = await PermissionManager.check("ignore_battery_optimizations");
+ if (_ignoreBatteryOpt != res) {
+ setState(() {
+ _ignoreBatteryOpt = res;
+ });
+ return true;
+ } else {
+ return false;
+ }
+ }
@override
Widget build(BuildContext context) {
Provider.of(context);
final username = getUsername();
+ final enableAbr = FFI.getByName("option", "enable-abr") != 'N';
+ final enhancementsTiles = [
+ SettingsTile.switchTile(
+ title: Text(translate('Adaptive Bitrate') + '(beta)'),
+ initialValue: enableAbr,
+ onToggle: (v) {
+ final msg = Map()
+ ..["name"] = "enable-abr"
+ ..["value"] = "";
+ if (!v) {
+ msg["value"] = "N";
+ }
+ FFI.setByName("option", json.encode(msg));
+ setState(() {});
+ },
+ )
+ ];
+ if (_hasIgnoreBattery) {
+ enhancementsTiles.insert(
+ 0,
+ SettingsTile.switchTile(
+ initialValue: _ignoreBatteryOpt,
+ title: Text(translate('Keep RustDesk background service')),
+ description:
+ Text('* ${translate('Ignore Battery Optimizations')}'),
+ onToggle: (v) async {
+ if (v) {
+ PermissionManager.request("ignore_battery_optimizations");
+ } else {
+ final res = await DialogManager.show(
+ (setState, close) => CustomAlertDialog(
+ title: Text(translate("Open System Setting")),
+ content: Text(translate(
+ "android_open_battery_optimizations_tip")),
+ actions: [
+ TextButton(
+ onPressed: () => close(),
+ child: Text(translate("Cancel"))),
+ ElevatedButton(
+ onPressed: () => close(true),
+ child:
+ Text(translate("Open System Setting"))),
+ ],
+ ));
+ if (res == true) {
+ PermissionManager.request("application_details_settings");
+ }
+ }
+ }));
+ }
+
return SettingsList(
sections: [
SettingsSection(
@@ -51,17 +140,17 @@ class _SettingsState extends State {
),
],
),
- SettingsSection(
- title: Text(translate("Settings")),
- tiles: [
- SettingsTile.navigation(
+ SettingsSection(title: Text(translate("Settings")), tiles: [
+ SettingsTile.navigation(
title: Text(translate('ID/Relay Server')),
leading: Icon(Icons.cloud),
onPressed: (context) {
showServerSettings();
- },
- ),
- ],
+ })
+ ]),
+ SettingsSection(
+ title: Text(translate("Enhancements")),
+ tiles: enhancementsTiles,
),
SettingsSection(
title: Text(translate("About")),
diff --git a/libs/hbb_common/Cargo.toml b/libs/hbb_common/Cargo.toml
index 000cbae96..6fec67193 100644
--- a/libs/hbb_common/Cargo.toml
+++ b/libs/hbb_common/Cargo.toml
@@ -7,9 +7,9 @@ edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
-protobuf = { version = "3.1.0", features = ["with-bytes"] }
-tokio = { version = "1.15", features = ["full"] }
-tokio-util = { version = "0.6", features = ["full"] }
+protobuf = { version = "3.1", features = ["with-bytes"] }
+tokio = { version = "1.20", features = ["full"] }
+tokio-util = { version = "0.7", features = ["full"] }
futures = "0.3"
bytes = "1.1"
log = "0.4"
@@ -23,6 +23,7 @@ directories-next = "2.0"
rand = "0.8"
serde_derive = "1.0"
serde = "1.0"
+serde_with = "1.14.0"
lazy_static = "1.4"
confy = { git = "https://github.com/open-trade/confy" }
dirs-next = "2.0"
@@ -38,7 +39,7 @@ mac_address = "1.1"
quic = []
[build-dependencies]
-protobuf-codegen = { version = "3.1.0" }
+protobuf-codegen = { version = "3.1" }
[target.'cfg(target_os = "windows")'.dependencies]
winapi = { version = "0.3", features = ["winuser"] }
diff --git a/libs/hbb_common/src/config.rs b/libs/hbb_common/src/config.rs
index b4d8eaff3..340a725f8 100644
--- a/libs/hbb_common/src/config.rs
+++ b/libs/hbb_common/src/config.rs
@@ -856,10 +856,26 @@ impl LocalConfig {
}
}
+#[derive(Debug, Default, Serialize, Deserialize, Clone)]
+pub struct DiscoveryPeer {
+ pub id: String,
+ #[serde(with = "serde_with::rust::map_as_tuple_list")]
+ pub ip_mac: HashMap,
+ pub username: String,
+ pub hostname: String,
+ pub platform: String,
+ pub online: bool,
+}
+
+impl DiscoveryPeer {
+ pub fn is_same_peer(&self, other: &DiscoveryPeer) -> bool {
+ self.id == other.id && self.username == other.username
+ }
+}
+
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct LanPeers {
- #[serde(default)]
- pub peers: String,
+ pub peers: Vec,
}
impl LanPeers {
@@ -874,8 +890,10 @@ impl LanPeers {
}
}
- pub fn store(peers: String) {
- let f = LanPeers { peers };
+ pub fn store(peers: &Vec) {
+ let f = LanPeers {
+ peers: peers.clone(),
+ };
if let Err(err) = confy::store_path(Config::file_("_lan_peers"), f) {
log::error!("Failed to store lan peers: {}", err);
}
diff --git a/rust-toolchain.toml b/rust-toolchain.toml
new file mode 100644
index 000000000..05dfa3270
--- /dev/null
+++ b/rust-toolchain.toml
@@ -0,0 +1,2 @@
+[toolchain]
+channel = "1.62.0"
diff --git a/src/client.rs b/src/client.rs
index a1c9b2b0f..c8a561c8d 100644
--- a/src/client.rs
+++ b/src/client.rs
@@ -148,11 +148,25 @@ impl Client {
true,
));
}
- let rendezvous_server = crate::get_rendezvous_server(1_000).await;
- log::info!("rendezvous server: {}", rendezvous_server);
-
+ let (mut rendezvous_server, servers, contained) = crate::get_rendezvous_server(1_000).await;
let mut socket =
- socket_client::connect_tcp(&*rendezvous_server, any_addr, RENDEZVOUS_TIMEOUT).await?;
+ socket_client::connect_tcp(&*rendezvous_server, any_addr, RENDEZVOUS_TIMEOUT).await;
+ debug_assert!(!servers.contains(&rendezvous_server));
+ if socket.is_err() && !servers.is_empty() {
+ log::info!("try the other servers: {:?}", servers);
+ for server in servers {
+ socket = socket_client::connect_tcp(&*server, any_addr, RENDEZVOUS_TIMEOUT).await;
+ if socket.is_ok() {
+ rendezvous_server = server;
+ break;
+ }
+ }
+ crate::refresh_rendezvous_server();
+ } else if !contained {
+ crate::refresh_rendezvous_server();
+ }
+ log::info!("rendezvous server: {}", rendezvous_server);
+ let mut socket = socket?;
let my_addr = socket.local_addr();
let mut signed_id_pk = Vec::new();
let mut relay_server = "".to_owned();
diff --git a/src/common.rs b/src/common.rs
index 2930a1611..b2026e5ba 100644
--- a/src/common.rs
+++ b/src/common.rs
@@ -12,7 +12,6 @@ use hbb_common::{
rendezvous_proto::*,
sleep, socket_client, tokio, ResultType,
};
-#[cfg(any(target_os = "android", target_os = "ios", feature = "cli"))]
use hbb_common::{config::RENDEZVOUS_PORT, futures::future::join_all};
use std::sync::{Arc, Mutex};
@@ -247,7 +246,7 @@ async fn test_nat_type_() -> ResultType {
return Ok(true);
}
let start = std::time::Instant::now();
- let rendezvous_server = get_rendezvous_server(1_000).await;
+ let (rendezvous_server, _, _) = get_rendezvous_server(1_000).await;
let server1 = rendezvous_server;
let tmp: Vec<&str> = server1.split(":").collect();
if tmp.len() != 2 {
@@ -316,31 +315,62 @@ async fn test_nat_type_() -> ResultType {
Ok(ok)
}
-#[cfg(any(target_os = "android", target_os = "ios"))]
-pub async fn get_rendezvous_server(_ms_timeout: u64) -> String {
- Config::get_rendezvous_server()
+pub async fn get_rendezvous_server(ms_timeout: u64) -> (String, Vec, bool) {
+ #[cfg(any(target_os = "android", target_os = "ios"))]
+ let (mut a, mut b) = get_rendezvous_server_(ms_timeout);
+ #[cfg(not(any(target_os = "android", target_os = "ios")))]
+ let (mut a, mut b) = get_rendezvous_server_(ms_timeout).await;
+ let mut b: Vec = b
+ .drain(..)
+ .map(|x| {
+ if !x.contains(":") {
+ format!("{}:{}", x, config::RENDEZVOUS_PORT)
+ } else {
+ x
+ }
+ })
+ .collect();
+ let c = if b.contains(&a) {
+ b = b.drain(..).filter(|x| x != &a).collect();
+ true
+ } else {
+ a = b.pop().unwrap_or(a);
+ false
+ };
+ (a, b, c)
}
+#[inline]
+#[cfg(any(target_os = "android", target_os = "ios"))]
+fn get_rendezvous_server_(_ms_timeout: u64) -> (String, Vec) {
+ (
+ Config::get_rendezvous_server(),
+ Config::get_rendezvous_servers(),
+ )
+}
+
+#[inline]
#[cfg(not(any(target_os = "android", target_os = "ios")))]
-pub async fn get_rendezvous_server(ms_timeout: u64) -> String {
+async fn get_rendezvous_server_(ms_timeout: u64) -> (String, Vec) {
crate::ipc::get_rendezvous_server(ms_timeout).await
}
+#[inline]
#[cfg(any(target_os = "android", target_os = "ios"))]
pub async fn get_nat_type(_ms_timeout: u64) -> i32 {
Config::get_nat_type()
}
+#[inline]
#[cfg(not(any(target_os = "android", target_os = "ios")))]
pub async fn get_nat_type(ms_timeout: u64) -> i32 {
crate::ipc::get_nat_type(ms_timeout).await
}
-#[cfg(any(target_os = "android", target_os = "ios", feature = "cli"))]
#[tokio::main(flavor = "current_thread")]
async fn test_rendezvous_server_() {
let servers = Config::get_rendezvous_servers();
- hbb_common::config::ONLINE.lock().unwrap().clear();
+ Config::reset_online();
let mut futs = Vec::new();
for host in servers {
futs.push(tokio::spawn(async move {
@@ -363,11 +393,21 @@ async fn test_rendezvous_server_() {
join_all(futs).await;
}
-#[cfg(any(target_os = "android", target_os = "ios", feature = "cli"))]
pub fn test_rendezvous_server() {
std::thread::spawn(test_rendezvous_server_);
}
+pub fn refresh_rendezvous_server() {
+ #[cfg(any(target_os = "android", target_os = "ios", feature = "cli"))]
+ test_rendezvous_server();
+ #[cfg(not(any(target_os = "android", target_os = "ios", feature = "cli")))]
+ std::thread::spawn(|| {
+ if crate::ipc::test_rendezvous_server().is_err() {
+ test_rendezvous_server();
+ }
+ });
+}
+
#[inline]
pub fn get_time() -> i64 {
std::time::SystemTime::now()
@@ -437,14 +477,15 @@ pub fn is_modifier(evt: &KeyEvent) -> bool {
}
pub fn check_software_update() {
- std::thread::spawn(move || allow_err!(_check_software_update()));
+ std::thread::spawn(move || allow_err!(check_software_update_()));
}
#[tokio::main(flavor = "current_thread")]
-async fn _check_software_update() -> hbb_common::ResultType<()> {
+async fn check_software_update_() -> hbb_common::ResultType<()> {
sleep(3.).await;
- let rendezvous_server = socket_client::get_target_addr(&get_rendezvous_server(1_000).await)?;
+ let rendezvous_server =
+ socket_client::get_target_addr(&format!("rs-sg.rustdesk.com:{}", config::RENDEZVOUS_PORT))?;
let mut socket =
socket_client::new_udp(Config::get_any_listen_addr(), RENDEZVOUS_TIMEOUT).await?;
diff --git a/src/ipc.rs b/src/ipc.rs
index 24a156eba..7df06cd22 100644
--- a/src/ipc.rs
+++ b/src/ipc.rs
@@ -127,6 +127,7 @@ pub enum Data {
ClipbaordFile(ClipbaordFile),
ClipboardFileEnabled(bool),
PrivacyModeState((i32, PrivacyModeState)),
+ TestRendezvousServer,
}
#[tokio::main(flavor = "current_thread")]
@@ -286,7 +287,11 @@ async fn handle(data: Data, stream: &mut Connection) {
} else if name == "salt" {
value = Some(Config::get_salt());
} else if name == "rendezvous_server" {
- value = Some(Config::get_rendezvous_server());
+ value = Some(format!(
+ "{},{}",
+ Config::get_rendezvous_server(),
+ Config::get_rendezvous_servers().join(",")
+ ));
} else if name == "rendezvous_servers" {
value = Some(Config::get_rendezvous_servers().join(","));
} else {
@@ -336,7 +341,9 @@ async fn handle(data: Data, stream: &mut Connection) {
.await
);
}
-
+ Data::TestRendezvousServer => {
+ crate::test_rendezvous_server();
+ }
_ => {}
}
}
@@ -520,11 +527,17 @@ pub fn get_password() -> String {
}
}
-pub async fn get_rendezvous_server(ms_timeout: u64) -> String {
+pub async fn get_rendezvous_server(ms_timeout: u64) -> (String, Vec) {
if let Ok(Some(v)) = get_config_async("rendezvous_server", ms_timeout).await {
- v
+ let mut urls = v.split(",");
+ let a = urls.next().unwrap_or_default().to_owned();
+ let b: Vec = urls.map(|x| x.to_owned()).collect();
+ (a, b)
} else {
- Config::get_rendezvous_server()
+ (
+ Config::get_rendezvous_server(),
+ Config::get_rendezvous_servers(),
+ )
}
}
@@ -636,3 +649,10 @@ pub async fn set_socks(value: config::Socks5Server) -> ResultType<()> {
.await?;
Ok(())
}
+
+#[tokio::main(flavor = "current_thread")]
+pub async fn test_rendezvous_server() -> ResultType<()> {
+ let mut c = connect(1000, "").await?;
+ c.send(&Data::TestRendezvousServer).await?;
+ Ok(())
+}
diff --git a/src/lan.rs b/src/lan.rs
new file mode 100644
index 000000000..733e271a9
--- /dev/null
+++ b/src/lan.rs
@@ -0,0 +1,291 @@
+use hbb_common::{
+ allow_err,
+ anyhow::bail,
+ config::{self, Config, RENDEZVOUS_PORT},
+ log,
+ protobuf::Message as _,
+ rendezvous_proto::*,
+ tokio::{
+ self,
+ sync::mpsc::{unbounded_channel, UnboundedReceiver, UnboundedSender},
+ },
+ ResultType,
+};
+use std::{
+ collections::{HashMap, HashSet},
+ net::{IpAddr, Ipv4Addr, SocketAddr, ToSocketAddrs, UdpSocket},
+ time::Instant,
+};
+
+type Message = RendezvousMessage;
+
+pub(super) fn start_listening() -> ResultType<()> {
+ let addr = SocketAddr::from(([0, 0, 0, 0], get_broadcast_port()));
+ let socket = std::net::UdpSocket::bind(addr)?;
+ socket.set_read_timeout(Some(std::time::Duration::from_millis(1000)))?;
+ log::info!("lan discovery listener started");
+ loop {
+ let mut buf = [0; 2048];
+ if let Ok((len, addr)) = socket.recv_from(&mut buf) {
+ if let Ok(msg_in) = Message::parse_from_bytes(&buf[0..len]) {
+ match msg_in.union {
+ Some(rendezvous_message::Union::PeerDiscovery(p)) => {
+ if p.cmd == "ping" {
+ if let Some(self_addr) = get_ipaddr_by_peer(&addr) {
+ let mut msg_out = Message::new();
+ let peer = PeerDiscovery {
+ cmd: "pong".to_owned(),
+ mac: get_mac(&self_addr),
+ id: Config::get_id(),
+ hostname: whoami::hostname(),
+ username: crate::platform::get_active_username(),
+ platform: whoami::platform().to_string(),
+ ..Default::default()
+ };
+ msg_out.set_peer_discovery(peer);
+ socket.send_to(&msg_out.write_to_bytes()?, addr).ok();
+ }
+ }
+ }
+ _ => {}
+ }
+ }
+ }
+ }
+}
+
+#[tokio::main(flavor = "current_thread")]
+pub async fn discover() -> ResultType<()> {
+ let sockets = send_query()?;
+ let rx = spawn_wait_responses(sockets);
+ handle_received_peers(rx).await?;
+
+ log::info!("discover ping done");
+ Ok(())
+}
+
+pub fn send_wol(id: String) {
+ let interfaces = default_net::get_interfaces();
+ for peer in &config::LanPeers::load().peers {
+ if peer.id == id {
+ for (ip, mac) in peer.ip_mac.iter() {
+ if let Ok(mac_addr) = mac.parse() {
+ if let Ok(IpAddr::V4(ip)) = ip.parse() {
+ for interface in &interfaces {
+ for ipv4 in &interface.ipv4 {
+ if (u32::from(ipv4.addr) & u32::from(ipv4.netmask))
+ == (u32::from(ip) & u32::from(ipv4.netmask))
+ {
+ allow_err!(wol::send_wol(
+ mac_addr,
+ None,
+ Some(IpAddr::V4(ipv4.addr))
+ ));
+ }
+ }
+ }
+ }
+ }
+ }
+ break;
+ }
+ }
+}
+
+#[inline]
+fn get_broadcast_port() -> u16 {
+ (RENDEZVOUS_PORT + 3) as _
+}
+
+fn get_mac(ip: &IpAddr) -> String {
+ #[cfg(not(any(target_os = "android", target_os = "ios")))]
+ if let Ok(mac) = get_mac_by_ip(ip) {
+ mac.to_string()
+ } else {
+ "".to_owned()
+ }
+ #[cfg(any(target_os = "android", target_os = "ios"))]
+ "".to_owned()
+}
+
+fn get_all_ipv4s() -> ResultType> {
+ let mut ipv4s = Vec::new();
+ for interface in default_net::get_interfaces() {
+ for ipv4 in &interface.ipv4 {
+ ipv4s.push(ipv4.addr.clone());
+ }
+ }
+ Ok(ipv4s)
+}
+
+fn get_mac_by_ip(ip: &IpAddr) -> ResultType {
+ for interface in default_net::get_interfaces() {
+ match ip {
+ IpAddr::V4(local_ipv4) => {
+ if interface.ipv4.iter().any(|x| x.addr == *local_ipv4) {
+ if let Some(mac_addr) = interface.mac_addr {
+ return Ok(mac_addr.address());
+ }
+ }
+ }
+ IpAddr::V6(local_ipv6) => {
+ if interface.ipv6.iter().any(|x| x.addr == *local_ipv6) {
+ if let Some(mac_addr) = interface.mac_addr {
+ return Ok(mac_addr.address());
+ }
+ }
+ }
+ }
+ }
+ bail!("No interface found for ip: {:?}", ip);
+}
+
+// Mainly from https://github.com/shellrow/default-net/blob/cf7ca24e7e6e8e566ed32346c9cfddab3f47e2d6/src/interface/shared.rs#L4
+fn get_ipaddr_by_peer(peer: A) -> Option {
+ let socket = match UdpSocket::bind("0.0.0.0:0") {
+ Ok(s) => s,
+ Err(_) => return None,
+ };
+
+ match socket.connect(peer) {
+ Ok(()) => (),
+ Err(_) => return None,
+ };
+
+ match socket.local_addr() {
+ Ok(addr) => return Some(addr.ip()),
+ Err(_) => return None,
+ };
+}
+
+fn create_broadcast_sockets() -> ResultType> {
+ let mut sockets = Vec::new();
+ for v4_addr in get_all_ipv4s()? {
+ if v4_addr.is_private() {
+ let s = UdpSocket::bind(SocketAddr::from((v4_addr, 0)))?;
+ s.set_broadcast(true)?;
+ log::debug!("Bind socket to {}", &v4_addr);
+ sockets.push(s)
+ }
+ }
+ Ok(sockets)
+}
+
+fn send_query() -> ResultType> {
+ let sockets = create_broadcast_sockets()?;
+ if sockets.is_empty() {
+ bail!("Found no ipv4 addresses");
+ }
+
+ let mut msg_out = Message::new();
+ let peer = PeerDiscovery {
+ cmd: "ping".to_owned(),
+ ..Default::default()
+ };
+ msg_out.set_peer_discovery(peer);
+ let maddr = SocketAddr::from(([255, 255, 255, 255], get_broadcast_port()));
+ for socket in &sockets {
+ socket.send_to(&msg_out.write_to_bytes()?, maddr)?;
+ }
+ log::info!("discover ping sent");
+ Ok(sockets)
+}
+
+fn wait_response(
+ socket: UdpSocket,
+ timeout: Option,
+ tx: UnboundedSender,
+) -> ResultType<()> {
+ let mut last_recv_time = Instant::now();
+
+ socket.set_read_timeout(timeout)?;
+ loop {
+ let mut buf = [0; 2048];
+ if let Ok((len, addr)) = socket.recv_from(&mut buf) {
+ if let Ok(msg_in) = Message::parse_from_bytes(&buf[0..len]) {
+ match msg_in.union {
+ Some(rendezvous_message::Union::PeerDiscovery(p)) => {
+ last_recv_time = Instant::now();
+ if p.cmd == "pong" {
+ let mac = if let Some(self_addr) = get_ipaddr_by_peer(&addr) {
+ get_mac(&self_addr)
+ } else {
+ "".to_owned()
+ };
+
+ if mac != p.mac {
+ allow_err!(tx.send(config::DiscoveryPeer {
+ id: p.id.clone(),
+ ip_mac: HashMap::from([
+ (addr.ip().to_string(), p.mac.clone(),)
+ ]),
+ username: p.username.clone(),
+ hostname: p.hostname.clone(),
+ platform: p.platform.clone(),
+ online: true,
+ }));
+ }
+ }
+ }
+ _ => {}
+ }
+ }
+ }
+ if last_recv_time.elapsed().as_millis() > 3_000 {
+ break;
+ }
+ }
+ Ok(())
+}
+
+fn spawn_wait_responses(sockets: Vec) -> UnboundedReceiver {
+ let (tx, rx) = unbounded_channel::<_>();
+ for socket in sockets {
+ let tx_clone = tx.clone();
+ std::thread::spawn(move || {
+ allow_err!(wait_response(
+ socket,
+ Some(std::time::Duration::from_millis(10)),
+ tx_clone
+ ));
+ });
+ }
+ rx
+}
+
+async fn handle_received_peers(mut rx: UnboundedReceiver) -> ResultType<()> {
+ let mut peers = config::LanPeers::load().peers;
+ peers.iter_mut().for_each(|peer| {
+ peer.online = false;
+ });
+
+ let mut response_set = HashSet::new();
+ let mut last_write_time = Instant::now() - std::time::Duration::from_secs(4);
+ loop {
+ tokio::select! {
+ data = rx.recv() => match data {
+ Some(mut peer) => {
+ let in_response_set = !response_set.insert(peer.id.clone());
+ if let Some(pos) = peers.iter().position(|x| x.is_same_peer(&peer) ) {
+ let peer1 = peers.remove(pos);
+ if in_response_set {
+ peer.ip_mac.extend(peer1.ip_mac);
+ peer.online = true;
+ }
+ }
+ peers.insert(0, peer);
+ if last_write_time.elapsed().as_millis() > 300 {
+ config::LanPeers::store(&peers);
+ last_write_time = Instant::now();
+ }
+ }
+ None => {
+ break
+ }
+ }
+ }
+ }
+
+ config::LanPeers::store(&peers);
+ Ok(())
+}
diff --git a/src/lang.rs b/src/lang.rs
index b37c4beb6..f01833718 100644
--- a/src/lang.rs
+++ b/src/lang.rs
@@ -8,6 +8,7 @@ mod de;
mod en;
mod eo;
mod es;
+mod hu;
mod fr;
mod id;
mod it;
@@ -28,6 +29,7 @@ lazy_static::lazy_static! {
("tw", "繁體中文"),
("pt", "Português"),
("es", "Español"),
+ ("hu", "Magyar"),
("ru", "Русский"),
("sk", "Slovenčina"),
("id", "Indonesia"),
@@ -68,6 +70,7 @@ pub fn translate_locale(name: String, locale: &str) -> String {
"tw" => tw::T.deref(),
"de" => de::T.deref(),
"es" => es::T.deref(),
+ "hu" => hu::T.deref(),
"ru" => ru::T.deref(),
"eo" => eo::T.deref(),
"id" => id::T.deref(),
diff --git a/src/lang/cn.rs b/src/lang/cn.rs
index ba8e6d178..58a3a6cd7 100644
--- a/src/lang/cn.rs
+++ b/src/lang/cn.rs
@@ -284,5 +284,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("In privacy mode", "进入隐私模式"),
("Out privacy mode", "退出隐私模式"),
("Language", "语言"),
+ ("Keep RustDesk background service", "保持RustDesk后台服务"),
+ ("Ignore Battery Optimizations", "忽略电池优化"),
+ ("android_open_battery_optimizations_tip", "如需关闭此功能,请在接下来的RustDesk应用设置页面中,找到并进入 [电源] 页面,取消勾选 [不受限制]"),
].iter().cloned().collect();
}
diff --git a/src/lang/cs.rs b/src/lang/cs.rs
index 3c92ee71b..c5c432d46 100644
--- a/src/lang/cs.rs
+++ b/src/lang/cs.rs
@@ -284,5 +284,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("In privacy mode", "v režimu soukromí"),
("Out privacy mode", "mimo režim soukromí"),
("Language", ""),
+ ("Keep RustDesk background service", ""),
+ ("Ignore Battery Optimizations", ""),
+ ("android_open_battery_optimizations_tip", ""),
].iter().cloned().collect();
}
diff --git a/src/lang/da.rs b/src/lang/da.rs
index 16b98359b..d13cd8550 100644
--- a/src/lang/da.rs
+++ b/src/lang/da.rs
@@ -284,5 +284,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("In privacy mode", "I databeskyttelsestilstand"),
("Out privacy mode", "Databeskyttelsestilstand fra"),
("Language", ""),
+ ("Keep RustDesk background service", ""),
+ ("Ignore Battery Optimizations", ""),
+ ("android_open_battery_optimizations_tip", ""),
].iter().cloned().collect();
}
diff --git a/src/lang/de.rs b/src/lang/de.rs
index c2fd56002..b7f471992 100644
--- a/src/lang/de.rs
+++ b/src/lang/de.rs
@@ -284,5 +284,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("In privacy mode", "im Datenschutzmodus"),
("Out privacy mode", "Datenschutzmodus aus"),
("Language", "Sprache"),
+ ("Keep RustDesk background service", ""),
+ ("Ignore Battery Optimizations", ""),
+ ("android_open_battery_optimizations_tip", ""),
].iter().cloned().collect();
}
diff --git a/src/lang/en.rs b/src/lang/en.rs
index a4d11d415..1818a619a 100644
--- a/src/lang/en.rs
+++ b/src/lang/en.rs
@@ -27,5 +27,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("doc_mac_permission", "https://rustdesk.com/docs/en/manual/mac/#enable-permissions"),
("doc_fix_wayland", "https://rustdesk.com/docs/en/manual/linux/#x11-required"),
("server_not_support", "Not yet supported by the server"),
+ ("android_open_battery_optimizations_tip", "If you want to disable this feature, please go to the next RustDesk application settings page, find and enter [Battery] ,Uncheck [Unrestricted]"),
].iter().cloned().collect();
}
diff --git a/src/lang/eo.rs b/src/lang/eo.rs
index c9701d63a..4719a3be3 100644
--- a/src/lang/eo.rs
+++ b/src/lang/eo.rs
@@ -284,5 +284,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("In privacy mode", ""),
("Out privacy mode", ""),
("Language", ""),
+ ("Keep RustDesk background service", ""),
+ ("Ignore Battery Optimizations", ""),
+ ("android_open_battery_optimizations_tip", ""),
].iter().cloned().collect();
}
diff --git a/src/lang/es.rs b/src/lang/es.rs
index 60cc05341..adf214b97 100644
--- a/src/lang/es.rs
+++ b/src/lang/es.rs
@@ -284,5 +284,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("In privacy mode", "En modo de privacidad"),
("Out privacy mode", "Fuera del modo de privacidad"),
("Language", ""),
+ ("Keep RustDesk background service", ""),
+ ("Ignore Battery Optimizations", ""),
+ ("android_open_battery_optimizations_tip", ""),
].iter().cloned().collect();
}
diff --git a/src/lang/fr.rs b/src/lang/fr.rs
index f447c5acd..e92069993 100644
--- a/src/lang/fr.rs
+++ b/src/lang/fr.rs
@@ -284,5 +284,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("In privacy mode", "en mode privé"),
("Out privacy mode", "hors mode de confidentialité"),
("Language", "Langue"),
+ ("Keep RustDesk background service", ""),
+ ("Ignore Battery Optimizations", ""),
+ ("android_open_battery_optimizations_tip", ""),
].iter().cloned().collect();
}
diff --git a/src/lang/hu.rs b/src/lang/hu.rs
new file mode 100644
index 000000000..b0d1bfda0
--- /dev/null
+++ b/src/lang/hu.rs
@@ -0,0 +1,291 @@
+lazy_static::lazy_static! {
+pub static ref T: std::collections::HashMap<&'static str, &'static str> =
+ [
+ ("Status", "Státusz"),
+ ("Your Desktop", "A te asztalod"),
+ ("desk_tip", "Az asztalod ezzel az ID-vel, és jelszóval érhető el."),
+ ("Password", "Jelszó"),
+ ("Ready", "Kész"),
+ ("Established", "Létrejött"),
+ ("connecting_status", "Kapcsolódás a RustDesk hálózatához..."),
+ ("Enable Service", "A szolgáltatás bekapcsolása"),
+ ("Start Service", "Szolgáltatás Elindítása"),
+ ("Service is running", "A szolgáltatás fut"),
+ ("Service is not running", "A szolgáltatás nem fut"),
+ ("not_ready_status", "A RustDesk nem áll készen. Kérlek nézd meg a hálózati beállításaidat."),
+ ("Control Remote Desktop", "Távoli Asztal Kontrollálása"),
+ ("Transfer File", "Fájl Transzfer"),
+ ("Connect", "Kapcsolódás"),
+ ("Recent Sessions", "Korábbi Sessionök"),
+ ("Address Book", "Címköny"),
+ ("Confirmation", "Megerősít"),
+ ("TCP Tunneling", "TCP Tunneling"),
+ ("Remove", "Eltávolít"),
+ ("Refresh random password", "Véletlenszerű jelszó frissítése"),
+ ("Set your own password", "Saját jelszó beállítása"),
+ ("Enable Keyboard/Mouse", "Billentyűzet/Egér bekapcsolása"),
+ ("Enable Clipboard", "Megosztott vágólap bekapcsolása"),
+ ("Enable File Transfer", "Fájl transzer bekapcsolása"),
+ ("Enable TCP Tunneling", "TCP Tunneling bekapcsolása"),
+ ("IP Whitelisting", "IP Fehérlista"),
+ ("ID/Relay Server", "ID/Relay Szerver"),
+ ("Stop service", "Szolgáltatás Kikapcsolása"),
+ ("Change ID", "ID Megváltoztatása"),
+ ("Website", "Weboldal"),
+ ("About", "Rólunk: "),
+ ("Mute", "Némítás"),
+ ("Audio Input", "Audo Bemenet"),
+ ("Enhancements", "Javítások"),
+ ("Hardware Codec", "Hardware Kodek"),
+ ("Adaptive Bitrate", "Adaptív Bitrate"),
+ ("ID Server", "ID Szerver"),
+ ("Relay Server", "Relay Szerver"),
+ ("API Server", "API Szerver"),
+ ("invalid_http", "A címnek mindenképpen http(s)://-el kell kezdődnie."),
+ ("Invalid IP", "A megadott íp cím helytelen."),
+ ("id_change_tip", "Csak a-z, A-Z, 0-9 csoportokba tartozó karakterek, illetve a _ karakter van engedélyezve. Az első karakternek mindenképpen a-z, A-Z csoportokba kell esnie. Az ID hosszúsága 6-tól, 16 karakter."),
+ ("Invalid format", "Érvénytelen formátum"),
+ ("server_not_support", "Még nem támogatott a szerver által"),
+ ("Not available", "Nem érhető el"),
+ ("Too frequent", "Túl gyakori"),
+ ("Cancel", "Mégsem"),
+ ("Skip", "Kihagy"),
+ ("Close", "Bezár"),
+ ("Retry", "Újrapróbálkozás"),
+ ("OK", "OK"),
+ ("Password Required", "A jelszó megadása kötelező"),
+ ("Please enter your password", "Kérlek írd be a jelszavad"),
+ ("Remember password", "Kérlek emlékezz a jelszóra"),
+ ("Wrong Password", "Hibás jelszó"),
+ ("Do you want to enter again?", "Újra szeretnéd próbálni?"),
+ ("Connection Error", "Kapcsolódási Hiba"),
+ ("Error", "Hiba"),
+ ("Reset by the peer", "A kapcsolatot alaphelyzetbe állt"),
+ ("Connecting...", "Kapcsolódás..."),
+ ("Connection in progress. Please wait.", "A kapcsolódás folyamatban van. Kérlek várj."),
+ ("Please try 1 minute later", "Kérlek próbáld újra 1 perc múlva."),
+ ("Login Error", "Belépési Hiba"),
+ ("Successful", "Sikeres"),
+ ("Connected, waiting for image...", "Kapcsolódva, várakozás a képre..."),
+ ("Name", "Név"),
+ ("Type", "Fajta"),
+ ("Modified", "Módosított"),
+ ("Size", "Méret"),
+ ("Show Hidden Files", "Rejtett Fájlok Mutatása"),
+ ("Receive", "Kapni"),
+ ("Send", "Küldeni"),
+ ("Refresh File", "Fájlok Frissítése"),
+ ("Local", "Lokális"),
+ ("Remote", "Távoli"),
+ ("Remote Computer", "Távoli Számítógép"),
+ ("Local Computer", "Lokális Számítógép"),
+ ("Confirm Delete", "Törlés Megerősítése"),
+ ("Delete", "Törlés"),
+ ("Properties", "Tulajdonságok"),
+ ("Multi Select", "Több fájl kiválasztása"),
+ ("Empty Directory", "Üres Könyvtár"),
+ ("Not an empty directory", "Nem egy üres könyvtár"),
+ ("Are you sure you want to delete this file?", "Biztosan törölni szeretnéd ezt a fájlt?"),
+ ("Are you sure you want to delete this empty directory?", "Biztosan törölni szeretnéd ezt az üres könyvtárat?"),
+ ("Are you sure you want to delete the file of this directory?", "Biztosan törölni szeretnéd a fájlokat ebben a könyvtárban?"),
+ ("Do this for all conflicts", "Ezt tedd az összes konfliktussal"),
+ ("This is irreversible!", "Ez a folyamat visszafordíthatatlan!"),
+ ("Deleting", "A törlés folyamatban"),
+ ("files", "fájlok"),
+ ("Waiting", "Várunk"),
+ ("Finished", "Végzett"),
+ ("Speed", "Gyorsaság"),
+ ("Custom Image Quality", "Egyedi Képminőség"),
+ ("Privacy mode", "Inkognító mód"),
+ ("Block user input", "Felhasználói input blokkokolása"),
+ ("Unblock user input", "Felhasználói input blokkolásának feloldása"),
+ ("Adjust Window", "Ablakméret beállítása"),
+ ("Original", "Eredeti"),
+ ("Shrink", "Zsugorított"),
+ ("Stretch", "Nyújtott"),
+ ("Good image quality", "Jó képminőség"),
+ ("Balanced", "Balanszolt"),
+ ("Optimize reaction time", "Válaszidő optimializálása"),
+ ("Custom", "Egyedi"),
+ ("Show remote cursor", "Távoli kurzor mutatása"),
+ ("Show quality monitor", "Minőségi monitor mutatása"),
+ ("Disable clipboard", "Vágólap Kikapcsolása"),
+ ("Lock after session end", "Lezárás a session végén"),
+ ("Insert", "Beszúrás"),
+ ("Insert Lock", "Beszúrási Zároló"),
+ ("Refresh", "Frissítés"),
+ ("ID does not exist", "Ez az ID nem létezik"),
+ ("Failed to connect to rendezvous server", "A randevú szerverhez való kapcsolódás sikertelen"),
+ ("Please try later", "Kérlek próbád később"),
+ ("Remote desktop is offline", "A távoli asztal offline"),
+ ("Key mismatch", "Eltérés a kulcsokban"),
+ ("Timeout", "Időtúllépés"),
+ ("Failed to connect to relay server", "A relay szerverhez való kapcsolódás sikertelen"),
+ ("Failed to connect via rendezvous server", "A randevú szerverrel való kapcsolódás sikertelen"),
+ ("Failed to connect via relay server", "A relay szerverrel való kapcsolódás sikertelen"),
+ ("Failed to make direct connection to remote desktop", "A távoli asztalhoz való direkt kapcsolódás sikertelen"),
+ ("Set Password", "Jelszó Beállítása"),
+ ("OS Password", "Operációs Rendszer Jelszavának Beállítása"),
+ ("install_tip", "Az UAC (Felhasználói Fiók Felügyelet) miatt, a RustDesk nem fog rendesen funkcionálni mint távoli oldal néhány esetben. Hogy ezt kikerüld, vagy kikapcsold, kérlek nyomj rá a gombra ezalatt az üzenet alatt, hogy feltelepítsd a RustDesket a rendszerre."),
+ ("Click to upgrade", "Kattints a frissítés telepítéséhez"),
+ ("Click to download", "Kattints a letöltéshez"),
+ ("Click to update", "Kattints a frissítés letöltéséhez"),
+ ("Configure", "Beállítás"),
+ ("config_acc", "Ahhoz hogy a RustDesket távolról irányítani tudd, \"Elérhetőségi\" jogokat kell adnod a RustDesk-nek."),
+ ("config_screen", "Ahhoz hogy a RustDesket távolról irányítani tudd, \"Képernyőfelvételi\" jogokat kell adnod a RustDesk-nek."),
+ ("Installing ...", "Telepítés..."),
+ ("Install", "Telepítés"),
+ ("Installation", "Telepítés"),
+ ("Installation Path", "Telepítési útvonal"),
+ ("Create start menu shortcuts", "Start menu parancsikon létrehozása"),
+ ("Create desktop icon", "Asztali icon létrehozása"),
+ ("agreement_tip", "Azzal hogy elindítod a telepítést, elfogadod a licenszszerződést."),
+ ("Accept and Install", "Elfogadás és Telepítés"),
+ ("End-user license agreement", "Felhasználói licencszerződés"),
+ ("Generating ...", "Generálás..."),
+ ("Your installation is lower version.", "A jelenleg feltelepített verzió régebbi."),
+ ("not_close_tcp_tip", "Ne zárd be ezt az ablakot miközben a tunnelt használod"),
+ ("Listening ...", "Halgazózás..."),
+ ("Remote Host", "Távoli Host"),
+ ("Remote Port", "Távoli Port"),
+ ("Action", "Akció"),
+ ("Add", "Add"),
+ ("Local Port", "Lokális Port"),
+ ("setup_server_tip", "Egy gyorsabb kapcsolatért, kérlek hostolj egy saját szervert"),
+ ("Too short, at least 6 characters.", "Túl rövid, legalább 6 karakter"),
+ ("The confirmation is not identical.", "A megerősítés nem volt azonos"),
+ ("Permissions", "Jogok"),
+ ("Accept", "Elfogad"),
+ ("Dismiss", "Elutasít"),
+ ("Disconnect", "Szétkapcsolás"),
+ ("Allow using keyboard and mouse", "Billentyűzet és egér használatának engedélyezése"),
+ ("Allow using clipboard", "Vágólap használatának engedélyezése"),
+ ("Allow hearing sound", "Hang átvitelének engedélyezése"),
+ ("Allow file copy and paste", "Fájlok másolásának és beillesztésének engedélyezése"),
+ ("Connected", "Kapcsolódva"),
+ ("Direct and encrypted connection", "Direkt, és titkosított kapcsolat"),
+ ("Relayed and encrypted connection", "Relayelt, és titkosított kapcsolat"),
+ ("Direct and unencrypted connection", "Direkt, és nem titkosított kapcsolat"),
+ ("Relayed and unencrypted connection", "Rekayelt, és nem titkosított kapcsolat"),
+ ("Enter Remote ID", "Kérlek írd be a távoli ID-t"),
+ ("Enter your password", "Kérlek írd be a jelszavadat"),
+ ("Logging in...", "A belépés folyamatban..."),
+ ("Enable RDP session sharing", "Az RDP session megosztás engedélyezése"),
+ ("Auto Login", "Automatikus Login"),
+ ("Enable Direct IP Access", "Direkt IP elérés engedélyezése"),
+ ("Rename", "Átnevezés"),
+ ("Space", "Hely"),
+ ("Create Desktop Shortcut", "Asztali Parancsikon Lértehozása"),
+ ("Change Path", "Útvonal Megváltoztatása"),
+ ("Create Folder", "Mappa Készítése"),
+ ("Please enter the folder name", "Kérlek írd be a mappa nevét"),
+ ("Fix it", "Kérlek javísd meg"),
+ ("Warning", "Figyelem"),
+ ("Login screen using Wayland is not supported", "A belépési kijelzővel a Wayland használata nem támogatott"),
+ ("Reboot required", "Újraindítás szükséges"),
+ ("Unsupported display server ", "Nem támogatott kijelző szerver"),
+ ("x11 expected", "x11-re számítottt"),
+ ("Port", "Port"),
+ ("Settings", "Beállítások"),
+ ("Username", "Felhasználónév"),
+ ("Invalid port", "Érvénytelen port"),
+ ("Closed manually by the peer", "A kapcsolat manuálisan be lett zárva a másik fél álltal"),
+ ("Enable remote configuration modification", "Távoli konfiguráció módosítás engedélyezése"),
+ ("Run without install", "Futtatás feltelepítés nélkül"),
+ ("Always connected via relay", "Mindig relay által kapcsolódott"),
+ ("Always connect via relay", "Mindig relay által kapcsolódik"),
+ ("whitelist_tip", "Csak a fehérlistán lévő címek érhetnek el"),
+ ("Login", "Belépés"),
+ ("Logout", "Kilépés"),
+ ("Tags", "Tagok"),
+ ("Search ID", "ID keresés"),
+ ("Current Wayland display server is not supported", "Jelenleg a Wayland display szerver nem támogatott"),
+ ("whitelist_sep", "Ide jönnek a címek, vesző, pontosvessző, space, vagy új sorral elválasztva"),
+ ("Add ID", "ID Hozzáadása"),
+ ("Add Tag", "Tag Hozzáadása"),
+ ("Unselect all tags", "Az összes tag kiválasztásának törlése"),
+ ("Network error", "Hálózati hiba"),
+ ("Username missed", "A felhasználónév kimaradt"),
+ ("Password missed", "A jelszó kimaradt"),
+ ("Wrong credentials", "Hibás felhasználónév vagy jelszó"),
+ ("Edit Tag", "A tag(ok) szerkeztése"),
+ ("Unremember Password", "A jelszó megjegyzésének törlése"),
+ ("Favorites", "Kedvencek"),
+ ("Add to Favorites", "Hozzáadás a kedvencekhez"),
+ ("Remove from Favorites", "Eltávolítás a kedvencektől"),
+ ("Empty", "Üres"),
+ ("Invalid folder name", "Helytelen fájlnév"),
+ ("Socks5 Proxy", "Socks5-ös Proxy"),
+ ("Hostname", "Hostnév"),
+ ("Discovered", "Felfedezés"),
+ ("install_daemon_tip", "Ahhoz hogy a RustDesk bootkor elinduljon, telepítened kell a rendszer szolgáltatást."),
+ ("Remote ID", "Távoli ID"),
+ ("Paste", "Beillesztés"),
+ ("Paste here?", "Beillesztés ide?"),
+ ("Are you sure to close the connection?", "Biztos vagy benne hogy be szeretnéd zárni a kapcsolatot?"),
+ ("Download new version", "Új verzó letöltése"),
+ ("Touch mode", "Érintési mód bekapcsolása"),
+ ("Mouse mode", "Egérhasználati mód bekapcsolása"),
+ ("One-Finger Tap", "Egyújas érintés"),
+ ("Left Mouse", "Baloldali Egér"),
+ ("One-Long Tap", "Egy hosszú érintés"),
+ ("Two-Finger Tap", "Két újas érintés"),
+ ("Right Mouse", "Jobboldali Egér"),
+ ("One-Finger Move", "Egyújas mozgatás"),
+ ("Double Tap & Move", "Kétszeri érintés, és Mozgatás"),
+ ("Mouse Drag", "Egérrel való húzás"),
+ ("Three-Finger vertically", "Három ujj függőlegesen"),
+ ("Mouse Wheel", "Egérgörgő"),
+ ("Two-Finger Move", "Kátújas mozgatás"),
+ ("Canvas Move", "Nézet Mozgatása"),
+ ("Pinch to Zoom", "Húzd össze a nagyításhoz"),
+ ("Canvas Zoom", "Nézet Nagyítása"),
+ ("Reset canvas", "Nézet visszaállítása"),
+ ("No permission of file transfer", "Nincs jogod fájl transzer indításához"),
+ ("Note", "Megyjegyzés"),
+ ("Connection", "Kapcsolat"),
+ ("Share Screen", "Képernyőmegosztás"),
+ ("CLOSE", "LETILT"),
+ ("OPEN", "ENGEDÉLYEZ"),
+ ("Chat", "Chat"),
+ ("Total", "Összes"),
+ ("items", "Tárgyak"),
+ ("Selected", "Kiválasztott"),
+ ("Screen Capture", "Képernyőrögzítés"),
+ ("Input Control", "Input Kontrol"),
+ ("Audio Capture", "Audió Rögzítés"),
+ ("File Connection", "Fájlkapcsolat"),
+ ("Screen Connection", "Új Vizuális Kapcsolat"),
+ ("Do you accept?", "Elfogadod?"),
+ ("Open System Setting", "Rendszer beállítások megnyitása"),
+ ("How to get Android input permission?", "Hogyan állíthatok be Android input jogokat?"),
+ ("android_input_permission_tip1", "Ahhoz hogy egy távoli eszköz kontolálhassa az Android eszközödet egérrel vagy érintéssel, jogot kell adnod a RustDesk-nek, hogy használja az \"Elérhetőségi\" szolgáltatást."),
+ ("android_input_permission_tip2", "Kérlek navigálj a rendszer beállításaihoz, keresd meg vagy írd be hogy [Feltelepített Szolgáltatások], és kapcsold be a [RustDesk Input] szolgáltatást."),
+ ("android_new_connection_tip", "Új kontrollálási kérés érkezett, amely irányítani szeretné az eszközöded."),
+ ("android_service_will_start_tip", "A \"Képernyőrögzítés\" engedélyezése automatikusan elindítja majd a szolgáltatást, amely megengedi más eszközöknek hogy kérést kezdeményezzenek az eszköz felé."),
+ ("android_stop_service_tip", "A szolgáltatás bezárása automatikusan szétkapcsol minden létező kapcsolatot."),
+ ("android_version_audio_tip", "A jelenlegi Android verzió nem támogatja a hangrögzítést, kérlek frissíts legalább Android 10-re, vagy egy újabb verzióra."),
+ ("android_start_service_tip", "Nyomj a [Szolgáltatás Indítása] opcióra, vagy adj [Képernyőrözítési] jogot az applikációnak hogy elindítsd a képernyőmegosztó szolgáltatást."),
+ ("Account", "Fiók"),
+ ("Overwrite", "Felülírás"),
+ ("This file exists, skip or overwrite this file?", "Ez a fájl már létezik, skippeljünk, vagy felülírjuk ezt a fájlt?"),
+ ("Quit", "Kilépés"),
+ ("doc_mac_permission", "https://rustdesk.com/docs/hu/manual/mac/#enable-permissions"),
+ ("Help", "Segítség"),
+ ("Failed", "Sikertelen"),
+ ("Succeeded", "Sikeres"),
+ ("Someone turns on privacy mode, exit", "Valaki bekacsolta a privát módot, lépj ki"),
+ ("Unsupported", "Nem támogatott"),
+ ("Peer denied", "Elutasítva a távoli fél álltal"),
+ ("Please install plugins", "Kérlek telepítsd a pluginokat"),
+ ("Peer exit", "A távoli fél kilépett"),
+ ("Failed to turn off", "Nem tudtuk kikapcsolni"),
+ ("Turned off", "Kikapcsolva"),
+ ("In privacy mode", "Belépés a privát módba"),
+ ("Out privacy mode", "Kilépés a privát módból"),
+ ("Language", "Nyelv"),
+ ("Keep RustDesk background service", ""),
+ ("Ignore Battery Optimizations", ""),
+ ("android_open_battery_optimizations_tip", ""),
+ ].iter().cloned().collect();
+}
diff --git a/src/lang/id.rs b/src/lang/id.rs
index b1c6aaa1e..4cdaf8b95 100644
--- a/src/lang/id.rs
+++ b/src/lang/id.rs
@@ -284,5 +284,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("In privacy mode", "Dalam mode privasi"),
("Out privacy mode", "Keluar dari mode privasi"),
("Language", ""),
+ ("Keep RustDesk background service", ""),
+ ("Ignore Battery Optimizations", ""),
+ ("android_open_battery_optimizations_tip", ""),
].iter().cloned().collect();
}
diff --git a/src/lang/it.rs b/src/lang/it.rs
index c756d2218..3a0c2dc2a 100644
--- a/src/lang/it.rs
+++ b/src/lang/it.rs
@@ -284,5 +284,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("In privacy mode", "In modalità privacy"),
("Out privacy mode", "Fuori modalità privacy"),
("Language", "Linguaggio"),
+ ("Keep RustDesk background service", ""),
+ ("Ignore Battery Optimizations", ""),
+ ("android_open_battery_optimizations_tip", ""),
].iter().cloned().collect();
}
diff --git a/src/lang/ptbr.rs b/src/lang/ptbr.rs
index 946e47d4c..e3cadd204 100644
--- a/src/lang/ptbr.rs
+++ b/src/lang/ptbr.rs
@@ -284,5 +284,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("In privacy mode", "No modo de privacidade"),
("Out privacy mode", "Fora do modo de privacidade"),
("Language", ""),
+ ("Keep RustDesk background service", ""),
+ ("Ignore Battery Optimizations", ""),
+ ("android_open_battery_optimizations_tip", ""),
].iter().cloned().collect();
}
diff --git a/src/lang/ru.rs b/src/lang/ru.rs
index d421bd85e..7735e3db3 100644
--- a/src/lang/ru.rs
+++ b/src/lang/ru.rs
@@ -284,5 +284,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("In privacy mode", "В режиме конфиденциальности"),
("Out privacy mode", "Выход из режима конфиденциальности"),
("Language", "Язык"),
+ ("Keep RustDesk background service", ""),
+ ("Ignore Battery Optimizations", ""),
+ ("android_open_battery_optimizations_tip", ""),
].iter().cloned().collect();
}
diff --git a/src/lang/sk.rs b/src/lang/sk.rs
index 8c60abaa9..ea8d22aa8 100644
--- a/src/lang/sk.rs
+++ b/src/lang/sk.rs
@@ -284,5 +284,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("In privacy mode", "V režime súkromia"),
("Out privacy mode", "Mimo režimu súkromia"),
("Language", ""),
+ ("Keep RustDesk background service", ""),
+ ("Ignore Battery Optimizations", ""),
+ ("android_open_battery_optimizations_tip", ""),
].iter().cloned().collect();
}
diff --git a/src/lang/template.rs b/src/lang/template.rs
index ad963b323..9ea7146e1 100644
--- a/src/lang/template.rs
+++ b/src/lang/template.rs
@@ -284,5 +284,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("In privacy mode", ""),
("Out privacy mode", ""),
("Language", ""),
+ ("Keep RustDesk background service", ""),
+ ("Ignore Battery Optimizations", ""),
+ ("android_open_battery_optimizations_tip", ""),
].iter().cloned().collect();
}
diff --git a/src/lang/tr.rs b/src/lang/tr.rs
index d12b2881e..1d30425dc 100644
--- a/src/lang/tr.rs
+++ b/src/lang/tr.rs
@@ -284,5 +284,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("In privacy mode", "Gizlilik modunda"),
("Out privacy mode", "Gizlilik modu dışında"),
("Language", ""),
+ ("Keep RustDesk background service", ""),
+ ("Ignore Battery Optimizations", ""),
+ ("android_open_battery_optimizations_tip", ""),
].iter().cloned().collect();
}
diff --git a/src/lang/tw.rs b/src/lang/tw.rs
index 4f9813943..30c8f5a76 100644
--- a/src/lang/tw.rs
+++ b/src/lang/tw.rs
@@ -284,5 +284,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("In privacy mode", "開啟隱私模式"),
("Out privacy mode", "退出隱私模式"),
("Language", "語言"),
+ ("Keep RustDesk background service", "保持RustDesk後台服務"),
+ ("Ignore Battery Optimizations", "忽略電池優化"),
+ ("android_open_battery_optimizations_tip", "如需關閉此功能,請在接下來的RustDesk應用設置頁面中,找到並進入 [電源] 頁面,取消勾選 [不受限制]"),
].iter().cloned().collect();
}
diff --git a/src/lib.rs b/src/lib.rs
index 93cd67738..715a59b5c 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -12,6 +12,8 @@ mod client;
#[cfg(not(any(target_os = "ios")))]
mod rendezvous_mediator;
#[cfg(not(any(target_os = "ios")))]
+mod lan;
+#[cfg(not(any(target_os = "ios")))]
pub use self::rendezvous_mediator::*;
/// cbindgen:ignore
pub mod common;
diff --git a/src/mobile.rs b/src/mobile.rs
index 5b9651e54..d3adaaa79 100644
--- a/src/mobile.rs
+++ b/src/mobile.rs
@@ -591,7 +591,6 @@ impl Connection {
log::debug!("Exit io_loop of id={}", session.id);
}
Err(err) => {
- crate::common::test_rendezvous_server();
session.msgbox("error", "Connection Error", &err.to_string());
}
}
@@ -600,7 +599,7 @@ impl Connection {
async fn handle_msg_from_peer(&mut self, data: &[u8], peer: &mut Stream) -> bool {
if let Ok(msg_in) = Message::parse_from_bytes(&data) {
match msg_in.union {
- Some(message::Union::video_frame(vf)) => {
+ Some(message::Union::VideoFrame(vf)) => {
if !self.first_frame {
self.first_frame = true;
}
@@ -611,21 +610,21 @@ impl Connection {
s.add(ZeroCopyBuffer(self.video_handler.rgb.clone()));
}
}
- Some(message::Union::hash(hash)) => {
+ Some(message::Union::Hash(hash)) => {
self.session.handle_hash(hash, peer).await;
}
- Some(message::Union::login_response(lr)) => match lr.union {
- Some(login_response::Union::error(err)) => {
+ Some(message::Union::LoginResponse(lr)) => match lr.union {
+ Some(login_response::Union::Error(err)) => {
if !self.session.handle_login_error(&err) {
return false;
}
}
- Some(login_response::Union::peer_info(pi)) => {
+ Some(login_response::Union::PeerInfo(pi)) => {
self.session.handle_peer_info(pi);
}
_ => {}
},
- Some(message::Union::clipboard(cb)) => {
+ Some(message::Union::Clipboard(cb)) => {
if !self.session.lc.read().unwrap().disable_clipboard {
let content = if cb.compress {
decompress(&cb.content)
@@ -638,7 +637,7 @@ impl Connection {
}
}
}
- Some(message::Union::cursor_data(cd)) => {
+ Some(message::Union::CursorData(cd)) => {
let colors = hbb_common::compress::decompress(&cd.colors);
self.session.push_event(
"cursor_data",
@@ -655,18 +654,18 @@ impl Connection {
],
);
}
- Some(message::Union::cursor_id(id)) => {
+ Some(message::Union::CursorId(id)) => {
self.session
.push_event("cursor_id", vec![("id", &id.to_string())]);
}
- Some(message::Union::cursor_position(cp)) => {
+ Some(message::Union::CursorPosition(cp)) => {
self.session.push_event(
"cursor_position",
vec![("x", &cp.x.to_string()), ("y", &cp.y.to_string())],
);
}
- Some(message::Union::file_response(fr)) => match fr.union {
- Some(file_response::Union::dir(fd)) => {
+ Some(message::Union::FileResponse(fr)) => match fr.union {
+ Some(file_response::Union::Dir(fd)) => {
let mut entries = fd.entries.to_vec();
if self.session.peer_platform() == "Windows" {
fs::transform_windows_path(&mut entries);
@@ -680,7 +679,7 @@ impl Connection {
job.set_files(entries);
}
}
- Some(file_response::Union::block(block)) => {
+ Some(file_response::Union::Block(block)) => {
if let Some(job) = fs::get_job(block.id, &mut self.write_jobs) {
if let Err(_err) = job.write(block, None).await {
// to-do: add "skip" for writing job
@@ -688,17 +687,17 @@ impl Connection {
self.update_jobs_status();
}
}
- Some(file_response::Union::done(d)) => {
+ Some(file_response::Union::Done(d)) => {
if let Some(job) = fs::get_job(d.id, &mut self.write_jobs) {
job.modify_time();
fs::remove_job(d.id, &mut self.write_jobs);
}
self.handle_job_status(d.id, d.file_num, None);
}
- Some(file_response::Union::error(e)) => {
+ Some(file_response::Union::Error(e)) => {
self.handle_job_status(e.id, e.file_num, Some(e.error));
}
- Some(file_response::Union::digest(digest)) => {
+ Some(file_response::Union::Digest(digest)) => {
if digest.is_upload {
if let Some(job) = fs::get_job(digest.id, &mut self.read_jobs) {
if let Some(file) = job.files().get(digest.file_num as usize) {
@@ -709,9 +708,9 @@ impl Connection {
id: digest.id,
file_num: digest.file_num,
union: Some(if overwrite {
- file_transfer_send_confirm_request::Union::offset_blk(0)
+ file_transfer_send_confirm_request::Union::OffsetBlk(0)
} else {
- file_transfer_send_confirm_request::Union::skip(
+ file_transfer_send_confirm_request::Union::Skip(
true,
)
}),
@@ -741,7 +740,7 @@ impl Connection {
let msg= new_send_confirm(FileTransferSendConfirmRequest {
id: digest.id,
file_num: digest.file_num,
- union: Some(file_transfer_send_confirm_request::Union::skip(true)),
+ union: Some(file_transfer_send_confirm_request::Union::Skip(true)),
..Default::default()
});
self.session.send_msg(msg);
@@ -753,9 +752,9 @@ impl Connection {
id: digest.id,
file_num: digest.file_num,
union: Some(if overwrite {
- file_transfer_send_confirm_request::Union::offset_blk(0)
+ file_transfer_send_confirm_request::Union::OffsetBlk(0)
} else {
- file_transfer_send_confirm_request::Union::skip(true)
+ file_transfer_send_confirm_request::Union::Skip(true)
}),
..Default::default()
},
@@ -775,7 +774,7 @@ impl Connection {
FileTransferSendConfirmRequest {
id: digest.id,
file_num: digest.file_num,
- union: Some(file_transfer_send_confirm_request::Union::offset_blk(0)),
+ union: Some(file_transfer_send_confirm_request::Union::OffsetBlk(0)),
..Default::default()
},
);
@@ -792,15 +791,15 @@ impl Connection {
}
_ => {}
},
- Some(message::Union::misc(misc)) => match misc.union {
- Some(misc::Union::audio_format(f)) => {
+ Some(message::Union::Misc(misc)) => match misc.union {
+ Some(misc::Union::AudioFormat(f)) => {
self.audio_handler.handle_format(f); //
}
- Some(misc::Union::chat_message(c)) => {
+ Some(misc::Union::ChatMessage(c)) => {
self.session
.push_event("chat_client_mode", vec![("text", &c.text)]);
}
- Some(misc::Union::permission_info(p)) => {
+ Some(misc::Union::PermissionInfo(p)) => {
log::info!("Change permission {:?} -> {}", p.permission, p.enabled);
use permission_info::Permission;
self.session.push_event(
@@ -816,7 +815,7 @@ impl Connection {
)],
);
}
- Some(misc::Union::switch_display(s)) => {
+ Some(misc::Union::SwitchDisplay(s)) => {
self.video_handler.reset();
self.session.push_event(
"switch_display",
@@ -829,22 +828,22 @@ impl Connection {
],
);
}
- Some(misc::Union::close_reason(c)) => {
+ Some(misc::Union::CloseReason(c)) => {
self.session.msgbox("error", "Connection Error", &c);
return false;
}
_ => {}
},
- Some(message::Union::test_delay(t)) => {
+ Some(message::Union::TestDelay(t)) => {
self.session.handle_test_delay(t, peer).await;
}
- Some(message::Union::audio_frame(frame)) => {
+ Some(message::Union::AudioFrame(frame)) => {
if !self.session.lc.read().unwrap().disable_audio {
self.audio_handler.handle_frame(frame);
}
}
- Some(message::Union::file_action(action)) => match action.union {
- Some(file_action::Union::send_confirm(c)) => {
+ Some(message::Union::FileAction(action)) => match action.union {
+ Some(file_action::Union::SendConfirm(c)) => {
if let Some(job) = fs::get_job(c.id, &mut self.read_jobs) {
job.confirm(&c);
}
@@ -1030,9 +1029,9 @@ impl Connection {
id,
file_num,
union: if need_override {
- Some(file_transfer_send_confirm_request::Union::offset_blk(0))
+ Some(file_transfer_send_confirm_request::Union::OffsetBlk(0))
} else {
- Some(file_transfer_send_confirm_request::Union::skip(true))
+ Some(file_transfer_send_confirm_request::Union::Skip(true))
},
..Default::default()
});
@@ -1048,9 +1047,9 @@ impl Connection {
id,
file_num,
union: if need_override {
- Some(file_transfer_send_confirm_request::Union::offset_blk(0))
+ Some(file_transfer_send_confirm_request::Union::OffsetBlk(0))
} else {
- Some(file_transfer_send_confirm_request::Union::skip(true))
+ Some(file_transfer_send_confirm_request::Union::Skip(true))
},
..Default::default()
});
@@ -1452,7 +1451,7 @@ pub mod connection_manager {
let mut req = FileTransferSendConfirmRequest {
id,
file_num,
- union: Some(file_transfer_send_confirm_request::Union::offset_blk(0)),
+ union: Some(file_transfer_send_confirm_request::Union::OffsetBlk(0)),
..Default::default()
};
let digest = FileTransferDigest {
diff --git a/src/port_forward.rs b/src/port_forward.rs
index 36d011b37..6d7a25b68 100644
--- a/src/port_forward.rs
+++ b/src/port_forward.rs
@@ -183,7 +183,7 @@ async fn run_forward(forward: Framed, stream: Stream) ->
},
res = stream.next() => {
if let Some(Ok(bytes)) = res {
- allow_err!(forward.send(bytes.into()).await);
+ allow_err!(forward.send(bytes).await);
} else {
break;
}
diff --git a/src/rendezvous_mediator.rs b/src/rendezvous_mediator.rs
index a07a096ab..24e50f086 100644
--- a/src/rendezvous_mediator.rs
+++ b/src/rendezvous_mediator.rs
@@ -2,7 +2,7 @@ use crate::server::{check_zombie, new as new_server, ServerPtr};
use hbb_common::{
allow_err,
anyhow::bail,
- config::{self, Config, REG_INTERVAL, RENDEZVOUS_PORT, RENDEZVOUS_TIMEOUT},
+ config::{Config, REG_INTERVAL, RENDEZVOUS_PORT, RENDEZVOUS_TIMEOUT},
futures::future::join_all,
log,
protobuf::Message as _,
@@ -51,9 +51,12 @@ impl RendezvousMediator {
check_zombie();
let server = new_server();
if Config::get_nat_type() == NatType::UNKNOWN_NAT as i32 {
- crate::common::test_nat_type();
+ crate::test_nat_type();
nat_tested = true;
}
+ if !Config::get_option("stop-service").is_empty() {
+ crate::test_rendezvous_server();
+ }
let server_cloned = server.clone();
tokio::spawn(async move {
direct_server(server_cloned).await;
@@ -61,14 +64,14 @@ impl RendezvousMediator {
#[cfg(not(any(target_os = "android", target_os = "ios")))]
if crate::platform::is_installed() {
std::thread::spawn(move || {
- allow_err!(lan_discovery());
+ allow_err!(super::lan::start_listening());
});
}
loop {
Config::reset_online();
if Config::get_option("stop-service").is_empty() {
if !nat_tested {
- crate::common::test_nat_type();
+ crate::test_nat_type();
nat_tested = true;
}
let mut futs = Vec::new();
@@ -537,103 +540,3 @@ async fn direct_server(server: ServerPtr) {
}
}
}
-
-#[inline]
-pub fn get_broadcast_port() -> u16 {
- (RENDEZVOUS_PORT + 3) as _
-}
-
-pub fn get_mac() -> String {
- #[cfg(not(any(target_os = "android", target_os = "ios")))]
- if let Ok(Some(mac)) = mac_address::get_mac_address() {
- mac.to_string()
- } else {
- "".to_owned()
- }
- #[cfg(any(target_os = "android", target_os = "ios"))]
- "".to_owned()
-}
-
-fn lan_discovery() -> ResultType<()> {
- let addr = SocketAddr::from(([0, 0, 0, 0], get_broadcast_port()));
- let socket = std::net::UdpSocket::bind(addr)?;
- socket.set_read_timeout(Some(std::time::Duration::from_millis(1000)))?;
- log::info!("lan discovery listener started");
- loop {
- let mut buf = [0; 2048];
- if let Ok((len, addr)) = socket.recv_from(&mut buf) {
- if let Ok(msg_in) = Message::parse_from_bytes(&buf[0..len]) {
- match msg_in.union {
- Some(rendezvous_message::Union::PeerDiscovery(p)) => {
- if p.cmd == "ping" {
- let mut msg_out = Message::new();
- let peer = PeerDiscovery {
- cmd: "pong".to_owned(),
- mac: get_mac(),
- id: Config::get_id(),
- hostname: whoami::hostname(),
- username: crate::platform::get_active_username(),
- platform: whoami::platform().to_string(),
- ..Default::default()
- };
- msg_out.set_peer_discovery(peer);
- socket.send_to(&msg_out.write_to_bytes()?, addr).ok();
- }
- }
- _ => {}
- }
- }
- }
- }
-}
-
-pub fn discover() -> ResultType<()> {
- let addr = SocketAddr::from(([0, 0, 0, 0], 0));
- let socket = std::net::UdpSocket::bind(addr)?;
- socket.set_broadcast(true)?;
- let mut msg_out = Message::new();
- let peer = PeerDiscovery {
- cmd: "ping".to_owned(),
- ..Default::default()
- };
- msg_out.set_peer_discovery(peer);
- let maddr = SocketAddr::from(([255, 255, 255, 255], get_broadcast_port()));
- socket.send_to(&msg_out.write_to_bytes()?, maddr)?;
- log::info!("discover ping sent");
- let mut last_recv_time = Instant::now();
- let mut last_write_time = Instant::now();
- let mut last_write_n = 0;
- // to-do: load saved peers, and update incrementally (then we can see offline)
- let mut peers = Vec::new();
- let mac = get_mac();
- socket.set_read_timeout(Some(std::time::Duration::from_millis(10)))?;
- loop {
- let mut buf = [0; 2048];
- if let Ok((len, _)) = socket.recv_from(&mut buf) {
- if let Ok(msg_in) = Message::parse_from_bytes(&buf[0..len]) {
- match msg_in.union {
- Some(rendezvous_message::Union::PeerDiscovery(p)) => {
- last_recv_time = Instant::now();
- if p.cmd == "pong" {
- if p.mac != mac {
- peers.push((p.id, p.username, p.hostname, p.platform));
- }
- }
- }
- _ => {}
- }
- }
- }
- if last_write_time.elapsed().as_millis() > 300 && last_write_n != peers.len() {
- config::LanPeers::store(serde_json::to_string(&peers)?);
- last_write_time = Instant::now();
- last_write_n = peers.len();
- }
- if last_recv_time.elapsed().as_millis() > 3_000 {
- break;
- }
- }
- log::info!("discover ping done");
- config::LanPeers::store(serde_json::to_string(&peers)?);
- Ok(())
-}
diff --git a/src/server/connection.rs b/src/server/connection.rs
index 64ff6cbe9..677d8f238 100644
--- a/src/server/connection.rs
+++ b/src/server/connection.rs
@@ -492,7 +492,7 @@ impl Connection {
res = self.stream.next() => {
if let Some(res) = res {
last_recv_time = Instant::now();
- timeout(SEND_TIMEOUT_OTHER, forward.send(res?.into())).await??;
+ timeout(SEND_TIMEOUT_OTHER, forward.send(res?)).await??;
} else {
bail!("Stream reset by the peer");
}
diff --git a/src/server/video_qos.rs b/src/server/video_qos.rs
index efad1f9d9..b0e06bc03 100644
--- a/src/server/video_qos.rs
+++ b/src/server/video_qos.rs
@@ -147,7 +147,6 @@ impl VideoQoS {
// handle image_quality change from peer
pub fn update_image_quality(&mut self, image_quality: i32) {
let image_quality = Self::convert_quality(image_quality) as _;
- log::debug!("VideoQoS update_image_quality: {}", image_quality);
if self.current_image_quality != image_quality {
self.current_image_quality = image_quality;
let _ = self.generate_bitrate().ok();
@@ -171,7 +170,7 @@ impl VideoQoS {
#[cfg(target_os = "android")]
{
// fix when andorid screen shrinks
- let fix = Display::fix_quality() as u32;
+ let fix = scrap::Display::fix_quality() as u32;
log::debug!("Android screen, fix quality:{}", fix);
let base_bitrate = base_bitrate * fix;
self.target_bitrate = base_bitrate * self.current_image_quality / 100;
diff --git a/src/ui.rs b/src/ui.rs
index a1f9093d0..2b7ffcc29 100644
--- a/src/ui.rs
+++ b/src/ui.rs
@@ -541,6 +541,16 @@ impl UI {
PeerConfig::remove(&id);
}
+ fn remove_discovered(&mut self, id: String) {
+ let mut peers = config::LanPeers::load().peers;
+ peers.retain(|x| x.id != id);
+ config::LanPeers::store(&peers);
+ }
+
+ fn send_wol(&mut self, id: String) {
+ crate::lan::send_wol(id)
+ }
+
fn new_remote(&mut self, id: String, remote_type: String) {
let mut lock = self.0.lock().unwrap();
let args = vec![format!("--{}", remote_type), id.clone()];
@@ -685,12 +695,12 @@ impl UI {
fn discover(&self) {
std::thread::spawn(move || {
- allow_err!(crate::rendezvous_mediator::discover());
+ allow_err!(crate::lan::discover());
});
}
fn get_lan_peers(&self) -> String {
- config::LanPeers::load().peers
+ serde_json::to_string(&config::LanPeers::load().peers).unwrap_or_default()
}
fn get_uuid(&self) -> String {
@@ -780,7 +790,9 @@ impl sciter::EventHandler for UI {
fn closing(i32, i32, i32, i32);
fn get_size();
fn new_remote(String, bool);
+ fn send_wol(String);
fn remove_peer(String);
+ fn remove_discovered(String);
fn get_connect_status();
fn get_mouse_time();
fn check_mouse_time();
diff --git a/src/ui/ab.tis b/src/ui/ab.tis
index 716ff1ba6..28fa62352 100644
--- a/src/ui/ab.tis
+++ b/src/ui/ab.tis
@@ -318,9 +318,10 @@ class SessionList: Reactor.Component {
{translate('TCP Tunneling')}
{false && !handler.using_public_server() && {svg_checkmark}{translate('Always connect via relay')}}
RDP
+ {translate('WOL')}
- {translate('Rename')}
- {this.type != "fav" && this.type != "lan" && {translate('Remove')}}
+ {this.type != "lan" && {translate('Rename')}}
+ {this.type != "fav" && {translate('Remove')}}
{is_win && {translate('Create Desktop Shortcut')}}
{translate('Unremember Password')}
{(!this.type || this.type == "fav") && {translate('Add to Favorites')}}
@@ -419,6 +420,8 @@ class SessionList: Reactor.Component {
createNewConnect(id, "connect");
} else if (action == "transfer") {
createNewConnect(id, "file-transfer");
+ } else if (action == "wol") {
+ handler.send_wol(id);
} else if (action == "remove") {
if (this.type == "ab") {
for (var i = 0; i < ab.peers.length; ++i) {
@@ -429,6 +432,9 @@ class SessionList: Reactor.Component {
break;
}
}
+ } else if (this.type == "lan") {
+ handler.remove_discovered(id);
+ app.update();
} else {
handler.remove_peer(id);
app.update();
diff --git a/src/ui/macos.rs b/src/ui/macos.rs
index bb11e2750..63387fecb 100644
--- a/src/ui/macos.rs
+++ b/src/ui/macos.rs
@@ -258,10 +258,10 @@ pub fn check_main_window() {
let app = format!("/Applications/{}.app", crate::get_app_name());
let my_uid = sys
.process((std::process::id() as i32).into())
- .map(|x| x.uid)
+ .map(|x| x.user_id())
.unwrap_or_default();
for (_, p) in sys.processes().iter() {
- if p.cmd().len() == 1 && p.uid == my_uid && p.cmd()[0].contains(&app) {
+ if p.cmd().len() == 1 && p.user_id() == my_uid && p.cmd()[0].contains(&app) {
return;
}
}