From 0495f6d36ea49e4d9f2019a81010fe4cfd5ea910 Mon Sep 17 00:00:00 2001 From: KoxSosen <67807644+KoxSosen@users.noreply.github.com> Date: Tue, 12 Jul 2022 19:08:05 +0200 Subject: [PATCH 01/31] Hungrian translation --- src/lang.rs | 3 + src/lang/hu.rs | 288 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 291 insertions(+) create mode 100644 src/lang/hu.rs 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/hu.rs b/src/lang/hu.rs new file mode 100644 index 000000000..aef200bcf --- /dev/null +++ b/src/lang/hu.rs @@ -0,0 +1,288 @@ +azy_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", "A szolgáltatás elindítása"), + ("Service is running", "A szolgáltatás fut"), + ("Service is not running", "A szolgáltatás nem válaszol"), + ("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ál"), + ("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ítás"), + ("Stretch", "Nyújtás"), + ("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", "Smart 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", "Elérési Ú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ése"), + ("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", "Felfedezett"), + ("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", "Vászon mozgatása"), + ("Pinch to Zoom", "Húzd össze a nagyításhoz"), + ("Canvas Zoom", "Vászon Nagyítása"), + ("Reset canvas", "Vászon 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ása"), + ("CLOSE", "BEZÁR"), + ("OPEN", "MEGNYIT"), + ("Chat", "Chat"), + ("Total", "Összes"), + ("items", "Tárgyak"), + ("Selected", "Kiválasztott"), + ("Screen Capture", "Képernyőrögzítő"), + ("Input Control", "Input Kontrol"), + ("Audio Capture", "Audió Rögzítés"), + ("File Connection", "Fájlkapcsolat"), + ("Screen Connection", "kijelző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 \"Kijelzőfelvétel\" bekapcsolása automatikusan elindítja majd a szolgáltatás, ami megengedi más eszközöknek hogy kérést kezdeményezzenek az eszközöd 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 az 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őfotó készítése] 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/en/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érek 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"), + ].iter().cloned().collect(); +} \ No newline at end of file From bb67ba92bdeb3c655dfba2dee5a0ef922f2534e4 Mon Sep 17 00:00:00 2001 From: KoxSosen <67807644+KoxSosen@users.noreply.github.com> Date: Tue, 12 Jul 2022 19:18:12 +0200 Subject: [PATCH 02/31] Ooops --- src/lang/hu.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/hu.rs b/src/lang/hu.rs index aef200bcf..3e8ff9eee 100644 --- a/src/lang/hu.rs +++ b/src/lang/hu.rs @@ -1,4 +1,4 @@ -azy_static::lazy_static! { +lazy_static::lazy_static! { pub static ref T: std::collections::HashMap<&'static str, &'static str> = [ ("Status", "Státusz"), From 7055826e5dc71586b6e4c603a61b11632be157db Mon Sep 17 00:00:00 2001 From: Simon <67807644+KoxSosen@users.noreply.github.com> Date: Wed, 13 Jul 2022 10:17:22 +0200 Subject: [PATCH 03/31] Android fixes --- src/lang/hu.rs | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/lang/hu.rs b/src/lang/hu.rs index 3e8ff9eee..f4453cbe0 100644 --- a/src/lang/hu.rs +++ b/src/lang/hu.rs @@ -9,9 +9,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("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", "A szolgáltatás elindítá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 válaszol"), + ("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"), @@ -244,14 +244,14 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No permission of file transfer", "Nincs jogod fájl transzer indításához"), ("Note", "Megyjegyzés"), ("Connection", "Kapcsolat"), - ("Share Screen", "Képernyő Megosztása"), - ("CLOSE", "BEZÁR"), - ("OPEN", "MEGNYIT"), + ("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ő"), + ("Screen Capture", "Képernyőrögzítés"), ("Input Control", "Input Kontrol"), ("Audio Capture", "Audió Rögzítés"), ("File Connection", "Fájlkapcsolat"), @@ -262,10 +262,10 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("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 \"Kijelzőfelvétel\" bekapcsolása automatikusan elindítja majd a szolgáltatás, ami megengedi más eszközöknek hogy kérést kezdeményezzenek az eszközöd felé."), + ("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 az 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őfotó készítése] jogot az applikációnak hogy elindítsd a képernyőmegosztó szolgáltatást."), + ("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?"), @@ -285,4 +285,4 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Out privacy mode", "Kilépés a privát módból"), ("Language", "Nyelv"), ].iter().cloned().collect(); -} \ No newline at end of file +} From 168fb76bf319e2c3c0557a1a86fa046db6c3cc18 Mon Sep 17 00:00:00 2001 From: Simon <67807644+KoxSosen@users.noreply.github.com> Date: Wed, 13 Jul 2022 10:24:51 +0200 Subject: [PATCH 04/31] Further fixes --- src/lang/hu.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/lang/hu.rs b/src/lang/hu.rs index f4453cbe0..b14a3f415 100644 --- a/src/lang/hu.rs +++ b/src/lang/hu.rs @@ -51,7 +51,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Cancel", "Mégsem"), ("Skip", "Kihagy"), ("Close", "Bezár"), - ("Retry", "Újrapróbál"), + ("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"), @@ -262,7 +262,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("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_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."), @@ -277,7 +277,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("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érek telepítsd a pluginokat"), + ("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"), From a08cdd96edc9007beb4800d240e86b8f98c8e2e0 Mon Sep 17 00:00:00 2001 From: KoxSosen <67807644+KoxSosen@users.noreply.github.com> Date: Wed, 13 Jul 2022 15:18:59 +0200 Subject: [PATCH 05/31] More fixes, Hungarian README --- README-HU.md | 182 +++++++++++++++++++++++++++++++++++++++++++++++++ src/lang/hu.rs | 20 +++--- 2 files changed, 192 insertions(+), 10 deletions(-) create mode 100644 README-HU.md diff --git a/README-HU.md b/README-HU.md new file mode 100644 index 000000000..c699a61f5 --- /dev/null +++ b/README-HU.md @@ -0,0 +1,182 @@ +

+ RustDesk - Your remote desktop
+ 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) + +[![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/I2I04VU09) + +Még egy távoli elérésű asztali szoftwer, Rust-ban írva. Működik mindenféle konfiguráció nélkül, feltelepítéssel, vagy a nélkül. A saját adataidat teljesen te kezeled, nincs szükség aggódásra a biztonságuk felől. Használhatod a RustDesk punblikus randevú/relay szerverét, vagy szervereit, [hostolhatsz sajátot](https://rustdesk.com/server), vagy akár [írhatsz is egyet](https://github.com/rustdesk/rustdesk-server-demo). + +![image](https://user-images.githubusercontent.com/71636191/171661982-430285f0-2e12-4b1d-9957-4a58e375304d.png) + +A RustDesk szívesen fogad hozzájárulást, 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) + +[Get it on F-Droid](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/en/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 `` opció 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 + +![image](https://user-images.githubusercontent.com/71636191/113112362-ae4deb80-923b-11eb-957d-ff88daad4f06.png) + +![image](https://user-images.githubusercontent.com/71636191/113112619-f705a480-923b-11eb-911d-97e984ef52b6.png) + +![image](https://user-images.githubusercontent.com/71636191/113112857-3fbd5d80-923c-11eb-9836-768325faf906.png) + +![image](https://user-images.githubusercontent.com/71636191/135385039-38fdbd72-379a-422d-b97f-33df71fb1cec.png) diff --git a/src/lang/hu.rs b/src/lang/hu.rs index b14a3f415..ccf221f3e 100644 --- a/src/lang/hu.rs +++ b/src/lang/hu.rs @@ -101,8 +101,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Unblock user input", "Felhasználói input blokkolásának feloldása"), ("Adjust Window", "Ablakméret beállítása"), ("Original", "Eredeti"), - ("Shrink", "Zsugorítás"), - ("Stretch", "Nyújtás"), + ("Shrink", "Zsugorított"), + ("Stretch", "Nyújtott"), ("Good image quality", "Jó képminőség"), ("Balanced", "Balanszolt"), ("Optimize reaction time", "Válaszidő optimializálása"), @@ -137,7 +137,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Install", "Telepítés"), ("Installation", "Telepítés"), ("Installation Path", "Telepítési útvonal"), - ("Create start menu shortcuts", "Smart menu parancsikon létrehozása"), + ("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"), @@ -176,7 +176,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Rename", "Átnevezés"), ("Space", "Hely"), ("Create Desktop Shortcut", "Asztali Parancsikon Lértehozása"), - ("Change Path", "Elérési Útvonal Megváltoztatá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"), @@ -198,7 +198,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Login", "Belépés"), ("Logout", "Kilépés"), ("Tags", "Tagok"), - ("Search ID", "ID keresése"), + ("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"), @@ -217,7 +217,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Invalid folder name", "Helytelen fájlnév"), ("Socks5 Proxy", "Socks5-ös Proxy"), ("Hostname", "Hostnév"), - ("Discovered", "Felfedezett"), + ("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"), @@ -237,10 +237,10 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Three-Finger vertically", "Három ujj függőlegesen"), ("Mouse Wheel", "Egérgörgő"), ("Two-Finger Move", "Kátújas mozgatás"), - ("Canvas Move", "Vászon mozgatása"), + ("Canvas Move", "Nézet Mozgatása"), ("Pinch to Zoom", "Húzd össze a nagyításhoz"), - ("Canvas Zoom", "Vászon Nagyítása"), - ("Reset canvas", "Vászon visszaállítása"), + ("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"), @@ -255,7 +255,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Input Control", "Input Kontrol"), ("Audio Capture", "Audió Rögzítés"), ("File Connection", "Fájlkapcsolat"), - ("Screen Connection", "kijelzőkapcsolat"), + ("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?"), From 121d3bb2b435dc6230337f6f397b492724038fb6 Mon Sep 17 00:00:00 2001 From: KoxSosen <67807644+KoxSosen@users.noreply.github.com> Date: Wed, 13 Jul 2022 15:25:58 +0200 Subject: [PATCH 06/31] Add HU and sync languages in READMEs --- README-AR.md | 2 +- README-CS.md | 2 +- README-DE.md | 2 +- README-EO.md | 2 +- README-ES.md | 2 +- README-FA.md | 2 +- README-FI.md | 2 +- README-FR.md | 2 +- README-HU.md | 6 +++--- README-ID.md | 2 +- README-IT.md | 2 +- README-JP.md | 2 +- README-KR.md | 2 +- README-ML.md | 2 +- README-NL.md | 2 +- README-PL.md | 2 +- README-PTBR.md | 2 +- README-RU.md | 2 +- README-ZH.md | 2 +- README.md | 2 +- 20 files changed, 22 insertions(+), 22 deletions(-) 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 @@ DockerStructureSnapshot
- [č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 @@ DockerStrukturaUká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..ab76ea478 100644 --- a/README-DE.md +++ b/README-DE.md @@ -5,7 +5,7 @@ DockerDateistrukturScreenshots
- [中文] | [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

diff --git a/README-EO.md b/README-EO.md index 21a4f9521..f70f54ff6 100644 --- a/README-EO.md +++ b/README-EO.md @@ -5,7 +5,7 @@ DockerStrukturoEkrankopio
- [中文] | [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

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 @@ DockerEstructuraCaptura 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..033709a80 100644 --- a/README-FA.md +++ b/README-FA.md @@ -5,7 +5,7 @@ داکرساختسرور
- [č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 به زبان مادری شما به کمکتون نیاز داریم

diff --git a/README-FI.md b/README-FI.md index a2d7534e0..27ccb75b6 100644 --- a/README-FI.md +++ b/README-FI.md @@ -5,7 +5,7 @@ DockerRakenneTilannevedos
- [中文] | [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

diff --git a/README-FR.md b/README-FR.md index b1f8e3670..1709c3274 100644 --- a/README-FR.md +++ b/README-FR.md @@ -5,7 +5,7 @@ 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.

diff --git a/README-HU.md b/README-HU.md index c699a61f5..088599701 100644 --- a/README-HU.md +++ b/README-HU.md @@ -2,9 +2,9 @@ RustDesk - Your remote desktop
SzerverekÉpítés • - Docker • + DockerStruktúra • - Képernyőképek
+ 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

@@ -13,7 +13,7 @@ Beszélgess velünk: [Discord](https://discord.gg/nDceKgxnkV) | [Twitter](https: [![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/I2I04VU09) -Még egy távoli elérésű asztali szoftwer, Rust-ban írva. Működik mindenféle konfiguráció nélkül, feltelepítéssel, vagy a nélkül. A saját adataidat teljesen te kezeled, nincs szükség aggódásra a biztonságuk felől. Használhatod a RustDesk punblikus randevú/relay szerverét, vagy szervereit, [hostolhatsz sajátot](https://rustdesk.com/server), vagy akár [írhatsz is egyet](https://github.com/rustdesk/rustdesk-server-demo). +Még 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 a nélkül. A saját adataidat teljesen te kezeled, nincs szükség aggódásra a biztonságuk felől. Használhatod a RustDesk punblikus randevú/relay szerverét, vagy szervereit, [hostolhatsz sajátot](https://rustdesk.com/server), vagy akár [írhatsz is egyet](https://github.com/rustdesk/rustdesk-server-demo). ![image](https://user-images.githubusercontent.com/71636191/171661982-430285f0-2e12-4b1d-9957-4a58e375304d.png) diff --git a/README-ID.md b/README-ID.md index 624336f45..632271cd4 100644 --- a/README-ID.md +++ b/README-ID.md @@ -5,7 +5,7 @@ DockerStructureSnapshot
- [中文] | [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

diff --git a/README-IT.md b/README-IT.md index 7eba7860a..05491af31 100644 --- a/README-IT.md +++ b/README-IT.md @@ -5,7 +5,7 @@ DockerStrutturaScreenshots
- [中文] | [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

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 @@ DockerStructureSnapshot
- [中文] | [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 @@ DockerStructureSnapshot
- [中文] | [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..fba4822b1 100644 --- a/README-ML.md +++ b/README-ML.md @@ -5,7 +5,7 @@ DockerStructureSnapshot
- [中文] | [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 നിങ്ങളുടെ മാതൃഭാഷയിലേക്ക് വിവർത്തനം ചെയ്യാൻ ഞങ്ങൾക്ക് നിങ്ങളുടെ സഹായം ആവശ്യമാണ്

diff --git a/README-NL.md b/README-NL.md index 2d87504db..11ecc622c 100644 --- a/README-NL.md +++ b/README-NL.md @@ -5,7 +5,7 @@ DockerStructuurSnapshot
- [中文] | [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

diff --git a/README-PL.md b/README-PL.md index 162ca7648..d525f65c1 100644 --- a/README-PL.md +++ b/README-PL.md @@ -5,7 +5,7 @@ DockerStrukturaSnapshot
- [中文] | [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

diff --git a/README-PTBR.md b/README-PTBR.md index 76b360283..bb6a25cbf 100644 --- a/README-PTBR.md +++ b/README-PTBR.md @@ -5,7 +5,7 @@ DockerEstruturaScreenshots
- [中文] | [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

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 @@ DockerStructureSnapshot
- [中文] | [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 @@ DockerStructureSnapshot
- [č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

From 01fc7521ff3a3a9fac5d5a8238b76870aae50833 Mon Sep 17 00:00:00 2001 From: KoxSosen <67807644+KoxSosen@users.noreply.github.com> Date: Wed, 13 Jul 2022 17:00:18 +0200 Subject: [PATCH 07/31] Finishing --- README-HU.md | 8 ++++---- src/lang/hu.rs | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/README-HU.md b/README-HU.md index 088599701..eeeaaa37d 100644 --- a/README-HU.md +++ b/README-HU.md @@ -13,11 +13,11 @@ Beszélgess velünk: [Discord](https://discord.gg/nDceKgxnkV) | [Twitter](https: [![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/I2I04VU09) -Még 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 a nélkül. A saját adataidat teljesen te kezeled, nincs szükség aggódásra a biztonságuk felől. Használhatod a RustDesk punblikus randevú/relay szerverét, vagy szervereit, [hostolhatsz sajátot](https://rustdesk.com/server), vagy akár [írhatsz is egyet](https://github.com/rustdesk/rustdesk-server-demo). +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). ![image](https://user-images.githubusercontent.com/71636191/171661982-430285f0-2e12-4b1d-9957-4a58e375304d.png) -A RustDesk szívesen fogad hozzájárulást, támogatást mindenkitől. Lásd a [`CONTRIBUTING.md`](CONTRIBUTING.md) fájlt a kezdéshez. +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) @@ -57,7 +57,7 @@ A telefonos verziók Flutter-t hasznának. Később lehetséges hogy Sciterről - Futtasd a `cargo run` parancsot -## [Építés](https://rustdesk.com/docs/en/dev/build/) +## [Építés](https://rustdesk.com/docs/hu/dev/build/) ## Hogyan építs Linuxon @@ -143,7 +143,7 @@ Ezután, minden egyes alkalommal amikor meg kell építened a RustDesk-et, futta 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 `` opció 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: +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 diff --git a/src/lang/hu.rs b/src/lang/hu.rs index ccf221f3e..d6a656709 100644 --- a/src/lang/hu.rs +++ b/src/lang/hu.rs @@ -270,7 +270,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("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/en/manual/mac/#enable-permissions"), + ("doc_mac_permission", "https://rustdesk.com/docs/hu/manual/mac/#enable-permissions"), ("Help", "Segítség"), ("Failed", "Sikertelen"), ("Succeeded", "Sikeres"), From 7a00b927ce8569beeccbf9dafb0f4c2ac85bc648 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Wed, 13 Jul 2022 23:38:35 +0800 Subject: [PATCH 08/31] typo --- src/lang/hu.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/hu.rs b/src/lang/hu.rs index d6a656709..e7a95870e 100644 --- a/src/lang/hu.rs +++ b/src/lang/hu.rs @@ -262,7 +262,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("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_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."), From bb8257b7f29a8a6f3ee7d6f1fd4e7992846a2341 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Thu, 14 Jul 2022 15:21:26 +0800 Subject: [PATCH 09/31] https://github.com/rustdesk/rustdesk/issues/899 --- src/client.rs | 22 +++++++++++--- src/common.rs | 62 ++++++++++++++++++++++++++++++-------- src/ipc.rs | 30 +++++++++++++++--- src/mobile.rs | 1 - src/rendezvous_mediator.rs | 7 +++-- 5 files changed, 98 insertions(+), 24 deletions(-) diff --git a/src/client.rs b/src/client.rs index d63ce970c..c6ccd2c26 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 667dd3e7e..5ef127f46 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,59 @@ 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) { + 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 +390,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 +474,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/mobile.rs b/src/mobile.rs index 5b9651e54..942510b17 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()); } } diff --git a/src/rendezvous_mediator.rs b/src/rendezvous_mediator.rs index a7f90b977..e2397fa16 100644 --- a/src/rendezvous_mediator.rs +++ b/src/rendezvous_mediator.rs @@ -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; @@ -68,7 +71,7 @@ impl RendezvousMediator { 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(); From fb02fc11970bf9756a6e9180d1ba2d84b783c633 Mon Sep 17 00:00:00 2001 From: csf Date: Thu, 14 Jul 2022 17:44:37 +0800 Subject: [PATCH 10/31] [android] fix build; ignore battery optimizations --- .../android/app/src/main/AndroidManifest.xml | 1 + .../kotlin/com/carriez/flutter_hbb/common.kt | 26 ++++++- flutter/lib/common.dart | 7 +- flutter/lib/pages/settings_page.dart | 70 ++++++++++++++++--- src/common.rs | 3 + src/lang/cn.rs | 2 + src/lang/cs.rs | 2 + src/lang/da.rs | 2 + src/lang/de.rs | 2 + src/lang/eo.rs | 2 + src/lang/es.rs | 2 + src/lang/fr.rs | 2 + src/lang/hu.rs | 4 +- src/lang/id.rs | 2 + src/lang/it.rs | 2 + src/lang/ptbr.rs | 2 + src/lang/ru.rs | 2 + src/lang/sk.rs | 2 + src/lang/template.rs | 2 + src/lang/tr.rs | 2 + src/lang/tw.rs | 2 + src/server/video_qos.rs | 2 +- 22 files changed, 128 insertions(+), 15 deletions(-) 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/common.kt b/flutter/android/app/src/main/kotlin/com/carriez/flutter_hbb/common.kt index 7ce7d3ecc..3cb3ae581 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,19 @@ 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 + } "audio" -> { Permission.RECORD_AUDIO } @@ -52,7 +69,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 +81,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..1b36c548b 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -260,7 +260,7 @@ class PermissionManager { static Timer? _timer; static var _current = ""; - static final permissions = ["audio", "file"]; + static final permissions = ["audio", "file", "ignore_battery_optimizations"]; static bool isWaitingFile() { if (_completer != null) { @@ -279,9 +279,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/settings_page.dart b/flutter/lib/pages/settings_page.dart index 2c8b7fe9a..5bbc8dc96 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'; @@ -26,11 +28,69 @@ class SettingsPage extends StatefulWidget implements PageShape { class _SettingsState extends State { static const url = 'https://rustdesk.com/'; + var _showIgnoreBattery = false; + + @override + void initState() { + super.initState(); + if (androidVersion >= 26) { + () async { + final res = + await PermissionManager.check("ignore_battery_optimizations"); + if (_showIgnoreBattery != !res) { + setState(() { + _showIgnoreBattery = !res; + }); + } + }(); + } + } @override Widget build(BuildContext context) { Provider.of(context); final username = getUsername(); + final settingsTiles = [ + SettingsTile.navigation( + title: Text(translate('ID/Relay Server')), + leading: Icon(Icons.cloud), + onPressed: (context) { + showServerSettings(); + }, + ), + SettingsTile.navigation( + title: Text(translate('Enhancements')), + leading: Icon(Icons.tune), + onPressed: (context) {}, + ), + ]; + if (_showIgnoreBattery) { + settingsTiles.add(SettingsTile.navigation( + title: Text(translate('Keep RustDesk background service')), + description: Text('* ${translate('Ignore Battery Optimizations')}'), + leading: Icon(Icons.settings_backup_restore), + onPressed: (context) { + PermissionManager.request("ignore_battery_optimizations"); + var count = 0; + Timer.periodic(Duration(seconds: 1), (timer) async { + debugPrint("BatteryOpt Timer, count:$count"); + if (count > 5) { + count = 0; + timer.cancel(); + } + if (await PermissionManager.check( + "ignore_battery_optimizations")) { + count = 0; + timer.cancel(); + setState(() { + _showIgnoreBattery = false; + }); + } + count++; + }); + })); + } + return SettingsList( sections: [ SettingsSection( @@ -53,15 +113,7 @@ class _SettingsState extends State { ), SettingsSection( title: Text(translate("Settings")), - tiles: [ - SettingsTile.navigation( - title: Text(translate('ID/Relay Server')), - leading: Icon(Icons.cloud), - onPressed: (context) { - showServerSettings(); - }, - ), - ], + tiles: settingsTiles, ), SettingsSection( title: Text(translate("About")), diff --git a/src/common.rs b/src/common.rs index 5ef127f46..b40c1a686 100644 --- a/src/common.rs +++ b/src/common.rs @@ -316,6 +316,9 @@ async fn test_nat_type_() -> ResultType { } 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(..) diff --git a/src/lang/cn.rs b/src/lang/cn.rs index ba8e6d178..ba85d7f39 100644 --- a/src/lang/cn.rs +++ b/src/lang/cn.rs @@ -284,5 +284,7 @@ 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", "忽略电池优化"), ].iter().cloned().collect(); } diff --git a/src/lang/cs.rs b/src/lang/cs.rs index 3c92ee71b..e12bc6075 100644 --- a/src/lang/cs.rs +++ b/src/lang/cs.rs @@ -284,5 +284,7 @@ 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", ""), ].iter().cloned().collect(); } diff --git a/src/lang/da.rs b/src/lang/da.rs index 16b98359b..f8c676376 100644 --- a/src/lang/da.rs +++ b/src/lang/da.rs @@ -284,5 +284,7 @@ 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", ""), ].iter().cloned().collect(); } diff --git a/src/lang/de.rs b/src/lang/de.rs index c2fd56002..8685e764d 100644 --- a/src/lang/de.rs +++ b/src/lang/de.rs @@ -284,5 +284,7 @@ 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", ""), ].iter().cloned().collect(); } diff --git a/src/lang/eo.rs b/src/lang/eo.rs index c9701d63a..5952f51a1 100644 --- a/src/lang/eo.rs +++ b/src/lang/eo.rs @@ -284,5 +284,7 @@ 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", ""), ].iter().cloned().collect(); } diff --git a/src/lang/es.rs b/src/lang/es.rs index 60cc05341..9e12ed430 100644 --- a/src/lang/es.rs +++ b/src/lang/es.rs @@ -284,5 +284,7 @@ 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", ""), ].iter().cloned().collect(); } diff --git a/src/lang/fr.rs b/src/lang/fr.rs index f447c5acd..5e223b262 100644 --- a/src/lang/fr.rs +++ b/src/lang/fr.rs @@ -284,5 +284,7 @@ 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", ""), ].iter().cloned().collect(); } diff --git a/src/lang/hu.rs b/src/lang/hu.rs index e7a95870e..ab890766e 100644 --- a/src/lang/hu.rs +++ b/src/lang/hu.rs @@ -270,7 +270,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("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"), + ("doc_mac_permission", "https://rustdesk.com/docs/hu/manual/mac/#enable-permissions"), ("Help", "Segítség"), ("Failed", "Sikertelen"), ("Succeeded", "Sikeres"), @@ -284,5 +284,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("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", ""), ].iter().cloned().collect(); } diff --git a/src/lang/id.rs b/src/lang/id.rs index b1c6aaa1e..e926ee4cf 100644 --- a/src/lang/id.rs +++ b/src/lang/id.rs @@ -284,5 +284,7 @@ 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", ""), ].iter().cloned().collect(); } diff --git a/src/lang/it.rs b/src/lang/it.rs index c756d2218..016363d4e 100644 --- a/src/lang/it.rs +++ b/src/lang/it.rs @@ -284,5 +284,7 @@ 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", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ptbr.rs b/src/lang/ptbr.rs index 946e47d4c..e36672e5c 100644 --- a/src/lang/ptbr.rs +++ b/src/lang/ptbr.rs @@ -284,5 +284,7 @@ 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", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ru.rs b/src/lang/ru.rs index d421bd85e..d8f138223 100644 --- a/src/lang/ru.rs +++ b/src/lang/ru.rs @@ -284,5 +284,7 @@ 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", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sk.rs b/src/lang/sk.rs index 8c60abaa9..4f2a4a29f 100644 --- a/src/lang/sk.rs +++ b/src/lang/sk.rs @@ -284,5 +284,7 @@ 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", ""), ].iter().cloned().collect(); } diff --git a/src/lang/template.rs b/src/lang/template.rs index ad963b323..8feac4d3b 100644 --- a/src/lang/template.rs +++ b/src/lang/template.rs @@ -284,5 +284,7 @@ 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", ""), ].iter().cloned().collect(); } diff --git a/src/lang/tr.rs b/src/lang/tr.rs index d12b2881e..5bab8d8c9 100644 --- a/src/lang/tr.rs +++ b/src/lang/tr.rs @@ -284,5 +284,7 @@ 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", ""), ].iter().cloned().collect(); } diff --git a/src/lang/tw.rs b/src/lang/tw.rs index 4f9813943..8bc1392bb 100644 --- a/src/lang/tw.rs +++ b/src/lang/tw.rs @@ -284,5 +284,7 @@ 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", "忽略電池優化"), ].iter().cloned().collect(); } diff --git a/src/server/video_qos.rs b/src/server/video_qos.rs index efad1f9d9..87ae1cf33 100644 --- a/src/server/video_qos.rs +++ b/src/server/video_qos.rs @@ -171,7 +171,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; From 55427bad2fecdcbb8ee1910ce98e7c1bed909bb2 Mon Sep 17 00:00:00 2001 From: csf Date: Thu, 14 Jul 2022 18:33:41 +0800 Subject: [PATCH 11/31] [android] add Enhancements settings --- flutter/lib/pages/settings_page.dart | 88 ++++++++++++++++------------ 1 file changed, 51 insertions(+), 37 deletions(-) diff --git a/flutter/lib/pages/settings_page.dart b/flutter/lib/pages/settings_page.dart index 5bbc8dc96..7506d849f 100644 --- a/flutter/lib/pages/settings_page.dart +++ b/flutter/lib/pages/settings_page.dart @@ -50,45 +50,51 @@ class _SettingsState extends State { Widget build(BuildContext context) { Provider.of(context); final username = getUsername(); - final settingsTiles = [ - SettingsTile.navigation( - title: Text(translate('ID/Relay Server')), - leading: Icon(Icons.cloud), - onPressed: (context) { - showServerSettings(); + final enableAbr = FFI.getByName("option", "enable-abr") != 'N'; + final enhancementsTiles = [ + SettingsTile.switchTile( + leading: Icon(Icons.more_horiz), + 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(() {}); }, - ), - SettingsTile.navigation( - title: Text(translate('Enhancements')), - leading: Icon(Icons.tune), - onPressed: (context) {}, - ), + ) ]; if (_showIgnoreBattery) { - settingsTiles.add(SettingsTile.navigation( - title: Text(translate('Keep RustDesk background service')), - description: Text('* ${translate('Ignore Battery Optimizations')}'), - leading: Icon(Icons.settings_backup_restore), - onPressed: (context) { - PermissionManager.request("ignore_battery_optimizations"); - var count = 0; - Timer.periodic(Duration(seconds: 1), (timer) async { - debugPrint("BatteryOpt Timer, count:$count"); - if (count > 5) { - count = 0; - timer.cancel(); - } - if (await PermissionManager.check( - "ignore_battery_optimizations")) { - count = 0; - timer.cancel(); - setState(() { - _showIgnoreBattery = false; + enhancementsTiles.insert( + 0, + SettingsTile.navigation( + title: Text(translate('Keep RustDesk background service')), + description: + Text('* ${translate('Ignore Battery Optimizations')}'), + leading: Icon(Icons.battery_saver), + onPressed: (context) { + PermissionManager.request("ignore_battery_optimizations"); + var count = 0; + Timer.periodic(Duration(seconds: 1), (timer) async { + if (count > 5) { + count = 0; + timer.cancel(); + } + if (await PermissionManager.check( + "ignore_battery_optimizations")) { + count = 0; + timer.cancel(); + setState(() { + _showIgnoreBattery = false; + }); + } + count++; }); - } - count++; - }); - })); + })); } return SettingsList( @@ -111,9 +117,17 @@ class _SettingsState extends State { ), ], ), + 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("Settings")), - tiles: settingsTiles, + title: Text(translate("Enhancements")), + tiles: enhancementsTiles, ), SettingsSection( title: Text(translate("About")), From fdca9acbb78a031a071eca380057138af629db25 Mon Sep 17 00:00:00 2001 From: csf Date: Thu, 14 Jul 2022 18:36:54 +0800 Subject: [PATCH 12/31] [android] InputService mouse long press mode --- .../com/carriez/flutter_hbb/InputService.kt | 47 ++++++++++++------- 1 file changed, 31 insertions(+), 16 deletions(-) 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) { From 175ab0b58c26db24e3e809547ae250e73c96704f Mon Sep 17 00:00:00 2001 From: csf Date: Thu, 14 Jul 2022 21:46:40 +0800 Subject: [PATCH 13/31] remove log --- flutter/lib/pages/remote_page.dart | 3 ++- src/server/video_qos.rs | 1 - 2 files changed, 2 insertions(+), 2 deletions(-) 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/src/server/video_qos.rs b/src/server/video_qos.rs index 87ae1cf33..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(); From 9498b77c0a6649670519f46b6f266d1ba1d0380a Mon Sep 17 00:00:00 2001 From: rustdesk Date: Thu, 14 Jul 2022 23:26:03 +0800 Subject: [PATCH 14/31] minor version --- Cargo.lock | 62 ++++++++++++++++++-------------------- Cargo.toml | 2 +- libs/hbb_common/Cargo.toml | 4 +-- 3 files changed, 32 insertions(+), 36 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 884df3c56..3a5c34861 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2144,7 +2144,7 @@ dependencies = [ "log", "mac_address", "protobuf", - "protobuf-codegen-pure", + "protobuf-codegen", "quinn", "rand 0.8.5", "regex", @@ -3526,60 +3526,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" diff --git a/Cargo.toml b/Cargo.toml index f270f7b30..55a9d0a2a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -101,7 +101,7 @@ 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" diff --git a/libs/hbb_common/Cargo.toml b/libs/hbb_common/Cargo.toml index 000cbae96..355be3684 100644 --- a/libs/hbb_common/Cargo.toml +++ b/libs/hbb_common/Cargo.toml @@ -7,7 +7,7 @@ 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"] } +protobuf = { version = "3.1", features = ["with-bytes"] } tokio = { version = "1.15", features = ["full"] } tokio-util = { version = "0.6", features = ["full"] } futures = "0.3" @@ -38,7 +38,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"] } From d3fc6ccd9ca5412f3d49f5225e35d9e57fc6b891 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Fri, 15 Jul 2022 01:29:52 +0800 Subject: [PATCH 15/31] upgrade tokio --- Cargo.lock | 293 +++++++++++++++++++------------------ Cargo.toml | 4 +- libs/hbb_common/Cargo.toml | 4 +- src/port_forward.rs | 2 +- src/server/connection.rs | 2 +- 5 files changed, 154 insertions(+), 151 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3a5c34861..fb5c4cd12 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -29,6 +29,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" @@ -195,9 +206,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 +229,7 @@ checksum = "2c3d816ce6f0e2909a96830d6911c2aff044370b1ef92d7f267b43bae5addedd" dependencies = [ "atk-sys", "bitflags", - "glib 0.15.11", + "glib 0.15.12", "libc", ] @@ -277,9 +288,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 +373,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 +397,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", ] @@ -424,7 +435,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 +444,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 +455,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", @@ -553,9 +564,9 @@ 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", @@ -568,9 +579,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87eba3c8c7f42ef17f6c659fc7416d0f4758cd3e58861ee63c5fa4a4dde649e4" +checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5" dependencies = [ "os_str_bytes", ] @@ -582,7 +593,7 @@ dependencies = [ "cc", "hbb_common", "lazy_static", - "serde 1.0.137", + "serde 1.0.139", "serde_derive", "thiserror", ] @@ -693,7 +704,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", ] @@ -931,9 +942,9 @@ dependencies = [ [[package]] name = "crypto-common" -version = "0.1.3" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57952ca27b5e3606ff4dd79b0020231aaf9d6aa76dc05fd30137538c50bd3ce8" +checksum = "2ccfd8c0ee4cce11e45b3fd6f9d5e69e0cc62912aa6a0cb1bf4617b0eba5a12f" dependencies = [ "generic-array", "typenum", @@ -1156,9 +1167,9 @@ 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", @@ -1268,7 +1279,7 @@ checksum = "7f3f119846c823f9eafcf953a8f6ffb6ed69bf6240883261a7f13b634579a51f" dependencies = [ "lazy_static", "regex", - "serde 1.0.137", + "serde 1.0.139", "strsim 0.10.0", ] @@ -1295,9 +1306,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 +1328,7 @@ dependencies = [ "log", "objc", "pkg-config", - "serde 1.0.137", + "serde 1.0.139", "serde_derive", "unicode-segmentation", "winapi 0.3.9", @@ -1418,14 +1429,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 +1471,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 +1485,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 +1500,7 @@ dependencies = [ "pathdiff", "quote", "regex", - "serde 1.0.137", + "serde 1.0.139", "serde_yaml", "structopt", "syn", @@ -1500,9 +1511,9 @@ dependencies = [ [[package]] name = "flutter_rust_bridge_macros" -version = "1.34.2" +version = "1.37.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d4540ab97380ed5af0212f8b18ff84a5f32acc8247f8f731311516dd105363f" +checksum = "4b78a1a69afcf28951d0801e9be838b236734c8827a0eadbb71fb651aa2e9fed" [[package]] name = "fnv" @@ -1681,7 +1692,7 @@ dependencies = [ "gdk-pixbuf", "gdk-sys", "gio", - "glib 0.15.11", + "glib 0.15.12", "libc", "pango", ] @@ -1695,7 +1706,7 @@ dependencies = [ "bitflags", "gdk-pixbuf-sys", "gio", - "glib 0.15.11", + "glib 0.15.12", "libc", ] @@ -1768,16 +1779,16 @@ checksum = "78cc372d058dcf6d5ecd98510e7fbc9e5aec4d21de70f65fea8fecebcd881bd4" [[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 +1828,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 +2072,7 @@ dependencies = [ "gdk", "gdk-pixbuf", "gio", - "glib 0.15.11", + "glib 0.15.12", "gtk-sys", "gtk3-macros", "libc", @@ -2117,15 +2128,18 @@ dependencies = [ "indexmap", "slab", "tokio", - "tokio-util 0.7.3", + "tokio-util", "tracing", ] [[package]] name = "hashbrown" -version = "0.12.1" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db0d4cf898abf0081f964436dc980e96670a0f36863e4b83aaacdb65c9d7ccc3" +checksum = "607c8a29735385251a339424dd462993c0fed8fa09d378f259377df08c126022" +dependencies = [ + "ahash", +] [[package]] name = "hbb_common" @@ -2148,14 +2162,14 @@ dependencies = [ "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", "socket2 0.3.19", "sodiumoxide", "tokio", "tokio-socks", - "tokio-util 0.6.10", + "tokio-util", "toml", "winapi 0.3.9", "zstd", @@ -2234,21 +2248,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#adb15a681d69955048f85f5684525378289ab780" 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", @@ -2456,11 +2470,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,9 +2483,9 @@ 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", @@ -3160,9 +3174,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 +3206,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" @@ -3230,7 +3244,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 +3264,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 +3404,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", @@ -3832,8 +3846,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", @@ -3885,9 +3899,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", @@ -3896,9 +3910,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" @@ -3944,8 +3958,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", @@ -3991,8 +4005,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2bf099a1888612545b683d2661a1940089f6c2e5a8e38979b2159da876bfd956" dependencies = [ "libc", - "serde 1.0.137", - "serde_json 1.0.81", + "serde 1.0.139", + "serde_json 1.0.82", "winapi 0.3.9", ] @@ -4058,7 +4072,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", @@ -4095,9 +4109,9 @@ dependencies = [ "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", @@ -4265,8 +4279,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", @@ -4317,11 +4331,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]] @@ -4341,18 +4355,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", @@ -4373,13 +4387,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]] @@ -4391,18 +4405,18 @@ dependencies = [ "form_urlencoded", "itoa 1.0.2", "ryu", - "serde 1.0.137", + "serde 1.0.139", ] [[package]] name = "serde_yaml" -version = "0.8.24" +version = "0.8.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "707d15895415db6628332b737c838b88c598522e4dc70647e59b72312924aebc" +checksum = "1ec0091e1f5aa338283ce049bd9dfefd55e1f168ac233e85c1ffe0038fb48cbe" dependencies = [ "indexmap", "ryu", - "serde 1.0.137", + "serde 1.0.139", "yaml-rust", ] @@ -4454,7 +4468,7 @@ version = "0.1.0" dependencies = [ "confy", "hbb_common", - "serde 1.0.137", + "serde 1.0.139", "serde_derive", "walkdir", ] @@ -4473,9 +4487,9 @@ 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" @@ -4526,7 +4540,7 @@ dependencies = [ "ed25519", "libc", "libsodium-sys", - "serde 1.0.137", + "serde 1.0.139", ] [[package]] @@ -4827,10 +4841,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", @@ -4869,8 +4884,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", @@ -4880,23 +4895,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]] @@ -4907,8 +4906,12 @@ checksum = "cc463cd8deddc3770d20f9852143d50bf6094e640b485cb2e189a2099085ff45" dependencies = [ "bytes", "futures-core", + "futures-io", "futures-sink", + "futures-util", + "hashbrown", "pin-project-lite", + "slab", "tokio", "tracing", ] @@ -4919,7 +4922,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]] @@ -4942,9 +4945,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", @@ -5018,9 +5021,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" @@ -5036,9 +5039,9 @@ checksum = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c" [[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", ] @@ -5119,7 +5122,7 @@ dependencies = [ "cc", "hbb_common", "lazy_static", - "serde 1.0.137", + "serde 1.0.139", "serde_derive", "thiserror", ] @@ -5336,18 +5339,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" diff --git a/Cargo.toml b/Cargo.toml index 55a9d0a2a..ff17ac858 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -104,7 +104,7 @@ android_logger = "0.11" 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"] @@ -122,7 +122,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/libs/hbb_common/Cargo.toml b/libs/hbb_common/Cargo.toml index 355be3684..acb93c78b 100644 --- a/libs/hbb_common/Cargo.toml +++ b/libs/hbb_common/Cargo.toml @@ -8,8 +8,8 @@ edition = "2018" [dependencies] protobuf = { version = "3.1", features = ["with-bytes"] } -tokio = { version = "1.15", features = ["full"] } -tokio-util = { version = "0.6", features = ["full"] } +tokio = { version = "1.20", features = ["full"] } +tokio-util = { version = "0.7", features = ["full"] } futures = "0.3" bytes = "1.1" log = "0.4" 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/server/connection.rs b/src/server/connection.rs index e8344c4a7..dbf1545ae 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"); } From 7e0f7be95c6df7636c07d9445d477422420d78b5 Mon Sep 17 00:00:00 2001 From: fufesou Date: Tue, 12 Jul 2022 22:34:05 +0800 Subject: [PATCH 16/31] lan_discovery_WOL: mid commit Signed-off-by: fufesou --- Cargo.lock | 83 +++++++++++++++ Cargo.toml | 1 + src/rendezvous_mediator.rs | 209 ++++++++++++++++++++++++++++++------- src/ui/ab.tis | 4 +- 4 files changed, 256 insertions(+), 41 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index fb5c4cd12..e581e842e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1176,6 +1176,18 @@ dependencies = [ "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" @@ -2673,6 +2685,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" @@ -4080,6 +4098,7 @@ dependencies = [ "cpal", "ctrlc", "dasp", + "default-net", "dispatch", "enigo", "flexi_logger", @@ -4680,6 +4699,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" @@ -5450,6 +5490,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" @@ -5494,6 +5547,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" @@ -5506,6 +5565,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" @@ -5518,6 +5583,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" @@ -5530,6 +5601,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" @@ -5542,6 +5619,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" diff --git a/Cargo.toml b/Cargo.toml index ff17ac858..14cae5f9d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -55,6 +55,7 @@ rpassword = "6.0" base64 = "0.13" sysinfo = "0.23" num_cpus = "1.13" +default-net = "0.11.0" [target.'cfg(not(target_os = "linux"))'.dependencies] reqwest = { version = "0.11", features = ["json", "rustls-tls"], default-features=false } diff --git a/src/rendezvous_mediator.rs b/src/rendezvous_mediator.rs index 28f2dbc3f..42b8c49f2 100644 --- a/src/rendezvous_mediator.rs +++ b/src/rendezvous_mediator.rs @@ -1,4 +1,7 @@ -use crate::server::{check_zombie, new as new_server, ServerPtr}; +use crate::{ + ipc::get_id, + server::{check_zombie, new as new_server, ServerPtr}, +}; use hbb_common::{ allow_err, anyhow::bail, @@ -15,8 +18,9 @@ use hbb_common::{ udp::FramedSocket, AddrMangle, IntoTargetAddr, ResultType, TargetAddr, }; +use serde_derive::{Deserialize, Serialize}; use std::{ - net::SocketAddr, + net::{IpAddr, Ipv4Addr, SocketAddr, ToSocketAddrs, UdpSocket}, sync::{ atomic::{AtomicBool, Ordering}, Arc, Mutex, @@ -62,11 +66,9 @@ impl RendezvousMediator { direct_server(server_cloned).await; }); #[cfg(not(any(target_os = "android", target_os = "ios")))] - if crate::platform::is_installed() { - std::thread::spawn(move || { - allow_err!(lan_discovery()); - }); - } + std::thread::spawn(move || { + allow_err!(lan_discovery()); + }); loop { Config::reset_online(); if Config::get_option("stop-service").is_empty() { @@ -546,9 +548,19 @@ pub fn get_broadcast_port() -> u16 { (RENDEZVOUS_PORT + 3) as _ } -pub fn get_mac() -> String { +#[derive(Default, Serialize, Deserialize, Clone)] +pub struct DiscoveryPeer { + id: String, + mac: String, + ip: String, + username: String, + hostname: String, + platform: String, +} + +pub fn get_mac(ip: &IpAddr) -> String { #[cfg(not(any(target_os = "android", target_os = "ios")))] - if let Ok(Some(mac)) = mac_address::get_mac_address() { + if let Ok(mac) = get_mac_by_ip(ip) { mac.to_string() } else { "".to_owned() @@ -557,6 +569,56 @@ pub fn get_mac() -> String { "".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 +pub 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 lan_discovery() -> ResultType<()> { let addr = SocketAddr::from(([0, 0, 0, 0], get_broadcast_port())); let socket = std::net::UdpSocket::bind(addr)?; @@ -569,18 +631,20 @@ fn lan_discovery() -> ResultType<()> { 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(); + 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(); + } } } _ => {} @@ -590,10 +654,25 @@ fn lan_discovery() -> ResultType<()> { } } -pub fn discover() -> ResultType<()> { - let addr = SocketAddr::from(([0, 0, 0, 0], 0)); - let socket = std::net::UdpSocket::bind(addr)?; - socket.set_broadcast(true)?; +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(), @@ -601,25 +680,49 @@ pub fn discover() -> ResultType<()> { }; 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)?; + 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, +) -> ResultType> { 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)))?; + + socket.set_read_timeout(timeout)?; loop { let mut buf = [0; 2048]; - if let Ok((len, _)) = socket.recv_from(&mut buf) { + 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" { - if p.mac != mac { - peers.push((p.id, p.username, p.hostname, p.platform)); + let mac = if let Some(self_addr) = get_ipaddr_by_peer(&addr) { + get_mac(&self_addr) + } else { + "".to_owned() + }; + + let is_self = if !mac.is_empty() { + p.mac == mac + } else { + p.id == get_id() + }; + if !is_self { + peers.push(DiscoveryPeer { + id: p.id.clone(), + mac: p.mac.clone(), + ip: addr.to_string(), + username: p.username.clone(), + hostname: p.hostname.clone(), + platform: p.platform.clone(), + }); } } } @@ -627,15 +730,43 @@ pub fn discover() -> ResultType<()> { } } } - 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; } } + Ok(peers) +} + +pub fn discover() -> ResultType<()> { + let sockets = send_query()?; + let mut join_handles = Vec::new(); + for socket in sockets { + let handle = std::thread::spawn(move || { + wait_response(socket, Some(std::time::Duration::from_millis(10))) + }); + join_handles.push(handle); + } + + // to-do: load saved peers, and update incrementally (then we can see offline) + let mut peers: Vec = match serde_json::from_str(&config::LanPeers::load().peers) + { + Ok(p) => p, + _ => Vec::new(), + }; + + for handle in join_handles { + match handle.join() { + Ok(Ok(mut tmp)) => { + peers.append(&mut tmp); + } + Ok(Err(e)) => { + log::error!("Failed lan discove {e}"); + } + Err(e) => { + log::error!("Failed join lan discove thread {e:?}"); + } + } + } log::info!("discover ping done"); config::LanPeers::store(serde_json::to_string(&peers)?); Ok(()) diff --git a/src/ui/ab.tis b/src/ui/ab.tis index 716ff1ba6..f2c8746d4 100644 --- a/src/ui/ab.tis +++ b/src/ui/ab.tis @@ -526,7 +526,7 @@ class MultipleSessions: Reactor.Component {
{translate('Recent Sessions')} {translate('Favorites')} - {handler.is_installed() && {translate('Discovered')}} + {{translate('Discovered')}} {translate('Address Book')}
{!this.hidden && } @@ -534,7 +534,7 @@ class MultipleSessions: Reactor.Component { {!this.hidden && ((type == "fav" && ) || - (type == "lan" && handler.is_installed() && ) || + (type == "lan" && ) || (type == "ab" && ) || )} ; From cbb34fb0210baa70ca3b5accb80d5b262e47bc78 Mon Sep 17 00:00:00 2001 From: fufesou Date: Wed, 13 Jul 2022 11:18:53 +0800 Subject: [PATCH 17/31] lan_discovery_WOL: lan discovery almost done Signed-off-by: fufesou --- libs/hbb_common/src/udp.rs | 1 + src/rendezvous_mediator.rs | 122 +++++++++++++++++++++++++------------ 2 files changed, 85 insertions(+), 38 deletions(-) diff --git a/libs/hbb_common/src/udp.rs b/libs/hbb_common/src/udp.rs index 3532dd1e0..c2d5057f2 100644 --- a/libs/hbb_common/src/udp.rs +++ b/libs/hbb_common/src/udp.rs @@ -37,6 +37,7 @@ fn new_socket(addr: SocketAddr, reuse: bool, buf_size: usize) -> Result u16 { (RENDEZVOUS_PORT + 3) as _ } -#[derive(Default, Serialize, Deserialize, Clone)] +#[derive(Debug, Default, Serialize, Deserialize, Clone)] pub struct DiscoveryPeer { id: String, - mac: String, - ip: String, + mac_ips: HashMap, username: String, hostname: String, platform: String, + online: bool, +} + +impl DiscoveryPeer { + fn is_same_peer(&self, other: &DiscoveryPeer) -> bool { + self.id == other.id && self.username == other.username + } } pub fn get_mac(ip: &IpAddr) -> String { @@ -690,9 +695,9 @@ fn send_query() -> ResultType> { fn wait_response( socket: UdpSocket, timeout: Option, -) -> ResultType> { + tx: UnboundedSender, +) -> ResultType<()> { let mut last_recv_time = Instant::now(); - let mut peers = Vec::new(); socket.set_read_timeout(timeout)?; loop { @@ -709,20 +714,18 @@ fn wait_response( "".to_owned() }; - let is_self = if !mac.is_empty() { - p.mac == mac - } else { - p.id == get_id() - }; - if !is_self { - peers.push(DiscoveryPeer { + if mac != p.mac { + allow_err!(tx.send(DiscoveryPeer { id: p.id.clone(), - mac: p.mac.clone(), - ip: addr.to_string(), + mac_ips: HashMap::from([( + p.mac.clone(), + addr.ip().to_string() + )]), username: p.username.clone(), hostname: p.hostname.clone(), platform: p.platform.clone(), - }); + online: true, + })); } } } @@ -734,40 +737,83 @@ fn wait_response( break; } } - Ok(peers) + Ok(()) } -pub fn discover() -> ResultType<()> { - let sockets = send_query()?; - let mut join_handles = Vec::new(); +fn spawn_wait_responses(sockets: Vec) -> UnboundedReceiver { + let (tx, rx) = unbounded_channel::<_>(); for socket in sockets { - let handle = std::thread::spawn(move || { - wait_response(socket, Some(std::time::Duration::from_millis(10))) + let tx_clone = tx.clone(); + std::thread::spawn(move || { + allow_err!(wait_response( + socket, + Some(std::time::Duration::from_millis(10)), + tx_clone + )); }); - join_handles.push(handle); } + rx +} - // to-do: load saved peers, and update incrementally (then we can see offline) +async fn handle_received_peers(mut rx: UnboundedReceiver) -> ResultType<()> { let mut peers: Vec = match serde_json::from_str(&config::LanPeers::load().peers) { Ok(p) => p, _ => Vec::new(), }; + peers.iter_mut().for_each(|peer| { + peer.online = false; + }); - for handle in join_handles { - match handle.join() { - Ok(Ok(mut tmp)) => { - peers.append(&mut tmp); - } - Ok(Err(e)) => { - log::error!("Failed lan discove {e}"); - } - Err(e) => { - log::error!("Failed join lan discove thread {e:?}"); + // handle received peers + 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(peer) => { + let in_response_set = !response_set.insert(peer.id.clone()); + let mut pre_found = false; + for peer1 in &mut peers { + if peer1.is_same_peer(&peer) { + if in_response_set { + peer1.mac_ips.extend(peer.mac_ips.clone()); + peer1.hostname = peer.hostname.clone(); + peer1.platform = peer.platform.clone(); + peer1.online = true; + } else { + *peer1 = peer.clone(); + } + pre_found = true; + break + } + } + if !pre_found { + peers.push(peer); + } + + if last_write_time.elapsed().as_millis() > 300 { + config::LanPeers::store(serde_json::to_string(&peers)?); + last_write_time = Instant::now(); + } + } + None => { + break + } } } } - log::info!("discover ping done"); + config::LanPeers::store(serde_json::to_string(&peers)?); 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(()) +} From 897d2b8e5703de6671fd853fe6f5f0ec7e2c69dd Mon Sep 17 00:00:00 2001 From: fufesou Date: Wed, 13 Jul 2022 18:06:19 +0800 Subject: [PATCH 18/31] lan_discovery_WOL: remove discovered peer Signed-off-by: fufesou --- Cargo.lock | 23 +++++++++++++++++++++++ libs/hbb_common/Cargo.toml | 1 + libs/hbb_common/src/config.rs | 34 ++++++++++++++++++++++++++++++---- src/rendezvous_mediator.rs | 35 +++++++---------------------------- src/ui.rs | 9 ++++++++- src/ui/ab.tis | 5 ++++- 6 files changed, 73 insertions(+), 34 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e581e842e..894382389 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2177,6 +2177,7 @@ dependencies = [ "serde 1.0.139", "serde_derive", "serde_json 1.0.82", + "serde_with", "socket2 0.3.19", "sodiumoxide", "tokio", @@ -4427,6 +4428,28 @@ dependencies = [ "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 0.13.4", + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "serde_yaml" version = "0.8.25" diff --git a/libs/hbb_common/Cargo.toml b/libs/hbb_common/Cargo.toml index acb93c78b..6fec67193 100644 --- a/libs/hbb_common/Cargo.toml +++ b/libs/hbb_common/Cargo.toml @@ -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" diff --git a/libs/hbb_common/src/config.rs b/libs/hbb_common/src/config.rs index b4d8eaff3..ee8433770 100644 --- a/libs/hbb_common/src/config.rs +++ b/libs/hbb_common/src/config.rs @@ -856,10 +856,34 @@ impl LocalConfig { } } +#[derive(Debug, Default, Serialize, Deserialize, Clone)] +pub struct DiscoveryPeer { + pub id: String, + #[serde(with = "serde_with::rust::map_as_tuple_list")] + pub mac_ips: 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, + // #[serde(default)] + // pub peers: String, + pub peers: Vec, +} + +#[derive(Serialize, Deserialize)] +struct MyConfig { + version: u8, + api_key: String, } impl LanPeers { @@ -874,8 +898,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/src/rendezvous_mediator.rs b/src/rendezvous_mediator.rs index 9471ad4b7..d87357366 100644 --- a/src/rendezvous_mediator.rs +++ b/src/rendezvous_mediator.rs @@ -16,7 +16,6 @@ use hbb_common::{ udp::FramedSocket, AddrMangle, IntoTargetAddr, ResultType, TargetAddr, }; -use serde_derive::{Deserialize, Serialize}; use std::{ collections::{HashMap, HashSet}, net::{IpAddr, Ipv4Addr, SocketAddr, ToSocketAddrs, UdpSocket}, @@ -547,22 +546,6 @@ pub fn get_broadcast_port() -> u16 { (RENDEZVOUS_PORT + 3) as _ } -#[derive(Debug, Default, Serialize, Deserialize, Clone)] -pub struct DiscoveryPeer { - id: String, - mac_ips: HashMap, - username: String, - hostname: String, - platform: String, - online: bool, -} - -impl DiscoveryPeer { - fn is_same_peer(&self, other: &DiscoveryPeer) -> bool { - self.id == other.id && self.username == other.username - } -} - pub fn get_mac(ip: &IpAddr) -> String { #[cfg(not(any(target_os = "android", target_os = "ios")))] if let Ok(mac) = get_mac_by_ip(ip) { @@ -695,7 +678,7 @@ fn send_query() -> ResultType> { fn wait_response( socket: UdpSocket, timeout: Option, - tx: UnboundedSender, + tx: UnboundedSender, ) -> ResultType<()> { let mut last_recv_time = Instant::now(); @@ -715,7 +698,7 @@ fn wait_response( }; if mac != p.mac { - allow_err!(tx.send(DiscoveryPeer { + allow_err!(tx.send(config::DiscoveryPeer { id: p.id.clone(), mac_ips: HashMap::from([( p.mac.clone(), @@ -740,7 +723,7 @@ fn wait_response( Ok(()) } -fn spawn_wait_responses(sockets: Vec) -> UnboundedReceiver { +fn spawn_wait_responses(sockets: Vec) -> UnboundedReceiver { let (tx, rx) = unbounded_channel::<_>(); for socket in sockets { let tx_clone = tx.clone(); @@ -755,12 +738,8 @@ fn spawn_wait_responses(sockets: Vec) -> UnboundedReceiver) -> ResultType<()> { - let mut peers: Vec = match serde_json::from_str(&config::LanPeers::load().peers) - { - Ok(p) => p, - _ => Vec::new(), - }; +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; }); @@ -793,7 +772,7 @@ async fn handle_received_peers(mut rx: UnboundedReceiver) -> Resu } if last_write_time.elapsed().as_millis() > 300 { - config::LanPeers::store(serde_json::to_string(&peers)?); + config::LanPeers::store(&peers); last_write_time = Instant::now(); } } @@ -804,7 +783,7 @@ async fn handle_received_peers(mut rx: UnboundedReceiver) -> Resu } } - config::LanPeers::store(serde_json::to_string(&peers)?); + config::LanPeers::store(&peers); Ok(()) } diff --git a/src/ui.rs b/src/ui.rs index a1f9093d0..4bf201c0e 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -541,6 +541,12 @@ 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 new_remote(&mut self, id: String, remote_type: String) { let mut lock = self.0.lock().unwrap(); let args = vec![format!("--{}", remote_type), id.clone()]; @@ -690,7 +696,7 @@ impl UI { } 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 { @@ -781,6 +787,7 @@ impl sciter::EventHandler for UI { fn get_size(); fn new_remote(String, bool); 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 f2c8746d4..03768c6da 100644 --- a/src/ui/ab.tis +++ b/src/ui/ab.tis @@ -320,7 +320,7 @@ class SessionList: Reactor.Component {
  • RDP
  • {translate('Rename')}
  • - {this.type != "fav" && this.type != "lan" &&
  • {translate('Remove')}
  • } + {this.type != "fav" &&
  • {translate('Remove')}
  • } {is_win &&
  • {translate('Create Desktop Shortcut')}
  • }
  • {translate('Unremember Password')}
  • {(!this.type || this.type == "fav") &&
  • {translate('Add to Favorites')}
  • } @@ -429,6 +429,9 @@ class SessionList: Reactor.Component { break; } } + } else if (this.type == "lan") { + handler.remove_discovered(id); + app.update(); } else { handler.remove_peer(id); app.update(); From 7c323c86ac4f84a600d6f4f23030816fd4b98fae Mon Sep 17 00:00:00 2001 From: fufesou Date: Wed, 13 Jul 2022 18:14:50 +0800 Subject: [PATCH 19/31] lan_discovery_WOL: remove ununsed action for lan menu Signed-off-by: fufesou --- src/ui/ab.tis | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ui/ab.tis b/src/ui/ab.tis index 03768c6da..2fda2a5e1 100644 --- a/src/ui/ab.tis +++ b/src/ui/ab.tis @@ -319,9 +319,9 @@ class SessionList: Reactor.Component { {false && !handler.using_public_server() &&
  • {svg_checkmark}{translate('Always connect via relay')}
  • }
  • RDP
  • -
  • {translate('Rename')}
  • + {this.type != "lan" &&
  • {translate('Rename')}
  • } {this.type != "fav" &&
  • {translate('Remove')}
  • } - {is_win &&
  • {translate('Create Desktop Shortcut')}
  • } + {is_win && this.type != "lan" &&
  • {translate('Create Desktop Shortcut')}
  • }
  • {translate('Unremember Password')}
  • {(!this.type || this.type == "fav") &&
  • {translate('Add to Favorites')}
  • } {(!this.type || this.type == "fav") &&
  • {translate('Remove from Favorites')}
  • } From 8fd4830710151aff5c7aa1795f554a75a4570743 Mon Sep 17 00:00:00 2001 From: fufesou Date: Thu, 14 Jul 2022 10:34:56 +0800 Subject: [PATCH 20/31] lan_discovery_WOL: Win10 test done Signed-off-by: fufesou --- Cargo.lock | 25 +++++++++++++++++++++ Cargo.toml | 1 + libs/hbb_common/src/config.rs | 2 +- src/rendezvous_mediator.rs | 42 ++++++++++++++++++++++++++++++----- src/ui.rs | 5 +++++ src/ui/ab.tis | 5 ++++- 6 files changed, 72 insertions(+), 8 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 894382389..aa4c87dd8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -570,13 +570,28 @@ checksum = "ab8b79fe3946ceb4a0b1c080b4018992b8d27e9ff363644c1c9b6387c854614d" dependencies = [ "atty", "bitflags", + "clap_derive", "clap_lex", "indexmap", + "once_cell", "strsim 0.10.0", "termcolor", "textwrap 0.15.0", ] +[[package]] +name = "clap_derive" +version = "3.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed6db9e867166a43a53f7199b5e4d1f522a1e5bd626654be263c999ce59df39a" +dependencies = [ + "heck 0.4.0", + "proc-macro-error", + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "clap_lex" version = "0.2.4" @@ -4146,6 +4161,7 @@ dependencies = [ "winit", "winreg 0.10.1", "winres", + "wol-rs", ] [[package]] @@ -5713,6 +5729,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.6", +] + [[package]] name = "ws2_32-sys" version = "0.2.1" diff --git a/Cargo.toml b/Cargo.toml index 14cae5f9d..c008f7828 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -56,6 +56,7 @@ base64 = "0.13" sysinfo = "0.23" num_cpus = "1.13" 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 } diff --git a/libs/hbb_common/src/config.rs b/libs/hbb_common/src/config.rs index ee8433770..8d2437c30 100644 --- a/libs/hbb_common/src/config.rs +++ b/libs/hbb_common/src/config.rs @@ -860,7 +860,7 @@ impl LocalConfig { pub struct DiscoveryPeer { pub id: String, #[serde(with = "serde_with::rust::map_as_tuple_list")] - pub mac_ips: HashMap, + pub ip_mac: HashMap, pub username: String, pub hostname: String, pub platform: String, diff --git a/src/rendezvous_mediator.rs b/src/rendezvous_mediator.rs index d87357366..f4f4fb15c 100644 --- a/src/rendezvous_mediator.rs +++ b/src/rendezvous_mediator.rs @@ -700,10 +700,9 @@ fn wait_response( if mac != p.mac { allow_err!(tx.send(config::DiscoveryPeer { id: p.id.clone(), - mac_ips: HashMap::from([( - p.mac.clone(), - addr.ip().to_string() - )]), + ip_mac: HashMap::from([ + (addr.ip().to_string(), p.mac.clone(),) + ]), username: p.username.clone(), hostname: p.hostname.clone(), platform: p.platform.clone(), @@ -744,7 +743,6 @@ async fn handle_received_peers(mut rx: UnboundedReceiver) peer.online = false; }); - // handle received peers let mut response_set = HashSet::new(); let mut last_write_time = Instant::now() - std::time::Duration::from_secs(4); loop { @@ -753,20 +751,24 @@ async fn handle_received_peers(mut rx: UnboundedReceiver) Some(peer) => { let in_response_set = !response_set.insert(peer.id.clone()); let mut pre_found = false; + // Try find and update peer for peer1 in &mut peers { if peer1.is_same_peer(&peer) { if in_response_set { - peer1.mac_ips.extend(peer.mac_ips.clone()); + // Merge ip_mac and update other infos + peer1.ip_mac.extend(peer.ip_mac.clone()); peer1.hostname = peer.hostname.clone(); peer1.platform = peer.platform.clone(); peer1.online = true; } else { + // Update all peer infos *peer1 = peer.clone(); } pre_found = true; break } } + // Push if not found if !pre_found { peers.push(peer); } @@ -796,3 +798,31 @@ pub async fn discover() -> ResultType<()> { 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; + } + } +} diff --git a/src/ui.rs b/src/ui.rs index 4bf201c0e..084422f6b 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -547,6 +547,10 @@ impl UI { config::LanPeers::store(&peers); } + fn send_wol(&mut self, id: String) { + crate::rendezvous_mediator::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()]; @@ -786,6 +790,7 @@ 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(); diff --git a/src/ui/ab.tis b/src/ui/ab.tis index 2fda2a5e1..5b822ed22 100644 --- a/src/ui/ab.tis +++ b/src/ui/ab.tis @@ -318,10 +318,11 @@ class SessionList: Reactor.Component {
  • {translate('TCP Tunneling')}
  • {false && !handler.using_public_server() &&
  • {svg_checkmark}{translate('Always connect via relay')}
  • }
  • RDP
  • +
  • {translate('WOL')}
  • {this.type != "lan" &&
  • {translate('Rename')}
  • } {this.type != "fav" &&
  • {translate('Remove')}
  • } - {is_win && this.type != "lan" &&
  • {translate('Create Desktop Shortcut')}
  • } + {is_win &&
  • {translate('Create Desktop Shortcut')}
  • }
  • {translate('Unremember Password')}
  • {(!this.type || this.type == "fav") &&
  • {translate('Add to Favorites')}
  • } {(!this.type || this.type == "fav") &&
  • {translate('Remove from 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) { From eda08555061a73e12b66246dd4428047794096ba Mon Sep 17 00:00:00 2001 From: fufesou Date: Thu, 14 Jul 2022 03:35:00 +0800 Subject: [PATCH 21/31] lan_discovery_WOL: lan discovery test done Signed-off-by: fufesou --- src/rendezvous_mediator.rs | 8 +++++--- src/ui/ab.tis | 4 ++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/rendezvous_mediator.rs b/src/rendezvous_mediator.rs index f4f4fb15c..db087aa68 100644 --- a/src/rendezvous_mediator.rs +++ b/src/rendezvous_mediator.rs @@ -64,9 +64,11 @@ impl RendezvousMediator { direct_server(server_cloned).await; }); #[cfg(not(any(target_os = "android", target_os = "ios")))] - std::thread::spawn(move || { - allow_err!(lan_discovery()); - }); + if crate::platform::is_installed() { + std::thread::spawn(move || { + allow_err!(lan_discovery()); + }); + } loop { Config::reset_online(); if Config::get_option("stop-service").is_empty() { diff --git a/src/ui/ab.tis b/src/ui/ab.tis index 5b822ed22..28fa62352 100644 --- a/src/ui/ab.tis +++ b/src/ui/ab.tis @@ -532,7 +532,7 @@ class MultipleSessions: Reactor.Component {
    {translate('Recent Sessions')} {translate('Favorites')} - {{translate('Discovered')}} + {handler.is_installed() && {translate('Discovered')}} {translate('Address Book')}
    {!this.hidden && } @@ -540,7 +540,7 @@ class MultipleSessions: Reactor.Component {
    {!this.hidden && ((type == "fav" && ) || - (type == "lan" && ) || + (type == "lan" && handler.is_installed() && ) || (type == "ab" && ) || )}
    ; From 4955807dd081cb518da00be529973c2b80ab59c9 Mon Sep 17 00:00:00 2001 From: fufesou Date: Fri, 15 Jul 2022 11:35:23 +0800 Subject: [PATCH 22/31] lan_discovery_WOL: Update Cargo.lock Signed-off-by: fufesou --- Cargo.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index aa4c87dd8..adc152440 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -581,9 +581,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "3.2.6" +version = "3.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed6db9e867166a43a53f7199b5e4d1f522a1e5bd626654be263c999ce59df39a" +checksum = "759bf187376e1afa7b85b959e6a664a3e7a95203415dba952ad19139e798f902" dependencies = [ "heck 0.4.0", "proc-macro-error", @@ -5735,7 +5735,7 @@ version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d7f97e69b28b256ccfb02472c25057132e234aa8368fea3bb0268def564ce1f2" dependencies = [ - "clap 3.2.6", + "clap 3.2.12", ] [[package]] From 13406cd359d3fd1c3902d4e5b9813d77c8fcf77b Mon Sep 17 00:00:00 2001 From: fufesou Date: Fri, 15 Jul 2022 12:16:15 +0800 Subject: [PATCH 23/31] lan_discovery_WOL: sort by online status Signed-off-by: fufesou --- libs/hbb_common/src/config.rs | 2 -- rust-toolchain.toml | 2 ++ src/rendezvous_mediator.rs | 29 +++++++---------------------- 3 files changed, 9 insertions(+), 24 deletions(-) create mode 100644 rust-toolchain.toml diff --git a/libs/hbb_common/src/config.rs b/libs/hbb_common/src/config.rs index 8d2437c30..d05831c03 100644 --- a/libs/hbb_common/src/config.rs +++ b/libs/hbb_common/src/config.rs @@ -875,8 +875,6 @@ impl DiscoveryPeer { #[derive(Debug, Default, Serialize, Deserialize, Clone)] pub struct LanPeers { - // #[serde(default)] - // pub peers: String, pub peers: Vec, } 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/rendezvous_mediator.rs b/src/rendezvous_mediator.rs index db087aa68..8da1937a7 100644 --- a/src/rendezvous_mediator.rs +++ b/src/rendezvous_mediator.rs @@ -750,31 +750,16 @@ async fn handle_received_peers(mut rx: UnboundedReceiver) loop { tokio::select! { data = rx.recv() => match data { - Some(peer) => { + Some(mut peer) => { let in_response_set = !response_set.insert(peer.id.clone()); - let mut pre_found = false; - // Try find and update peer - for peer1 in &mut peers { - if peer1.is_same_peer(&peer) { - if in_response_set { - // Merge ip_mac and update other infos - peer1.ip_mac.extend(peer.ip_mac.clone()); - peer1.hostname = peer.hostname.clone(); - peer1.platform = peer.platform.clone(); - peer1.online = true; - } else { - // Update all peer infos - *peer1 = peer.clone(); - } - pre_found = true; - break + 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; } } - // Push if not found - if !pre_found { - peers.push(peer); - } - + peers.insert(0, peer); if last_write_time.elapsed().as_millis() > 300 { config::LanPeers::store(&peers); last_write_time = Instant::now(); From 3613f27afc79c42ed4762a43670770f2079b438e Mon Sep 17 00:00:00 2001 From: fufesou Date: Fri, 15 Jul 2022 20:39:42 +0800 Subject: [PATCH 24/31] lan_discovery_WOL: fix udp set_nonblocking twice and lan refactor Signed-off-by: fufesou --- libs/hbb_common/src/udp.rs | 1 - src/lan.rs | 291 +++++++++++++++++++++++++++++++++++++ src/lib.rs | 2 + src/rendezvous_mediator.rs | 279 +---------------------------------- src/ui.rs | 4 +- 5 files changed, 298 insertions(+), 279 deletions(-) create mode 100644 src/lan.rs diff --git a/libs/hbb_common/src/udp.rs b/libs/hbb_common/src/udp.rs index c2d5057f2..3532dd1e0 100644 --- a/libs/hbb_common/src/udp.rs +++ b/libs/hbb_common/src/udp.rs @@ -37,7 +37,6 @@ fn new_socket(addr: SocketAddr, reuse: bool, buf_size: usize) -> Result 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/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/rendezvous_mediator.rs b/src/rendezvous_mediator.rs index 8da1937a7..6dc7a11c9 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 _, @@ -10,15 +10,13 @@ use hbb_common::{ sleep, socket_client, tokio::{ self, select, - sync::mpsc::{unbounded_channel, UnboundedReceiver, UnboundedSender}, time::{interval, Duration}, }, udp::FramedSocket, AddrMangle, IntoTargetAddr, ResultType, TargetAddr, }; use std::{ - collections::{HashMap, HashSet}, - net::{IpAddr, Ipv4Addr, SocketAddr, ToSocketAddrs, UdpSocket}, + net::SocketAddr, sync::{ atomic::{AtomicBool, Ordering}, Arc, Mutex, @@ -66,7 +64,7 @@ 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 { @@ -542,274 +540,3 @@ async fn direct_server(server: ServerPtr) { } } } - -#[inline] -pub fn get_broadcast_port() -> u16 { - (RENDEZVOUS_PORT + 3) as _ -} - -pub 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 -pub 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 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" { - 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(); - } - } - } - _ => {} - } - } - } - } -} - -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(()) -} - -#[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; - } - } -} diff --git a/src/ui.rs b/src/ui.rs index 084422f6b..2b7ffcc29 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -548,7 +548,7 @@ impl UI { } fn send_wol(&mut self, id: String) { - crate::rendezvous_mediator::send_wol(id) + crate::lan::send_wol(id) } fn new_remote(&mut self, id: String, remote_type: String) { @@ -695,7 +695,7 @@ impl UI { fn discover(&self) { std::thread::spawn(move || { - allow_err!(crate::rendezvous_mediator::discover()); + allow_err!(crate::lan::discover()); }); } From 88fef77980fcb27d44aabefd6da8fdef7ad1dfbe Mon Sep 17 00:00:00 2001 From: csf Date: Sat, 16 Jul 2022 22:31:44 +0800 Subject: [PATCH 25/31] android opt:add disable ignore_battery_optimizations --- .../com/carriez/flutter_hbb/MainActivity.kt | 1 - .../kotlin/com/carriez/flutter_hbb/common.kt | 12 ++ flutter/lib/common.dart | 7 +- flutter/lib/pages/settings_page.dart | 104 ++++++++++++------ src/lang/cn.rs | 1 + src/lang/en.rs | 1 + src/mobile_ffi.rs | 3 + 7 files changed, 93 insertions(+), 36 deletions(-) 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 3cb3ae581..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 @@ -57,6 +57,18 @@ fun requestPermission(context: Context, type: String) { } 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 } diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index 1b36c548b..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", "ignore_battery_optimizations"]; + static final permissions = [ + "audio", + "file", + "ignore_battery_optimizations", + "application_details_settings" + ]; static bool isWaitingFile() { if (_completer != null) { diff --git a/flutter/lib/pages/settings_page.dart b/flutter/lib/pages/settings_page.dart index 7506d849f..55a7c8719 100644 --- a/flutter/lib/pages/settings_page.dart +++ b/flutter/lib/pages/settings_page.dart @@ -26,23 +26,42 @@ 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/'; - var _showIgnoreBattery = false; + final _hasIgnoreBattery = androidVersion >= 26; + var _ignoreBatteryOpt = false; @override void initState() { super.initState(); - if (androidVersion >= 26) { - () async { - final res = - await PermissionManager.check("ignore_battery_optimizations"); - if (_showIgnoreBattery != !res) { - setState(() { - _showIgnoreBattery = !res; - }); - } - }(); + 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; } } @@ -53,7 +72,6 @@ class _SettingsState extends State { final enableAbr = FFI.getByName("option", "enable-abr") != 'N'; final enhancementsTiles = [ SettingsTile.switchTile( - leading: Icon(Icons.more_horiz), title: Text(translate('Adaptive Bitrate') + '(beta)'), initialValue: enableAbr, onToggle: (v) { @@ -68,32 +86,37 @@ class _SettingsState extends State { }, ) ]; - if (_showIgnoreBattery) { + if (_hasIgnoreBattery) { enhancementsTiles.insert( 0, - SettingsTile.navigation( + SettingsTile.switchTile( + initialValue: _ignoreBatteryOpt, title: Text(translate('Keep RustDesk background service')), description: Text('* ${translate('Ignore Battery Optimizations')}'), - leading: Icon(Icons.battery_saver), - onPressed: (context) { - PermissionManager.request("ignore_battery_optimizations"); - var count = 0; - Timer.periodic(Duration(seconds: 1), (timer) async { - if (count > 5) { - count = 0; - timer.cancel(); + 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"); } - if (await PermissionManager.check( - "ignore_battery_optimizations")) { - count = 0; - timer.cancel(); - setState(() { - _showIgnoreBattery = false; - }); - } - count++; - }); + } })); } @@ -123,7 +146,13 @@ class _SettingsState extends State { leading: Icon(Icons.cloud), onPressed: (context) { showServerSettings(); - }) + }), + SettingsTile.navigation( + title: Text(translate('Language')), + leading: Icon(Icons.translate), + onPressed: (context) { + showLanguageSettings(); + }), ]), SettingsSection( title: Text(translate("Enhancements")), @@ -162,6 +191,13 @@ void showServerSettings() { showServerSettingsWithValue(id, relay, key, api); } +void showLanguageSettings() { + try { + final langs = json.decode(FFI.getByName('langs')) as Map; + debugPrint("langs:$langs"); + } catch (e) {} +} + void showAbout() { DialogManager.show((setState, close) { return CustomAlertDialog( diff --git a/src/lang/cn.rs b/src/lang/cn.rs index ba85d7f39..58a3a6cd7 100644 --- a/src/lang/cn.rs +++ b/src/lang/cn.rs @@ -286,5 +286,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Language", "语言"), ("Keep RustDesk background service", "保持RustDesk后台服务"), ("Ignore Battery Optimizations", "忽略电池优化"), + ("android_open_battery_optimizations_tip", "如需关闭此功能,请在接下来的RustDesk应用设置页面中,找到并进入 [电源] 页面,取消勾选 [不受限制]"), ].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/mobile_ffi.rs b/src/mobile_ffi.rs index 6a0b71a5e..a0f0490e2 100644 --- a/src/mobile_ffi.rs +++ b/src/mobile_ffi.rs @@ -130,6 +130,9 @@ unsafe extern "C" fn get_by_name(name: *const c_char, arg: *const c_char) -> *co .clone() .to_string(); } + "langs" => { + res = crate::lang::LANGS.to_string(); + } // File Action "get_home_dir" => { res = fs::get_home_as_string(); From 6cb3f3182cc6abcfe3b662e1d84df0cc59feb186 Mon Sep 17 00:00:00 2001 From: Daniel Jorge Csich <67213069+danielcshn@users.noreply.github.com> Date: Sun, 17 Jul 2022 00:43:35 -0300 Subject: [PATCH 26/31] minor README fixes --- README-DE.md | 2 +- README-EO.md | 2 +- README-FA.md | 2 +- README-FI.md | 2 +- README-FR.md | 2 +- README-ID.md | 2 +- README-IT.md | 2 +- README-ML.md | 2 +- README-NL.md | 2 +- README-PL.md | 2 +- README-PTBR.md | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/README-DE.md b/README-DE.md index ab76ea478..0df001e3f 100644 --- a/README-DE.md +++ b/README-DE.md @@ -9,7 +9,7 @@ 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) [![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/I2I04VU09) diff --git a/README-EO.md b/README-EO.md index f70f54ff6..b532aa4de 100644 --- a/README-EO.md +++ b/README-EO.md @@ -9,7 +9,7 @@ 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) [![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/I2I04VU09) diff --git a/README-FA.md b/README-FA.md index 033709a80..0aac205a8 100644 --- a/README-FA.md +++ b/README-FA.md @@ -9,7 +9,7 @@ ‫برای ترجمه این 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) [![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/I2I04VU09) diff --git a/README-FI.md b/README-FI.md index 27ccb75b6..ca846007f 100644 --- a/README-FI.md +++ b/README-FI.md @@ -9,7 +9,7 @@ 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) [![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/I2I04VU09) diff --git a/README-FR.md b/README-FR.md index 1709c3274..5d421b97d 100644 --- a/README-FR.md +++ b/README-FR.md @@ -9,7 +9,7 @@ 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) [![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/I2I04VU09) diff --git a/README-ID.md b/README-ID.md index 632271cd4..6dc00f6fd 100644 --- a/README-ID.md +++ b/README-ID.md @@ -9,7 +9,7 @@ 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) [![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/I2I04VU09) diff --git a/README-IT.md b/README-IT.md index 05491af31..6d3aaf5ee 100644 --- a/README-IT.md +++ b/README-IT.md @@ -9,7 +9,7 @@ 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) [![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/I2I04VU09) diff --git a/README-ML.md b/README-ML.md index fba4822b1..d72d14c02 100644 --- a/README-ML.md +++ b/README-ML.md @@ -9,7 +9,7 @@ ഈ 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) [![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/I2I04VU09) diff --git a/README-NL.md b/README-NL.md index 11ecc622c..cce863b6d 100644 --- a/README-NL.md +++ b/README-NL.md @@ -9,7 +9,7 @@ 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) [![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/I2I04VU09) diff --git a/README-PL.md b/README-PL.md index d525f65c1..d21461fee 100644 --- a/README-PL.md +++ b/README-PL.md @@ -9,7 +9,7 @@ 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) [![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/I2I04VU09) diff --git a/README-PTBR.md b/README-PTBR.md index bb6a25cbf..11986df55 100644 --- a/README-PTBR.md +++ b/README-PTBR.md @@ -9,7 +9,7 @@ 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) [![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/I2I04VU09) From f587bdee5a227229e034749261e97096e69393a5 Mon Sep 17 00:00:00 2001 From: csf Date: Sun, 17 Jul 2022 16:47:19 +0800 Subject: [PATCH 27/31] android fix:protobuf 3.1.0 --- flutter/lib/pages/settings_page.dart | 15 +----- src/mobile.rs | 72 ++++++++++++++-------------- src/mobile_ffi.rs | 3 -- 3 files changed, 37 insertions(+), 53 deletions(-) diff --git a/flutter/lib/pages/settings_page.dart b/flutter/lib/pages/settings_page.dart index 55a7c8719..30eb88b7b 100644 --- a/flutter/lib/pages/settings_page.dart +++ b/flutter/lib/pages/settings_page.dart @@ -146,13 +146,7 @@ class _SettingsState extends State with WidgetsBindingObserver { leading: Icon(Icons.cloud), onPressed: (context) { showServerSettings(); - }), - SettingsTile.navigation( - title: Text(translate('Language')), - leading: Icon(Icons.translate), - onPressed: (context) { - showLanguageSettings(); - }), + }) ]), SettingsSection( title: Text(translate("Enhancements")), @@ -191,13 +185,6 @@ void showServerSettings() { showServerSettingsWithValue(id, relay, key, api); } -void showLanguageSettings() { - try { - final langs = json.decode(FFI.getByName('langs')) as Map; - debugPrint("langs:$langs"); - } catch (e) {} -} - void showAbout() { DialogManager.show((setState, close) { return CustomAlertDialog( diff --git a/src/mobile.rs b/src/mobile.rs index 942510b17..d3adaaa79 100644 --- a/src/mobile.rs +++ b/src/mobile.rs @@ -599,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; } @@ -610,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) @@ -637,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", @@ -654,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); @@ -679,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 @@ -687,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) { @@ -708,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, ) }), @@ -740,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); @@ -752,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() }, @@ -774,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() }, ); @@ -791,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( @@ -815,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", @@ -828,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); } @@ -1029,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() }); @@ -1047,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() }); @@ -1451,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/mobile_ffi.rs b/src/mobile_ffi.rs index a0f0490e2..6a0b71a5e 100644 --- a/src/mobile_ffi.rs +++ b/src/mobile_ffi.rs @@ -130,9 +130,6 @@ unsafe extern "C" fn get_by_name(name: *const c_char, arg: *const c_char) -> *co .clone() .to_string(); } - "langs" => { - res = crate::lang::LANGS.to_string(); - } // File Action "get_home_dir" => { res = fs::get_home_as_string(); From 52f4f274b24ca9f0302482ff2201b1a230542ffb Mon Sep 17 00:00:00 2001 From: fufesou Date: Sun, 17 Jul 2022 22:46:55 +0800 Subject: [PATCH 28/31] lan_discovery_WOL: remove unused struct MyConfig Signed-off-by: fufesou --- libs/hbb_common/src/config.rs | 6 ------ 1 file changed, 6 deletions(-) diff --git a/libs/hbb_common/src/config.rs b/libs/hbb_common/src/config.rs index d05831c03..340a725f8 100644 --- a/libs/hbb_common/src/config.rs +++ b/libs/hbb_common/src/config.rs @@ -878,12 +878,6 @@ pub struct LanPeers { pub peers: Vec, } -#[derive(Serialize, Deserialize)] -struct MyConfig { - version: u8, - api_key: String, -} - impl LanPeers { pub fn load() -> LanPeers { let _ = CONFIG.read().unwrap(); // for lock From 5c27f1c383c4330684e3d57f950037bbee748a4c Mon Sep 17 00:00:00 2001 From: csf Date: Mon, 18 Jul 2022 10:34:46 +0800 Subject: [PATCH 29/31] gen other langs --- src/lang/cs.rs | 1 + src/lang/da.rs | 1 + src/lang/de.rs | 1 + src/lang/eo.rs | 1 + src/lang/es.rs | 1 + src/lang/fr.rs | 1 + src/lang/hu.rs | 1 + src/lang/id.rs | 1 + src/lang/it.rs | 1 + src/lang/ptbr.rs | 1 + src/lang/ru.rs | 1 + src/lang/sk.rs | 1 + src/lang/template.rs | 1 + src/lang/tr.rs | 1 + src/lang/tw.rs | 1 + 15 files changed, 15 insertions(+) diff --git a/src/lang/cs.rs b/src/lang/cs.rs index e12bc6075..c5c432d46 100644 --- a/src/lang/cs.rs +++ b/src/lang/cs.rs @@ -286,5 +286,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("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 f8c676376..d13cd8550 100644 --- a/src/lang/da.rs +++ b/src/lang/da.rs @@ -286,5 +286,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("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 8685e764d..b7f471992 100644 --- a/src/lang/de.rs +++ b/src/lang/de.rs @@ -286,5 +286,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Language", "Sprache"), ("Keep RustDesk background service", ""), ("Ignore Battery Optimizations", ""), + ("android_open_battery_optimizations_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/eo.rs b/src/lang/eo.rs index 5952f51a1..4719a3be3 100644 --- a/src/lang/eo.rs +++ b/src/lang/eo.rs @@ -286,5 +286,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("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 9e12ed430..adf214b97 100644 --- a/src/lang/es.rs +++ b/src/lang/es.rs @@ -286,5 +286,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("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 5e223b262..e92069993 100644 --- a/src/lang/fr.rs +++ b/src/lang/fr.rs @@ -286,5 +286,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("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 index ab890766e..b0d1bfda0 100644 --- a/src/lang/hu.rs +++ b/src/lang/hu.rs @@ -286,5 +286,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("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 e926ee4cf..4cdaf8b95 100644 --- a/src/lang/id.rs +++ b/src/lang/id.rs @@ -286,5 +286,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("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 016363d4e..3a0c2dc2a 100644 --- a/src/lang/it.rs +++ b/src/lang/it.rs @@ -286,5 +286,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("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 e36672e5c..e3cadd204 100644 --- a/src/lang/ptbr.rs +++ b/src/lang/ptbr.rs @@ -286,5 +286,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("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 d8f138223..7735e3db3 100644 --- a/src/lang/ru.rs +++ b/src/lang/ru.rs @@ -286,5 +286,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("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 4f2a4a29f..ea8d22aa8 100644 --- a/src/lang/sk.rs +++ b/src/lang/sk.rs @@ -286,5 +286,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("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 8feac4d3b..9ea7146e1 100644 --- a/src/lang/template.rs +++ b/src/lang/template.rs @@ -286,5 +286,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("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 5bab8d8c9..1d30425dc 100644 --- a/src/lang/tr.rs +++ b/src/lang/tr.rs @@ -286,5 +286,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("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 8bc1392bb..30c8f5a76 100644 --- a/src/lang/tw.rs +++ b/src/lang/tw.rs @@ -286,5 +286,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Language", "語言"), ("Keep RustDesk background service", "保持RustDesk後台服務"), ("Ignore Battery Optimizations", "忽略電池優化"), + ("android_open_battery_optimizations_tip", "如需關閉此功能,請在接下來的RustDesk應用設置頁面中,找到並進入 [電源] 頁面,取消勾選 [不受限制]"), ].iter().cloned().collect(); } From b74a01a3b3180d0e921bd56b27411087cdbebf9e Mon Sep 17 00:00:00 2001 From: rustdesk Date: Mon, 18 Jul 2022 12:15:10 +0800 Subject: [PATCH 30/31] update lock --- Cargo.lock | 388 ++++++++++++----------------------------------------- Cargo.toml | 9 +- 2 files changed, 90 insertions(+), 307 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index adc152440..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" @@ -80,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" @@ -421,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]] @@ -544,7 +525,7 @@ checksum = "5a050e2153c5be08febd6734e29298e844fdb0fa21aeddd63b4eb7baa106c69b" dependencies = [ "glob", "libc", - "libloading 0.7.3", + "libloading", ] [[package]] @@ -615,9 +596,9 @@ dependencies = [ [[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", @@ -706,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", ] @@ -886,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" @@ -957,9 +924,9 @@ dependencies = [ [[package]] name = "crypto-common" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ccfd8c0ee4cce11e45b3fd6f9d5e69e0cc62912aa6a0cb1bf4617b0eba5a12f" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ "generic-array", "typenum", @@ -981,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", ] @@ -991,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]] @@ -1039,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", ] @@ -1233,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" @@ -1252,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" @@ -1280,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]] @@ -1538,9 +1441,9 @@ dependencies = [ [[package]] name = "flutter_rust_bridge_macros" -version = "1.37.2" +version = "1.38.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b78a1a69afcf28951d0801e9be838b236734c8827a0eadbb71fb651aa2e9fed" +checksum = "13652b9b71bc3bf4ea3bbb5cadc9bc2350fe0fba5145f6a949309fc452576d6d" [[package]] name = "fnv" @@ -1800,9 +1703,9 @@ 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" @@ -2161,9 +2064,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.12.2" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "607c8a29735385251a339424dd462993c0fed8fa09d378f259377df08c126022" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" dependencies = [ "ahash", ] @@ -2276,7 +2179,7 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hwcodec" version = "0.1.0" -source = "git+https://github.com/21pages/hwcodec#adb15a681d69955048f85f5684525378289ab780" +source = "git+https://github.com/21pages/hwcodec#91d1cd327c88490f917457072aeef0676ddb2be7" dependencies = [ "bindgen", "cc", @@ -2392,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]] @@ -2516,7 +2422,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1b3b6681973cea8cc3bce7391e6d7d5502720b80a581c9a95c9cbaf592826aa" dependencies = [ "gtk-sys", - "libloading 0.7.3", + "libloading", "once_cell", ] @@ -2535,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" @@ -2715,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", ] @@ -2790,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" @@ -2815,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" @@ -2877,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", @@ -2908,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", ] @@ -2931,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", @@ -2987,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" @@ -3039,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", @@ -3252,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" @@ -3835,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" @@ -4034,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.139", - "serde_json 1.0.82", "winapi 0.3.9", ] @@ -4137,7 +3952,7 @@ dependencies = [ "rdev", "repng", "reqwest", - "rpassword 6.0.1", + "rpassword 7.0.0", "rubato", "runas", "rust-pulsectl", @@ -4220,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" @@ -4460,7 +4265,7 @@ version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e182d6ec6f05393cc0e5ed1bf81ad6db3a8feedf8ee515ecdd369809bcce8082" dependencies = [ - "darling 0.13.4", + "darling", "proc-macro2", "quote", "syn", @@ -4468,9 +4273,9 @@ dependencies = [ [[package]] name = "serde_yaml" -version = "0.8.25" +version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ec0091e1f5aa338283ce049bd9dfefd55e1f168ac233e85c1ffe0038fb48cbe" +checksum = "578a7433b776b56a35785ed5ce9a7e777ac0598aac5a6dd1b4b18a307c7fc71b" dependencies = [ "indexmap", "ryu", @@ -4551,18 +4356,18 @@ 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", @@ -4631,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" @@ -4725,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", @@ -5072,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", @@ -5086,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" @@ -5112,9 +4904,9 @@ 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" @@ -5307,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", @@ -5323,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", @@ -5335,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", @@ -5358,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", @@ -5369,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", ] @@ -5672,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", @@ -5686,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", ] @@ -5790,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 c008f7828..87fc0f169 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -51,9 +51,9 @@ 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" default-net = "0.11.0" wol-rs = "0.9.1" @@ -78,9 +78,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" From 2851d71290799034b3c853aa20f21308ba297c31 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Mon, 18 Jul 2022 13:33:12 +0800 Subject: [PATCH 31/31] fix mac compile --- src/ui/macos.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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; } }